前言
众所周知,SQL注入作为危害最大的攻击方式,开发人员在开发时一定会想办法去防范,在这里我们介绍一种新的方式——宽字节注入法去绕过设置的障碍
原理
一般来说,如果开发人员在开发是时候,对传入的参数进行了特殊的函数处理,比如使用了trim()函数,htmlspecialchars()函数,addlashes函数,是可以过滤我们非法提交的参数,从而导致SQL注入无法成功。
作为攻击者,要完成的是对参数的拼接,从而导致恶意的SQL语句写入。作为开发者要完成的是SQL输出参数的一个过滤比如对恶意的字符进行转移
常用过滤函数
trim()函数
移除字符串两侧的空白字符或其他预定义字符
htmlspecialchars()函数
把预定义的字符"<"和">"转换为HTML实体,预防XSS
addslashes()函数
返回在预定义字符之前添加反斜杠的字符串
# 预定义字符
1.单引号(‘)
2.双引号(")
3.反斜杠(\)
4.NULL
上述函数常在CMS里使用进行过滤
宽字节注入条件
1.数据库为GBK编码
2.使用了转义函数,将、POGETST、cookie传递的参数进行过滤,将单引号、双引号、null等敏感字符用转义符 \ 进行转义
绕过方式
root %df‘ or 1=1 #
# 原理:在GBK编码中,反斜杠的编码是%5c,在输入%df后,使得添加反斜杠后形成%df%5c,而%df%5c是繁体字“連”,单引号成功逃逸,爆出Mysql数据库的错误
以pikachu为例
我们在正常updatexml()注入后发现不成功
接下来尝试宽字节注入,而直接在网页中提交依然不行,所以判断为POST请求,使用抓包工具进行注入
注入成功