SQL注入-宽字节注入

SQL注入-宽字节注入

原理:

为防止SQL注入,一般都会开启gpc来过滤特殊字符,但如果数据库设置字节解析与PHP不同,并试用了宽字节字符集,就会导致宽字节注入,从而逃避gpc。(GBK和Big5等)

列:

环境sqli-labs第33关。

打开index.php查看代码:

image-20220816113250937

发现定义了一个check_addslashes($string)函数,该函数就是将传进来的$string变量使用addslashes()进行过滤。

然后我们到页面输入?id=1\:

image-20220816113008300

可以看到经过check_addslashes()函数过滤后我们输入的字符会被转义,在\前面又加了一个\

然后我们尝试宽字符注入:

payload:?id=1%df' and 1 --+?id=1%df' and 1 --+发现页面回显不同:

image-20220816114023988

image-20220816114052838

说明宽字符注入成功,我们尝试用宽字符联合注入试一下:

payload?id=-1%df' union select 1,database(),user() --+:

image-20220816114303072

发现注入成功,可这是为什么呢?

解析:

我们首先要知道:

1,GBK编码,两个字符为一个汉字。

2,\的URL编码为:%5c

知道这俩就很好理解了,我们输入?id=1%df'的URL编码为?id=1%df%27传入到代码层后过滤函数会在'号前加个\变成?id=1\',经过URL编码后为?id=1%df%5c%27,之后传到数据库由于数据库使用GBK编码,两个字符为一个汉字,那么他就会以为%df%5c是一个汉字(%df%5c为汉字運(yun)可以认为%df\号吃掉了),那么最终变为where id='1運',这在数据库中是可以执行的,查到的数据为id='1’的数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小洋葱头头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值