# sqlmap 绕过 waf
# 流量拦截
因为 sqlmap 的扫描速度很快,可能会被网站的流量监控给拦截,我们可以用时间函数或者代理池解决
# 时间函数
1 | python sqlmap.py -u "url" --delay 1 |
# 代理池
# 请求头拦截
sqlmap 在注入时,请求头被检测到就会被屏蔽,我们可以用随机 user-agent 或者搜索引擎的请求头
1 | python sqlmap.py -u "url" --random-agent |
可以自定义请求头比如用百度的请求头,因为搜索引擎收录站点也是用爬虫爬取的,所以一般的网站不会屏蔽搜索引擎的请求头
1 | python sqlmap.py -u "url" --user-agent="Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" |
扩展 1:有些 WAF 它拦截的可能是其他字段,可以使用 burp 抓包替换这个字段来进行绕过
扩展 2:将注入语句写在 txt 文件中,放在 sqlmap 目录下跑
# 关键字替换
通过 tamper 模块的绕过脚本,将容易被屏蔽的关键字替换,sqlmap 自带很多脚本在 sqlmap/tamper 目录下
1 | python sqlmap.py -u "url" --tamper 模块名,模块名... |
# IP 白名单
当网站获取 ip 的方式为获取客户端的 ip 的话,就有可能存在伪造 i 绕过的情况,但从网络层获取 ip 的就没这个可能
方法:修改 http 的 header
1 | x-forwarded-for |
# 静态资源
特定的静态资源后缀请求,常见的静态文件 (.js .jpg .swf .css 等等),类似白名单机制,waf 为了检测效率,不去检测这样一些静态文件名后缀的请求。
1 | http://10.9.9.201/ sql.php?id=1 |
备注: Aspx/php 只识别到前面的,.aspx/.php 后面基本不识别
# url 白名单
为了防止误拦,部分 waf 内置默认的白名单列表,如 admin/manager/system 等管理后台。只要 url 中存在白名单的字符串,就作为白名单不进行检测。常见的 url 构造姿势:
1 | http://10.9.9.201/sql.php/admin.php?id=1 |
waf 通过 /manage/ 进行比较,只要 url 中存在 /manage/ 就作为白名单不进行检测,这样我们可以通过 /sql.php?a=/manage/&b=…/etc/passwd 绕过防御规则
# 爬虫白名单
通过伪造各大搜索引擎的请求头来绕过 waf
部分 waf 有提供爬虫白名单(各大浏览器的爬虫)的功能,识别爬虫的技术一般有两种:
1、根据 useragent
2、通过行为来判断
UserAgent 可以很容易欺骗,我们可以伪装成爬虫尝试绕过。User Agent switcher (Firefox 附加组件),下载地址:
https://addons.mozilla.org/en-us/firefox/addon/user-agent-switcher/
# 数据替换
大小写,加解密,编码,等价函数,特殊符号,反序列化,注释符混用
# 其他
# Fuzz
# 垃圾数据溢出
# http 参数污染
如果出现多个相同参数,不同的服务器搭建网站会出现参数接受的差别,从而令原有的参数失效
web 服务器 | 参数获取函数 | 获取到的参数 |
---|---|---|
PHP/Apache | $_GET(“par”) | last |
JSP/Tomcat | Request.getParameter(“par”) | first |
Perl(CGI)/Apache | Param(“par”) | first |
Python/Apache | Getvalue(“par”) | all(list) |
ASP/IIS | Request.QueryString(“par”) | all |