Analytical HTTP Header Differences To Bypass WAF
概述
谈一谈,因WAF解析HTTP差异导致的完全bypass。利用及方法很简单,主要还是绕过思路。
原理及利用
先看一下两个HTTP请求头:
Part 1:
POST /vul.php HTTP/1.1Host: 127.0.0.1User-Agent: Mozilla/5.0Accept: text/htmlAccept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3Accept-Encoding: gzip, deflateConnection: keep-aliveContent-Length: 14id=1
Part 2:
POST /vul.php HTTP/1.1Host: 127.0.0.1User-Agent: Mozilla/5.0Accept: text/htmlAccept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3Accept-Encoding: gzip, deflateConnection: keep-aliveContent-Type: multipart/form-data; boundary=---------------------------21447299041608751107747247Content-Length: 221-----------------------------21447299041608751107747247Content-Disposition: form-data; name="id"1-----------------------------21447299041608751107747247--
Part 1为一般情况下提交POST内容的方式, Part 2其实是一个文件上传的请求头部截取了参数传递部分,PHP中会将Part 2当做Part 1来处理。而WAF不清楚,未对Part 2里参数/值进行解析,并用规则匹配。所以绕过就产生了。
演示如下:
返回403,被WAF阻断了。
OK。成功绕过