sql宽字节注入

sql注入中最关键的一步就是将引号进行闭合,而常见的addslashes()函数、mysql_escape_string函数、get_magic_quotes_gpc()函数、mysql_real_escape_string()函数的使用将引号进行了转义,这时我们要绕过这些函数进行注入,宽字节注入就是其中一种方法。

何时能进行宽字节注入

1.mysql数据库使用GBK编码

2.对引号进行了转义(加\)

特殊情况:

1.数据库使用了安全的编码模式

2.使用了iconv() 函数进行一些特殊的编码转换(utf-8-->utf-16,GBK-->utf-8等)

宽字节注入原理

在数据库设置mysql_set_charset(“gbk”)即使用GBK编码时,输入字符的ASCII码大于128(到达汉字的范围)会将这个字符以及后面的一个字符当作一个汉字去识别。在转义 ' 时,通常是将其转换为\',url编码后为%5c%27,我们如果要绕过,就得把\过滤掉。常用的方法就是在%5c%27之前加%df,由于%df的ASCII码为223,数据库会将%df%5c当成一个汉字“連”,%27成功逃逸。(其中%df可以换成ASCII码大于128的字符)

特殊情况中,iconv()函数解析错误导致在编码转换时\被吃掉。

例子

sqlilabs中less32-37都可以使用宽字节注入进行绕过

Less-32

payload:​​​​​​
http://localhost/sqli-labs-master/Less-32/?id=-1%df%27union%20select%201,database(),user()--+​​​​​​​

由下方hint和hex可知%df%5c被当成一个汉字去处理了,从而引号逃逸。

Less-34

payload:
uname=-1%df' union select 1,2#&passwd=admin&submit=Submit

 与get不同的是,post传参时数据不会经过urlencode,所以我们要写成%df'形式。

特殊情况

在sqlilabs Less-32文件中找到mysql_query("SET NAMES gbk");修改为mysql_query("SET NAMES utf8");再添加iconv函数将gbk转换成utf-8的话才会产生宽字节注入。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值