因为%df的关系, \的编码%5c被吃掉了,也就失去了转义的效果,直接被带入到mysql中,然后mysql在解读时无视了%a0%5c形成的新字节,那么单引号便重新发挥了效果
%df%27===> (addslashes)====> %df%5c%27====>(GBK)====>運’ 用户输入===>过滤函数===>代码层的$sql==> mysql处理请求= =>mysql中的sql 默认编码character set_ client== >根据character. set connection转码== >更新数据库时转化成字段 所对应的编码
(1)使用mysql_set_charset(GBK)指定字符集 (2)使用mysql _real_escape_string进行转义
注入点因为经过过滤处理无法触发sql注入漏洞,比如addslashes函数,将单引号等字符转义变成,但是存进数据库后,数据又被还原,在这种情况下。如果发现一个新的注入同时引用了被插入的数据库数据,就可以实现闭合新发现的注入漏洞引发二次注入(先将注入语句插入到数据库中,然后再触发语句)
一阶注入: 1.一阶SQL注 入发生在一个HTTP请求和响应中 ,对系统的攻击是立即执行的 2.攻击者在http请求中提交非法输入 3.应用程序处理非法输入。使用非法输入构造SQL语句 4.在攻击过程中向攻击者返回结果 二阶注入: 1.攻击者在http请求中提交恶意输入 2.恶意输入保存在数据库中 3.攻击者提交第二次http请求 4.为处理第二次http请求,程序在检索存储在数据库中的恶意输入,构造SQL语句 5.如果攻击成功,在第二次请求响应中返回结果