宽字节注入原理及绕过方式

宽字节注入原理及绕过方式

前言

众所周知,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()注入后发现不成功

image

接下来尝试宽字节注入,而直接在网页中提交依然不行,所以判断为POST请求,使用抓包工具进行注入

image

注入成功

image

posted @ 2021-08-13 13:03  icui4cu  阅读(2122)  评论(0编辑  收藏  举报