Bypass思路
1.从架构层绕过WAF
1.寻找源站
如果流量都没有经过WAF,WAF当然无法拦截攻击请求。当前多数云WAF架构,通过更改DNS解析,把流量引入WAF集群,流量经过检测后转发请求到源站。如图,aaa.com接入接入WAF后,aaa.com的DNS解析结果指向WAF集群,用户的请求将发送给WAF集群,WAF集群经过检测认为非攻击请求再转发给源站。
假设我们是攻击者,如何绕过WAF的安全检测呢? 从云WAF架构考虑,如果HTTP请求都没有经过WAF集群直接到达源站,顺理成章bypass WAF。所以关键在于发现源站的IP地址。常用方法如下:
1.信息泄露发现源站IP。信息泄露的途径很多,细心留意往往能发现。我常用的方法如下:
网站页面注销是否包含源站IP。
GIHUB源代码泄露是否包含源站IP。
未接入WAF前,真实IP地址是否被搜索引擎等服务收录。
2.穷举IP地址,根据特征发现服务器真实IP地址。对于国内的服务器,穷举国内的IP,访问每个IP的HTTP服务,根据页面特征检测响应页面,判断IP是否为源站IP地址。
1.2 利用同网段
一些在云服务商的站点,同时使用云服务商提供的WAF服务。当流量不是通过DNS解析引流到WAF,流量必须经过WAF的检测,这是不能通过发行源站进行绕过。绕过思路在云服务商买一台VPS,通过VPS攻击目标站点,因为流量是局域网,可能不经过WAF检测,实现绕过。能不能成看就服务商网络配置成功概率很低。
1.3 利用边界漏洞
如果未能发现源站IP,可以尝试寻找子站的SSRF漏洞。如果子站访问目标站不经过WAF集群,可以利用SSRF漏洞来绕过WAF。
2.从资源限角度bypass WAF
如果HTTP请求POST BODY太大,检测所有的内容,WAF集群消耗太大的CPU、内存资源。因此许多WAF只检测前面的几K字节、1M、或2M。对于攻击者而然,只需要在POST BODY前面添加许多无用数据,把攻击payload放在最后即可绕过WAF检测。
3.从协议层面bypass WAF。
即使流量都确保经过WAF,如果WAF的防御策略根本就没有检测payload,那么也就能绕过WAF。协议层面绕过WAF,利用WAF解析协议的问题,使得payload被认为不是请求的HTTP请求的内容。从个人经验总结出WAF解析协议的常出现问题的三个方向。
3.1 协议未覆盖绕过WAF
POST 请求常用有2种参数提交方式:
1.Content-Type: application/x-www-form-urlencoded;
2.Content-Type: multipart/form-data;
Waf未能覆盖Content-Type: multipart/form-data从而导致被绕过。或者WAF会认为它是文件上传请求,从而只检测文件上传,导致被绕过。如图,加速乐的WAF就存在被绕过的情况,