sqli-labs(十四)(宽字节注入)


数据库使用gbk编码的时候,会将两个字符合并成一个中文。

写在前面吧,对php的代码审计也会有帮助

直接使用 set character_set_client=gbk 或者是常见的mysql_query("SET NAMES gbk");都会存在款字节注入。

官方推荐使用Mysql_set_charset('gbk','$conn'),但是也不是完全就没有问题了

推荐使用mysql_query("SET NAMES gbk");后set character_set_client=binary。

第三十二关:

这关是宽字节注入漏洞,特殊值字符如单引号都会被转义 '  ->  \'

 

原理我有点说不清楚:通常来说,一个gbk编码汉字,占用2个字节。一个utf-8编码的汉字,占用3个字节。在php中,我们可以通过输出echo strlen("中");页面编码为gbk时输入2,utf-8时输入3;mysql在使用GBK编码的时候,会认为两个字符为一个汉字,例如%df%5c就是一个汉字(前一个ascii码大于128才能到汉字的范围)。我们在过滤 ' 的时候,往往利用的思路是将 ' 转换为 \' 。所以如果我们输入%df%27(%27就是单引符号会被转义成\' 也就是%5c%27),在后台%df会将%5c“吃掉”,组成一个汉字(%df%5c是一个汉字)。

输入?id=1%df%27,页面会报错说明单引符号起作用了。

 

 输入?id=%df%27 union select 1,2,3 %23

 

 第三十三关:

后台使用的addslashes()做的过滤,绕过手法和上面完全一样

 

第三十四关:

和第三十三关一样,只是将get请求换成了post请求。

第三十五关:

连引号都不需要用了,直接联合注入就好,不知道这关为什么要这样,没摸清用意。

 

第三十六关:

使用的是mysql_real_eacape_string(),会比addslashes多过滤些东西

 还是可以使用宽字节注入。

 

第三十七关:

将第三十六关的get请求转成了post请求。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM