方法分类:

1、HTTP参数污染绕过

2、HTTP Header头部欺骗绕过

3、HTTP参数溢出绕过

4、HTTP分块传输绕过

5、HTTP数据编码绕过

6、HTTP Pipline绕过(Keep-alive)

7、HTTP协议未覆盖绕过

8、HTTP畸形包绕过

9、HTTP组合绕过

0x01 HTTP参数污染绕过

HTTP参数污染简称HPP

由于http协议允许同名参数的存在,同时waf的处理机制对同名参数的处理方式不同,造成“参数污染”。

假设一个url的原有参数为?id=1

那么提交的参数为:?id=1&id=2&id=3

不同的服务器搭配解析出不同的值

asp.net+iis:id=,,
asp+iis:id=,,
php+apache:id=

那么如果waf检测的是url里面的第一个id值,那么在php+apache中是不是可以让第一个id值等于符合条件不触碰waf的字符,第三个id写我们自己的恶意代码,即可绕过执行。

0x02HTTP Header头部欺骗绕过

可以修改头部的各个参数,比如说:

waf可能会根据头部某个参数的值来进行是否拦截,有可能不是那个值就会拦截。

在一个请求包中我们可以加入一个缓存字段控制指令:Cache-control:no-transform

比如这样的结构,如果某个服务器站点,它与客户端通信的中间加了代理服务器,如果waf在代理服务器里面,那么客户端请求包中加入缓存字段控制指令就可以直接向源服务器请求。

0x03HTTP参数溢出绕过

有些waf要检测多个参数,比如说能检测100个请求参数,像之前的参数污染就没法绕过了,但是我们把该参数增加到101个,都是同名,那么第101个参数就可绕过waf了;

这是由于waf根本没有考虑参数溢出的情况,构造超过限制的参数即可绕过安全防护。

基于OpenResty构造的WAF:ngx_lua_waf、X-WAF、Openstar等,均受参数溢出的影响(CVE-2018-9230)

0x04HTTP分块传输绕过

分块传输即分块传输编码,把报文分割成若干个大小已知的块进行传输

长度标识处加上分号‘;’作为注释变形请求包加强绕过能力。

0x05HTTP数据编码绕过

编码绕过在绕waf中也是经常遇到的,通常waf只坚持他所识别的编码,比如说它只识别utf-8的字符,但是服务器可以识别比utf-8更多的编码。

那么我们只需要将payload按照waf识别不了但是服务器可以解析识别的编码格式即可绕过。

比如请求包中我们可以更改Content-Type中的charse的参数值,我们改为ibm037这个协议编码,有些服务器是支持的。payload改成这个协议格式就行了。

0x06HTTP Pipline绕过(keep-alive)

HTTP管道化允许多个http请求通过一个套接字同时被输出,而不用等待相应的响应。然后请求者就会等待各自的响应,这些响应是按照之前请求的顺序依次到达。因为多个请求可被同时传送,如果waf只检测第一个请求,而忽略后面的请求,便可被攻击者绕过。

我们把请求头中的Connection的参数值更改为keep-alive,然后向服务器同时发这样的三个请求过去,waf可能只检测第一个请求,后面请求就不检测了。那么我们将恶意代码放在后面两个请求中,即可达到绕过waf的目的。

0x07HTTP协议未覆盖绕过

HTTP头中Content-Type字段一般可以设置比较常见的四种参数提交方式:

1、application/x-www-form-urlencoded (默认编码方式)

2、multipart/form-data  (文件上传方式指定传输数据为二进制数据,例如图片、视频、文件)

3、text/plain  (纯文本的传输;空格转换为“+”,但不支持特殊字符编码。)

4、application/json  (json报文格式传输)

就比如waf只检测普通的get和post,但是我们将请求包改为了上传(就是改content-type),那么即可绕过waf。

0x08HTTP畸形包绕过

当前的HTTP服务依据的是RFC2616标准(通常有以下8种方法:GET、POST、PUT、OPTION、HEAD、DELETE、TRACE、CONNECT)的HTTP请求,但是当我们向web服务器发送畸形请求时,也就是并非这个标准的HTTP数据包的时候,由于web服务器的一些兼容性的特性,会尽力解析这些畸形的数据包。

正常的含有恶意代码的数据包,比如说插入有sql语句的包:

那么正常的post包waf将会检测到恶意代码,就会拦截。

那么我们将请求方法改为一个不存在的http请求方法,构造成畸形包

那么waf可能说这不是post包,就不会拦截,况且这还不是其他方法的包,服务器会尽力去解这个包,可以解析那么运气好,可以绕过超过,不能解析那么再更改一些请求头中的参数;

例如:

head头的conten-type:TAB
Host添加空格
Host域名后面添加“.”
Cookie中垃圾数据填充
filename在content-type下面
Content-Type:multipart/form-data ;boundart=
大小写:Content-Type:mUltiPart/ForM-dATa; boundart=
Content-Type:multipart/form-dataX;boundart=
Content-Type:multipart/form-data,boundart=
Content-Type:multipart/form-data boundart=
Content-Type:multipart/whatever;boundart=
Content-Type:multipart/;boundart=
等...

这些也可以造成http请求包畸形。

0x09HTTP组合绕过

对于一些严格的waf需要配合更多绕过方法来搭配使用绕过:

1.HTTP参数溢出绕过+HTTP协议未覆盖绕过

2.HTTP分块传输绕过+HTTP数据编码绕过

