代码审计day4

 · 2020-3-20  ·次阅读


宽字节注入

因为%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.如果攻击成功,在第二次请求响应中返回结果