SQL注入之宽字节与二阶注入
程序员文章站
2024-03-19 21:31:58
...
宽字节与二阶注入
宽字节注入
当我们把 php.ini 文件里面的 magic_quotes_gqc 参数设为 ON 时
所有的'(单引号), "(双引号),\(反斜杠)和 null 字符都会被自动加上一个反斜杠进行转义。
还有很多函数有类似的作用如:
addslashes()、mysql_escape_string()、mysql_real_escape_string()等
添加在 get post cookie变量前
为了解决sql注入攻击
另外还有 parse_str()后的变量也受magic_quotes_gpc(魔术符号,对特殊符号转译)的影响。
其中\的十六进制是 %5C ,当我们在单引号前面加上%df 的时候,最终就会变成 運',
如果程序的默认字符集是 GBK 等宽字节字符集,则 MYSQL 用 GBK 的编码时,
会认为 %df 是 一个宽字符,
也就是運,也就是说:%df\’ = %df%5c%27=縗’,有了单引号就好注入了。
' =======>\'单引号转义后占两个字节,所以我们需要通过繁体字%df 构造两个字节,
最终用運干掉了\,
也就是说被運占领了\ 所以最后在页面也不会显示出来.
**简单来说就是用汉字代替了\,不会再去转译单引号**
注意
数字和字母占一个字节,汉字占两个字节。
没有魔术引号的保护地方
(1) $_SERVER 变量
PHP5 的$_SERVER 变量缺少 magic_quotes_gqc 的保护,导致近年来 X-Forwarded-For的漏洞猛爆,所以很多程序员考虑过滤 X-Forwarded-For
(2)getenv()得到的变量(使用类似$_SERVER 变量)
(3)$HTTP_RAW_POST_DATA 与 PHP 输入、输出流
二阶注入
多存在于注册 搜索
在注册名或者搜索中添加单引号等