前言
此文章仅做学习记录使用,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,本人不为此承担任何责任。
常规绕waf的方式
大小写、转义、编码、注释等。
0x00 HTTP流水线(HTTP Pipelining)绕过
HTTP Pipelining解释:是将多个HTTP请求(request)整批提交的技术,而在发送过程中不需先等待服务器的回应。
由于HTTP流水线允许多个请求在一个套接字中被同时传送,往往一些waf只检测第一个请求,那么之后的请求中如果带有攻击参数,则不会被检测出,从而成功绕过。但是在Burpsuite中使用时,需在repeater中关闭update content-length,并将数据包中的connection
字段改为keep-alive。
0x01 HTTP分块传输绕过
HTTP分块传输可以将数据分块,然后进行传输。因此在transfer-encoding
字段中,将值改为chunked,则传输数据则会被分为一些列块。格式为:长度-回车-字符,并以0结尾加两次回车关闭。由于部分waf已经能成功识别此种方式,可通过在长度后面加";",并添加一些随机注释内容达到一个混淆的效果。
0x02 协议未覆盖绕过
HTTP头中content-type
字段一般可以设置三种参数提交形方式:application/x-www-form-urlencoded
,multipart/form-data
,text/plain
。当waf未能覆盖multipart/form-data
提交方式时,或者waf认为其为文件上传请求,从而只检测文件上传,导致waf被绕过。
0x03 利用Content-type编码绕过
在Content-Type
中可以使用charset
定义字符集,如果基于规则引擎的waf未对相应字符集进行处理,则可以被绕过。
0x04 HTTP头部问题
构造一个数据包:第一行的HOST为空,但在第二行加上HOST的值,发现可以正常发送,部分waf为了效率,对这样错误的包就直接不检测,从而达到绕过目的。