<复现>利用http请求走私绕过防火墙
- 投稿账户
- 1,499
作者:edword
0x00概述
本人小白一个本着对网络安全的好奇在默默努力着,最近在研究过waf的一些奇淫技巧,偶然一天收到星总推荐的一遍关于http请求走私的文章,让人眼前一亮,于是手痒并记录一下。
0x01原理
给服务器发送payload数据包,使得waf无法识别出payload,当apache,tomcat等web容器能正常解析其内容(嗯。。大概就是这样)
0x01实验环境
虚拟机win7+phpstydy+某狗4.0网站防火墙(高级)+sqli-labs-master.。为方便演示,存在sql注入的脚本中使用$_REQUEST["id"]来接收get,或者post提交的数据。这里采用sqli-labs-master.第二关整形注入。以下是修改的代码。


开启验证下,发现此时已经可以post数据。get也可以,安全狗正常工作。


首先正常抓包这里我用的burp抓取本次的post包。

使用分块传输协议只需在请求头部加入:Transfer-Encoding: chunked。就代表这个报文采用了分块编码。这时,post请求报文中的数据部分需要改为用一系列分块来传输。每个分块包含十六进制的长度值和数据,长度值独占一行,长度不包括它结尾的,也不包括分块数据结尾的网上说还要关闭自动更新长度,但是我在测试的时候发现不关也是可以的。为了更好的演示我关闭了,位置在红框标注的地方。(去掉打勾就可以了)

然后发包就可以了这里有个坑,在加入Transfer-Encoding: chunked之后一定要在id=1后面加入两个换行。一定要在id=1后面加入两个换行。一定要在id=1后面加入两个换行。重要的事情要说三遍。否则你会像我这样一直wating..

加入换行之后,就可以正常显示了。

加入字符长度,当字符长度为4的时候正常显示,于是修改字符长度为3发现报错(这里的4就是id=1的长度)报错是因为只读取到id=.


原理大概就是这。接下来就可以使用这个思路绕过狗狗了。直接使用 id =1 union select 1,2,user()会被拦截。

按照刚才的思路我们可以把注入语句分成几个模块写。这里我分为了6个模块结果获取到了用户名。

分块还有很多种姿势,本文只是记录从http走私以及记录其中一种利用方式而已,自己复现了一波,做了笔记,最后感谢各位师傅们的文章
文章评论