问题描述
在使用正常的宽字节注入方法中发现,我们使用%df
,去尝试吃掉\
;如图1。然而在后端过滤的时候,我们的%
在请求体中被转化成了%25
,如图2。所以最后使我们想要的%df
与\
结合失败,反斜杠\
仍然了保留了下来,导致我们想要构造的SQL语句无法成功。
图1
图2
原因分析:
- 后端过滤数据的时候,可能设置了编码格式转换,当我们提交表单数据的时候,我们的输入的
%
被转化为了%25
- 传输数据到数据库时,传入的
%25df
与反斜杠\
没能成功结合,使得\
保留了下来 - 最后
\
将我们构造的SQL语句中的'
结合在一起,转义成了其他字符,使得我们构造闭合无法成功
解决方案:
burp Suite为例
- 在抓到数据包之后,将包发送到Repeater模块,快捷键Ctrl+R
- 将
%25df
修改为%df
,之后再测试(构造)我们想要的SQL语句,经过测试,本关卡应当使用盲注解决,如图3-图4
图3
图4
总结
- 宽字节注入过程中的基本思路:
①去掉有转义功能的反斜杠\
②保留我们构造语句中的引号'
,使我们构造的语句能够成功执行。 - 宽字节中,我们构造的
%df
并不是唯一的,也可以使用其他的宽字节,只要满足字符串编码即可(ascii码大于128)。比如:129 =》0x81 =》%81 - 常见的宽字节有:%df、%81、%82、%de 等等