# 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
2
3
4
5
x-forwarded-for
x-remote-IP
x-originating-IP
x-remote-addr
x-Real-ip

# 静态资源

特定的静态资源后缀请求,常见的静态文件 (.js .jpg .swf .css 等等),类似白名单机制,waf 为了检测效率,不去检测这样一些静态文件名后缀的请求。

1
2
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 构造姿势:

1
2
3
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

部分 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

# 数据库特性