【渗透测试】--- 宽字节注入

什么是宽字节

  • 宽字节就是两个以上的字节,宽字节注入产生的原因是:各种字符编码的不当操作
  • gbk编码:GBK编码,编码的范围为 8140-FEFE,首字节在 81-FE 之间,尾字节在 40-FE 之间

引起宽字节注入的原因

  • 1.mysql字符集编码设置为gbk
  • 2.然后使用addslashes函数对用户输入的部分内容进行转义
  • 3.如果用户输入 %df' 会被转义成 %df\' 也就是 %df%5c%27 , 其在执行之前会进行gbk编码,变为:運' 导致 \' 的转义失效,因此可以使用单引号进行闭合。造成注入漏洞

sqli-labs中的宽字节注入

当输入?id=%df' 时对 ' 的转义就会失效
【渗透测试】--- 宽字节注入_第1张图片
看看32关的代码
【渗透测试】--- 宽字节注入_第2张图片

使用sqlmap进行宽字节注入

使用unmagicquotes.py脚本即可。执行:sqlmap -u http://192.168.15.146/sqli-labs-master/Less-32/?id=1 --tamper unmagicquotes.py
【渗透测试】--- 宽字节注入_第3张图片

宽字节注入的预防

  • 先调用mysql_set_charset函数设置连接使用的字符集为gbk,再调用mysql_real_escape_string函数对用户的输入进行转义(该函数比addslashes函数安全)
  • 这样当用户输入%df'%df%5c 时 mysql 就会把他直接编码为 ,mysql_real_escape_string函数是不会对%5c再添加%5c进行转义的。这样就预防住宽字节注入了

你可能感兴趣的:(渗透测试,网络安全)