网站应用级入侵防御系统(Web Application Firewall,WAF),也称为Web防火墙,可以为Web服务器等提供针对常见漏洞(如DDOS攻击、SQL注入、XML注入、XSS等)的防护。在渗透测试工作中,经常遇到WAF的拦截,特别是在SQL注入、文件上传等测试中,为了验证WAF中的规则是否有效,可以尝试进行WAF绕过。本章将讨论注入和文件上传漏洞如何绕过WAF及WebShell的变形方式。
只有知道了WAF的“缺陷”,才能更好地修复漏洞和加固WAF。本章内容仅局限于在本地环境测试学习,切不可对未授权的站点进行测试。
在渗透测试评估项目的过程中,或者在学习Web安全知识时,总是会提到WAF。WAF到底是什么?有哪些作用和类型?如何识别WAF?
WAF是通过安全策略为Web应用提供安全防护的网络安全产品,主要针对HTTP和HTTPS协议。WAF处理用户请求的基本流程如图所示。浏览器发出请求后,请求数据被传递到WAF中,在安全策略的匹配下呈现两种结果:如果是正常请求,那么服务器会正常响应;如果有攻击请求,且WAF能检测出来,那么会弹出警告页面。
注意:WAF可以增加攻击者的攻击成本和攻击难度,但并不意味着使用它就100%安全,在一定条件下使用Payload可以完全绕过WAF的检测,或者有些WAF自身就存在安全风险。
1. 软件WAF
这种WAF是软件形式的,一般被安装到Web服务器中直接对其进行防护。以软件部署的WAF,能接触到服务器上的文件,直接检测服务器上是否有不安全的文件和操作等。目前市面上常见的软件WAF有安全狗、云盾、云锁等。
2. 硬件WAF
这种WAF以硬件的形式部署在网络链路中,支持多种部署方式,如串联部署、旁路部署等。串联部署的WAF在检测到恶意流程之后可以直接拦截;旁路部署的WAF只能记录攻击流程,无法直接进行拦截。目前常见的硬件WAF是各大厂商的产品,如绿盟WAF、天融信WAF、360WAF等。
3. 云WAF
前两种WAF已无法适配云端的业务系统,于是云WAF应运而生。这种WAF一般以反向代理的方式进行配置,通过配置NS记录或者CNAME记录,使相关的服务请求先被发送到云WAF。目前,常见的云WAF有安全宝、百度加速乐等。
4. 网站内置WAF
程序员将拦截防护的功能内嵌到网站中,可以直接对用户的请求进行过滤。这种方式在早期的站点防护中使用,虽说自由度较高,但是防护能力一般,升级迭代比较麻烦。
WAF的处理流程大致分为四个步骤:预处理、规则检测、处理模块和日志记录。
第一步:预处理。用户请求Web服务,该请求到达服务器后先进行身份认证,通过匹配白名单进行检测,判断是否归属白名单。如果归属,就直接把该请求发送到服务器;如果不归属,就先进行数据包解析。
第二步:规则检测。上述数据包完成解析后会被投放到规则系统进行匹配,判断是否有不符合规则的请求。如果符合规则,则该数据会被放行到服务器。
第三步:处理模块。如果不符合规则,则会进行拦截,并弹出警告页面。不同WAF的产品弹出的警告页面各不相同。
第四步:日志记录。WAF会将拦截处理等行为记录在日志中,便于对日志进行分析。
方法1:SQLMap判断
在探测SQL注入时,可以考虑使用SQLMap识别WAF。使用SQLMap中自带的WAF识别模块可以识别出WAF的种类。SQLMap检测命令如下:
sqlmap -u "http://xxx.com" --identify-waf --batch
识别出WAF的类型为XXX Web Application Firewall。如果安装的WAF没有“指纹”特征(比较隐蔽或者在SQLMap的指纹库中没有该特征信息),那么识别出的结果就是Generic,如图所示。
注意:详细的识别规则在SQLMap的waf目录下。也可以自己编写规则,编写完成后直接放在waf目录下即可。
方法2:WAFW00F识别
通过WAF指纹识别工具WAFW00F,识别Web站点的CMS或者Web容器,从而查找相关漏洞。首先,查看WAFW00F能够探测出哪些防火墙。安装和使用WAFW00F的基本命令如下:
git clone https://github.com/EnableSecurity/wafw00f
cd wafw00f
Python setup.py install
wafw00f -l #
该工具可检测出的WAF类型如图所示。
检测WAF的命令如下:
wafw00f https://www.example.org
检测结果也会在终端显示,如图所示。
方法3:手工判断
在相应网站的URL后面加上最基础的测试语句,如union select 1,2,3%23,并将其放在一个不存在的参数名中。被拦截的表现为页面无法访问、响应码不同、返回与正常请求网页时不同的结果等。不同的WAF,检测出恶意攻击之后的显示页面也不一样,如图所示。
union select 1,2,3%23 1'and 1=1
当提交一个正常的Payload时,WAF会识别出来,并及时阻止它访问Web容器。但当提交一个特殊的Payload时,有些防火墙可能并不会对这些特殊的Payload进行过滤,从而导致其可以正常访问Web容器,这就是可以绕过WAF的原因。那么,为什么构造出的Payload可以绕过WAF呢?主要有以下几种原因。
(1)出现安全和性能的冲突时,WAF会舍弃安全来保证功能和性能。
(2)不会使用和配置WAF,默认设置可能存在各种漏洞风险。
(3)WAF无法100%覆盖语言、中间件、数据库的特性。
(4)WAF本身存在漏洞。
— 实验室旗下直播培训课程 —
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...