所谓SQL注入,便是通过把SQL命令插入到 Web表单提交 或 URL 或 页面要求等的查询字符串中,终极达到欺骗做事器实行恶意的SQL命令。
注:从这句话看出常见的注入点在
a. web表单

b. URL链接中
c. 登录框(页面要求查询)
2.SQL注入事理
SQL注入(SQLInjection)是这样一种漏洞:当我们的Web app 在向后台数据库通报SQL语句进行数据库操作时。如果对用户输入的参数没有经由严格的过滤处理,那么攻击者就可以布局分外的SQL语句,直接输入数据库引擎实行,获取或修正数据库中的数据。
SQL注入漏洞的实质是把用户输入的数据当做代码来实行,违背了“数据与代码分离”的原则。
SQL注入漏洞有两个关键条件,理解这两个条件可以帮助我们理解并防御SQL注入漏洞:
用户能掌握输入的内容Web运用实行的代码中,拼接了用户输入的内容我们以DVWA漏洞演示环境举列子
我们在输入框中输入1,点击submit,页面返回如图红框中数据。
这里有履历的渗透老司机就知道,是web运用查询了数据库,获取了useid为1的数据。
这里我们大胆预测一下这里的SQL语句长什么样子呢
select Firstname, sunname from XXX where userid= 我们输入的ID
当我们在输入框中输入1时sql语句为:
select Firstname, sunname from XXX where userid= '1'
由回显数据我们得到Id为1的firstname,sunname的字段内容
但是当我们在输入框中输入如下内容时
1' union select 1,database()%23(‘%23’为’#’的url编码,’#’为mysql注释符,注释掉后面的语句)
此时实行的数据库命令是:
select Firstname, sunname from XXX where userid= '1' union select 1,databsae()#
不仅可以得到id为1的firstname,sunname字段内容,还可以得到当前数据库名
这样如果攻击者布局更多的SQL语句,哪么数据库里的信息都会被攻击者得到,造成数据透露。
3.SQL注入的产生
动态字符串构建禁绝确的处理转义字符(宽字节注入)禁绝确的处理类型(报错透露信息)禁绝确的处理联合查询禁绝确的处理缺点(报错透露信息)禁绝确的处理多次提交(二次注入)不屈安的数据库配置默认预先安装的用户以root、SYSTEM 或者Administrator权限系统用户来运行默认许可很多系统函数(如xp_cmdshell, OPENROWSET 等)4.SQL注入的浸染
绕过登录验证(万能密码等)获取敏感数据(获取数据库中的信息)文件操作(读取、写入文件等)实行系统命令等等5.常见的SQL注入分类
A.按照数据库实行结果是否显示到页面上分类
a.SQL回显注入(数据库的实行结果直接显示到页面上)
SQL回显注入又可以分为:
01:union联合查询注入
02:报错注入
b.SQL盲住(不显示到页面上)
SQL 盲住又可以分为:
01:布尔盲住
02:韶光注入
B.按照注入点类型来分类
数字型注入点在 Web 端大概是 http://xxx.com/news.php?id=1 这种形式,其注入点 id 类型为数字,以是叫数字型注入点。这一类的 SQL 语句原型大概为 select from 表名 where id=1。字符型注入点在 Web 端大概是 http://xxx.com/news.php?name=admin 这种形式,其注入点 name 类型为字符类型,以是叫字符型注入点。这一类的 SQL 语句原型大概为 select from 表名 where name='admin'。有时候是是双引号:where name=\"大众admin\公众,把稳多了引号。搜索型注入点这是一类分外的注入类型。这类注入紧张是指在进行数据搜索时没过滤搜索参数,一样平常在链接地址中有“keyword=关键字”,有的不显示在的链接地址里面,而是直接通过搜索框表单提交。 此类注入点提交的 SQL 语句,其原形大致为:select from 表名 where 字段 like '%关键字%'。C.按照数据提交的办法来分类
这种分类实在只是 HTTP 通报数据的办法不同,严格来议和 SQL 没多大关系,但是在编写 PoC (漏洞验证程序)的时候,这会影响到我们的代码中发送数据的形式,以是我在这里提出来了。
GET 注入提交数据的办法是 GET , 注入点的位置在 GET 参数部分。比如有这样的一个链接 http://xxx.com/news.php?id=1 , id 是注入点。POST 注入利用 POST 办法提交数据,注入点位置在 POST 数据部分,常发生在表单中。Cookie 注入HTTP 要求的时候会带上客户真个 Cookie, 注入点存在 Cookie 当中的某个字段中。HTTP 头部注入注入点在 HTTP 要求头部的某个字段中。比如存在 User-Agent 字段中。严格讲的话,Cookie 实在该当也是算头部注入的一种形式。由于在 HTTP 要求的时候,Cookie 是头部的一个字段。