YYK's Blog

SQL注入(一)

Word count: 946Reading time: 3 min
2020/03/15 Share

以下为此漏洞的初级知识分类

在这里,你将学到初级的SQL注入漏洞,如有想深入学习,请继续关注此博客,谢谢。

数据库的基本概念

数据库大致可以分为四点:

  1. 数据(Data)
    在计算机中,各种我们所看到的字母,文字,字符串,语音,图片视频等统称为数据。

  2. 数据库(DB)【Access、MYSQL、Oracle、MSSQL等】
    是按照数据结构来组织、存储和管理数据的“仓库”

  3. 数据库管理系统(DBMS)【Access、MYSQL、Oracle、MSSQL等】是一种操纵和管理数据库的软件,用于建立、使用和维护数据库。它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。

  4. 结构化查询语言(SQL)【DQL、DDL、DML、TCL、DCL】是一种用于数据库查询和程序设计的语言,用于存取数据以及查询、更新和管理关系数据库系统

SQL注入原理

SQL注入攻击就是在一些涉及到SQL语句,也就是SQL 数据库查询的功能进行恶意构造语句执行SQL命令,或通过提供恶意的数据包执行恶意的SQL命令。一般情况下,往往是应用程序缺少对输入进行安全性设计。

SQL注入方法

攻击者将一些包含指令的数据发送给解释器,欺骗解释器执行计划外的命令。

SQL注入危害

读取或篡改数据库的信息,甚至能够获得服务器的包括管理员的权限。

SQL注入防御(日后另起一篇持续更)

1 、参数校验;2、对数据库权限做限制;3、使用 PrepareStatement等

SQL注入简易讲解

查询流程对比

一个正常的查询流程如下:
请求网站—>查看是否有查询语句—>语法检查—>从数据库里查询—>返回查询信息

注入攻击的流程如下:
构造SQL攻击语句—>查看是否有查询语句—>语法检查—>从数据库里查询—>返回查询信息—>通过返回信息进行进一步攻击查询或得到管理员权限进行入侵等。

常用测试语句

以下可用get或用post方式进行执行语句,过于简单,在此不做演示

  1. 单引号及or关键字
    我们看下面的这句常用登陆查询语句
    1
    SELECT * FROM Users WHERE Username='$username' AND Password='$password'
    如果我们构造 username=1′or′1′=′1password=1’or’1’=’1 ,或者在username查询成功后直接将paassword注释掉,这样就可以直接绕过进行登陆。

以下为代入的SQL语句:

1
SELECT * FROM Users WHERE Username='1' OR '1'='1' AND Password='1'OR '1'='1'
  1. 使用括号
    我们看下面这个语句,我们可以先加个括号,然后把后面的password段注释掉,这样就达到了我们攻击的目的。
    1
    SELECT * FROM Users WHERE((Username='$username')AND(Password=MD5('$password')))
    以下为带入的SQL语句:
    1
    username=1′or′1′=′1′))/∗password = 1
  2. Union查询SQL
    利用Union可以进行连接查询,从而进一步得到信息,假设如下查询:
    1
    SELECT Name, Phone, Address FROM Users WHERE Id=$id
    那么我们设置ID的值为:
    1
    $id =1 UNION ALL SELECT StudentNumber,1,1 FROM StudentTable
    那么整体的查询就会变为:
    1
    SELECT Name, Phone,Address FROM Users WHERE Id=1 UNION ALL SELECT StudentNumber,1,1 FROM StudentTable

SQL注入分类(日后另起一篇持续更)

  • 手工注入
    • 宽字节注入
    • 盲注
      • 时间盲注
      • 报错盲注
      • 布尔型盲注
    • 其他注入
  • 自动化注入—-sqlmap
CATALOG
  1. 1. 以下为此漏洞的初级知识分类
    1. 1.1. 数据库的基本概念
    2. 1.2. SQL注入原理
    3. 1.3. SQL注入方法
    4. 1.4. SQL注入危害
    5. 1.5. SQL注入防御(日后另起一篇持续更)
    6. 1.6. SQL注入简易讲解
      1. 1.6.1. 查询流程对比
      2. 1.6.2. 常用测试语句
    7. 1.7. SQL注入分类(日后另起一篇持续更)