1 WAF简介
- 定义:WAF(Web Application Firewall, Web应用防火墙)是通过执行一系列针对 HTTP/HTTPS 的 安全策略来专门为 Web应用提供保护的一款产品。
- WAF分类:
- 软件型 WAF
以软件形式装在所保护的服务器上的WAF,由于安装在服务器上,所以可以接触到服务器上的文件,直接检测服务器上是否存在WebShell、是否有文件被创建等。 - 硬件型 WAF
以硬件形式部署在链路中,支持多种部署方式,当串联到链路中时可以拦截恶意流量,在旁路监昕模式时只记录攻击不进行拦截。 - 云 WAF
一般以反向代理的形式工作,通过配置NS记录或CNAME记录,使对网站的请求报文优先经过WAF主机,经过WAF主机过滤后,将认为无害的请求报文再发送给实际网站服务器进行请求,可以说是带防护功能的CDN。 - 网站系统内置的 WAF
网站系统内置的WAF也可以说是网站系统中内置的过滤,直接镶嵌在代码中,相对来说自由度高,一般有以下这几种情况。网站系统内置的WAF与业务更加契合,在对安全与业务都比较了解的情况下,可以更少地收到误报与漏报。
- 输入参数强制类型转换(intval等)。
- 输入参数合法性检测。
- 关键函数执行 (SQL执行、页面显示、命令执行等)前,对经过代码流程的输入进行检测 。
- 对输入的数据进行替换过滤后再继续执行代码流程(转义/替换掉特殊字符等)。
2 WAF存在性判断
2.1 SQLmap
- 使用SQLMap中自带的WAF识别模块可以识别出WAF的种类,但是如果所安装的WAF并没有什么特征,SQLMap就只能识别出类型是Generic 。
- 命令
sqlmap -u "URL" -identify-waf --batch 该命令已在最新版的SQLmap中剔除,可以直接使用sqlmap -u "URL" --batch ,执行过程如下。
┌──(root💀kali)-[~]
└─# sqlmap -u "www.baidu.com" --batch
___
__H__
___ ___[,]_____ ___ ___ {1.5.11#stable}
|_ -| . ["] | .'| . |
|___|_ ["]_|_|_|__,| _|
|_|V... |_| https://sqlmap.org
[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. It is the end user's responsibility to obey all applicable local, state and federal laws. Developers assume no liability and are not responsible for any misuse or damage caused by this program
[*] starting @ 12:18:06 /2022-03-21/
[12:18:06] [INFO] testing connection to the target URL
got a refresh intent (redirect like response common to login pages) to 'http://www.baidu.com/baidu.html?from=noscript'. Do you want to apply it from now on? [Y/n] Y
you have not declared cookie(s), while server wants to set its own ('BAIDUID=4FB3903318D...FBEBF92:FG=1;BIDUPSID=4FB3903318D...6B7DFB389B;H_PS_PSSID=35838_35106...6350_36100;PSTM=1647879486;BDSVRTM=0;BD_HOME=1'). Do you want to use those [Y/n] Y
[12:18:06] [INFO] checking if the target is protected by some kind of WAF/IPS
[12:18:08] [CRITICAL] heuristics detected that the target is protected by some kind of WAF/IPS
are you sure that you want to continue with further target testing? [Y/n] Y
[12:18:08] [WARNING] please consider usage of tamper scripts (option '--tamper')
[12:18:08] [INFO] testing if the target URL content is stable
[12:18:08] [WARNING] target URL content is not stable (i.e. content differs). sqlmap will base the page comparison on a sequence matcher. If no dynamic nor injectable parameters are detected, or in case of junk results, refer to user's manual paragraph 'Page comparison'
how do you want to proceed? [(C)ontinue/(s)tring/(r)egex/(q)uit] C
[12:18:08] [INFO] searching for dynamic content
[12:18:09] [INFO] dynamic content marked for removal (3 regions)
[12:18:09] [CRITICAL] target URL content appears to be heavily dynamic. sqlmap is going to retry the request(s)
[12:18:13] [WARNING] target URL content appears to be too dynamic. Switching to '--text-only'
[12:18:13] [CRITICAL] no parameter(s) found for testing in the provided data (e.g. GET parameter 'id' in 'www.site.com/index.php?id=1'). You are advised to rerun with '--forms --crawl=2'
[*] ending @ 12:18:13 /2022-03-21/
2.2 手工判断
- 这个也比较简单,直接在相应网站的URL后面加上最基础的测试语句,比如在访问的URL后加上参数
?aaa=1union select 1,2,3 ,由于该参数不是链接所需要的参数,不影响后台网页执行,如果执行出错,就表示触发了 WAF 的防护,即网站存在 WAF。 - 如果没有弹出出错提醒,并不能表明不存在WAF,可能只是允许通过而已。
3 WAF 绕过
- 从OSI模型来看,本节内容从不同层分享一些绕过思路。
- 物理层:直接连内网进行攻击?
- 数据链路层:好像没法吧?
- 网络层:有些网站对自己或内容的检测可能比较轻,如果能将请求的源就能绕过WAF。尝试修改 http 的 header:
(1)X-Forwarded-For (2)X-remote-IP (3)X-originating-IP (4)x-remote-addr (5)X-Real-ip - 传输层:好像没有什么思路。
- 应用层:像之前大小写混编、双写、编码等绕过思路。
4 总结
- 了解一下WAF的分类;
- 了解如何建议网站是否配置WAF;
- 了解WAF的绕过方式。
|