笔记36
Abstract: SQL
注入之宽字节注入、 HTTP
头注入和其他注入
Table of Contents
宽字节注入
原理:
GBK
占用两字节,ASCII
占用一个字节。PHP
中编码为 GBK
,函数执行添加的是 ASCII
编码,添加的符号为 "\"
,MySQL
默认字符集是 GBK
等宽字节字符集。
%df'
被 PHP
中的 addslashes函数
(开启 GPC
或者 iconv()
)转义成 %df\'
,其中 \
的十六进制是 %5C
,那么现在 %df\'
= %df%5C%27
,若程序默认的字符集是 GBK
等宽字节字符集,则 MySQL
用 GBK
编码时,会认为 %df%5c%27
是一个宽字符,即 運'
,出现单引号就好注入了。
宽字节注入,内联注入是无法使用的,宽字节注入推荐使用加前缀 --prefix
和后缀 suffix
方法,不推荐写 tamper
。
注意:
PHP5.3
之前,PDO
受宽字节注入影响- 如何防止宽字节注入?
mysql_set_chartset('GBK')
mysql_real_escape_string($value)
二次编码注入
url
编码是一种浏览器用来打包表单输入的格式。url
编码就是一个字符 ascii
码的十六进制,不过需要在前面加上 %
,比如 \
的 ascii
是 92(0x5c),故\
的 url
编码为 %5c
函数
- urldecode()
- rawurldecode()
1 |
|
注意:默认的 GET
和 POST
函数,先解码一次。
HTTP头注入
XFF 注入
X-Forwarded-For
:简称 XFF
头,代表客户端,也就是 HTTP
的请求端真实的 IP
,通常一些网站防注入功能会记录请求端真实 IP
地址并写入数据库或某文件。通过修改 XFF
头可以实现伪造 IP
。
使用 Modify Headers
可以修改 X-Forwarded-For
。
通过 burpsuite
抓包