渗透测试中的bypass技巧( 二 )


 
假设服务器只拦截
 
GET/POST
 
请求,那么根据Apache服务器的特性,发送其他请求只要脚本接收的是GET参数,那么也是可以传递参数值的 。
 
如图:
 

渗透测试中的bypass技巧

文章插图
 
 
此知识点需要先知道各个Web服务器环境的特性,然后再针对特性去做测试 。
 
0x02 GET与POST的区别# 
Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE 。URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查,改,增,删4个操作 。到这里,大家应该有个大概的了解了,GET一般用于获取/查询资源信息,而POST一般用于更新资源信息 。
 
在网上已经有很多朋友写过了其问题的答案,但是对于WAF,我们就要转变角度去看了,第一点就是要看数据包的区别 。
 
POST /sql/search.php HTTP/1.1Host: 192.168.1.102User-Agent: Mozilla/5.0 (windows NT 10.0; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0Accept: text/html,Application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3Accept-Encoding: gzip, deflateReferer: http://192.168.1.102/sql/search.phpCookie: yunsuo_session_verify=a89786c1a180124a6820b6387b85b693Connection: keep-aliveUpgrade-Insecure-Requests: 1Content-Type: application/x-www-form-urlencodedContent-Length: 10keywords=t 
POST /sql/search.php HTTP/1.1Host: 192.168.1.102User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3Accept-Encoding: gzip, deflateReferer: http://192.168.1.102/sql/search.phpCookie: yunsuo_session_verify=a89786c1a180124a6820b6387b85b693Connection: keep-aliveUpgrade-Insecure-Requests: 1Content-Type: application/x-www-form-urlencodedContent-Length: 10keywords=t 
可见在请求的数据包中,POST比GET多了一个
 
Content-Type: application/x-www-form-urlencoded
 
这个是将提交数据变成url编码来传递给服务器,那么如此说来,也有的WAF会解析这行
 
Content-Type
 
去识别是否是POST注入,因为要防止方法污染 。
 
如图:
 
渗透测试中的bypass技巧

文章插图
 
 
这样也可以有几率扰乱WAF的判断 。
 
0x03 文件上传# 
关于文件上传我们来分享几点,用于延伸下方HPP这一点 。
 
先看一个上传数据包 。
 
POST /upload.php HTTP/1.1Host: 192.168.1.100User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3Accept-Encoding: gzip, deflateReferer: http://192.168.1.100/Cookie:yunsuo_session_verify=1a9c7117538a7a9bce39a4695ff3f0cc; safedog-flow-item=X-Forwarded-For: 1.1.1.1CLIENT_IP: 2.2.2.2Connection: keep-aliveUpgrade-Insecure-Requests: 1Content-Type:multipart/form-data; boundary=---------------------------440470572354Content-Length: 1089-----------------------------440470572354Content-Disposition: form-data; name="file"; filename="n.php"Content-Type: application/octet-stream<?phpphpinfo();?>-----------------------------440470572354Content-Disposition: form-data; name="submit"Submit-----------------------------440470572354-- 
Content-Type:multipart/form-data;
 
指代的是这个数据是来自表单提交的
 
某些WAF是通过Content-Type识别是否是文件上传数据包 。假设我们将Content-Type更改,数据包也是正常提交过去的 。这个就完成了一次bypass 。
 
还有的时候就是
 
Content-Disposition: form-data;
 
,也有某些WAF是根据Content-Disposition匹配
 
filename
 

 
(Safe Dog 3.5/4.0通杀)
 
,用于验证黑名单 。我们经过混淆大小写也是可以bypass的 。


推荐阅读