数据库注入 之 SQLmap绕WAF脚本编写

humbie   ·   发表于 2022-09-23 14:18:52   ·   学习杂记

WAF:web应用防护系统,网站应用级防御系统。
有些网站未必有WAF,但可能也会由网站自带的防护策略拦截。

任何WAF的检测机制核心就是正则表达式,通过正则匹配到内容触发防护。
可能对传参、文件内容(针对一句话木马)、扩展等进行拦截。

绕WAF:本地测试,测试成功再拿出去用。
很多时候防护根本不是WAF,或者网站有时可能用很老的WAF。

常见绕过手法:
1.用其他函数、写法代替。(比较常用)(建议钻研)
$a=get_defined_functions();$a[‘internal’]841;
这是一句话木马。
2.大小写绕过(老WAF能)
3.替换绕过:有些过滤规则强行删除检测到的代码,然后执行。
4.编码绕过(比较常用):网站因为功能需要编码解码,但是用编码WAF不认识就绕过了。(可以看抓包中的传参是不是有被编码)

5.注释绕过(比较常见):WAF认为注释后面是安全的,然后尝试hpp。
比如:http://xxx.com/id=1/\*order by 1 &id=1 and sleep(1) — q*/
WAF认为这个全是注释里的,但是后端代码认为id又被传了一次,接受了后面的传参。

6.白名单绕过:本地访问可能不拦截、管理员权限。(文件白名单:1.txt/?id=xxx(DNS注入里的))(管理员权限:XFF改成本地,让他以为是本地代理别人来的。)

7.垃圾数据填充(比较常见):写一大队数据然后传参,WAF只检测了其中一部分就绕过了。(POST传参)
id=1/*safsdfddsdsfdsff*/ order by 1 — q (注释里填字符可以15W为单位填写,100万个字符还不行,一般就不行了。)
常见替代:
空格可以用+(+因为是URL编码)或者是/**/ sleep()用sleep/**/()代替’sleep’()。
判断是组合式拦截还是强过滤:union-auniona-union select-unionselect。

SQLmap的tamper模块有很多防过滤脚本,可以查tamper使用方法。(先手注试试再脚本)
不懂得也可以查源码,就在tamper文件夹里,源码有注释。
用法:
python sqlmap.py -u http://xxxxx.com —tamper base64encode.py
最后的base64encode.py就是tamper里的脚本。

脚本写法:
随便找个脚本复制一下,把除了tamper函数内的东西全保留,然后编写tamper函数即可。
这个函数有俩传参: payload(原本SQLmap要执行的代码)、kwargs(设置HTTP头)(比较废物)。
payload=payload.replace(xx,替换xx)
将replace里的某xx字符换成后面的替换xx。
或者payload=payload+’xxxx’。
可以用正则脚本替换,需要多引用import re(python正则库)。

打赏我,让我更有动力~

0 条回复   |  直到 2022-9-23 | 530 次浏览
登录后才可发表内容
返回顶部 投诉反馈

© 2016 - 2024 掌控者 All Rights Reserved.