3.HTTP分块传输绕过+HTTP协议未覆盖绕过

4.HTTP协议未覆盖绕过+HTTP畸形包绕过+HTTP数据编码绕过

5.HTTP畸形包+HTTP协议未覆盖绕过

等等还有更多的姿势

WAF的基础绕过的更多相关文章

  1. 应用安全 - 安全设备 - WAF原理/检测/绕过

    原理 基于Cookie值 Citrix Netscaler(2013年使用广泛) “Citrix Netscaler”会在HTTP返回头部Cookie位置加入“ns_af”的值,可以以此判断为Citr ...

  2. [9期]软WAF上传绕过+webshell免杀

    安全狗上传绕过 思路: 1.扰乱编码 form-data 替换成 ~form-data           form-data    改成 f+orm-data form-data    改成 for ...

  3. 渗透测试学习 二十八、WAF绕过详解

    大纲: WAF防护原理讲解 目录扫描绕过WAF 手工注入绕过WAF sqlmap绕过WAF 编写salmap绕过WAF 过WAF一句话编写讲解 菜刀连接绕过WAF webshell上传绕过WAF 提权 ...

  4. [11期]绕过安全狗、云锁等各大WAF注入,上传深入自动化Bypass攻击

    CDN       负载均衡.内容分发 解析漏洞一般在服务层      二进制,溢出,提权在系统层         渗透测试就是以上全部层 协议未正确解析 GET改POST   这叫参数污染 cook ...

  5. 绕WAF文章收集

    在看了bypassword的<在HTTP协议层面绕过WAF>之后,想起了之前做过的一些研究,所以写个简单的短文来补充一下文章里“分块传输”部分没提到的两个技巧. 技巧1 使用注释扰乱分块数 ...

  6. WAF攻防研究之四个层次Bypass WAF

    从架构.资源.协议和规则4个层次研究绕过WAF的技术,助于全方位提升WAF防御能力. 绕过WAF的相关技术研究是WAF攻防研究非常重要的一部分,也是最有趣的部分,所以我在写WAF攻防时先写攻击部分.还 ...

  7. 过waf实战之文件上传bypass总结

    这里总结下关于waf中那些绕过文件上传的姿势和尝试思路 环境 apache + mysql +php waf:某狗waf 这里写了一个上传页面 <html> <body> &l ...

  8. sql注入100种姿势过waf(一):waf 了解

    仅供学习交流如果你有更好的思路可以一起分享,想一起学习的进我主页 首先WAF(Web Application Firewall),俗称Web应用防火墙,主要的目的实际上是用来过滤不正常或者恶意请求包, ...

  9. 绕WAF常见思路整理(一)

    最*被*台的一些事情搞得心态有点崩,很久没写文了 *期想整理一下常见的各种操作中绕过WAF的思路与免杀的思路(这部分之前没整理完以后有机会再说),受限于个人水*因素所以一定是不完全的,而且在WAF日新 ...

随机推荐

  1. Mondriaan's Dream 轮廓线DP 状压

    Mondriaan's Dream 题目链接 Problem Description Squares and rectangles fascinated the famous Dutch painte ...

  2. STVP编译时遇到no default placement for segment .FLASH_CODE

    最近编译STM8S003时需要使用flash库函数,看起来简单,实则折腾了超过1天.今天总结方法如下: 1.修改stm8s.h 156行  #define RAM_EXECUTION  注释去掉  如 ...

  3. springboot2.x整合spring-data-jpa的问题

    今天使用springboot整合spring-data-jpa遇到一些问题,直接使用JpaRepository的getOne()方法是会报错的.报错信息为:org.hibernate.LazyInit ...

  4. CSS学习 | 思维导图

    CSS样式

  5. 基于Arduino开发的简易“高水位报警系统解决方案”

    长期以来,针对“某些办公室空调没有排水系统,只能用水桶接水,经常造成水漫金山的问题”而提出来的. 材料:Arduino开发板一块.水位传感器一个.高电平蜂鸣器一个.杜邦线若干. 原理:将水位传感器置于 ...

  6. pycharm中的快捷键

    不断更新...... 1.整行向右缩进 方法:选中要向右缩进的代码,点击一次[Tab]键,向右进行一个缩进,点击2次就缩进2个[Tab]键 2.整行向左退[缩进] 方法:选中要退缩进的代码,同时点击[ ...

  7. Java.work7 访问权限、对象使用作业20194651

    题目1: 在作业5的基础上,再创建一个柱体类,包含矩形对象.高和体积等三个成员变量,一个构造方法进行成员变量初始化,和计算体积.换底两个功能方法,在主类中输入长.宽.高,计算柱体体积,输入新的长.宽. ...

  8. 目标检测之RCNN,fast RCNN,faster RCNN

    RCNN: 候选区生成(Selective Search). 分割成2000左右的候选小区域 合并规则:颜色.纹理相近,尺度均匀,合并后形状规则 特征提取. 归一候选区尺寸为227×227,归一方法. ...

  9. Codeforces_812

    A. 每条人行道有六条车道会撞到. #include<bits/stdc++.h> using namespace std; ],b[],c[],d[]; int main() { ios ...

  10. MySQL学习笔记——基础与进阶篇

    目录 一.###MySQL登录和退出 二.###MySQL常用命令 三.###MySQL语法规范 四.###基础查询 五.###条件查询 六.###排序查询 七.###常见函数的学习 八.###分组查 ...