主要思路:

根据WAF部署位置,针对WAF、WEB服务器、WEB应用对协议解析、字符解析、文件名解析、编码解析以及SQL语法解析的差异,绕过WAF,将payload送至服务器执行。

常用绕过方法:

1.转换特征字符大小写
2.利用注释绕过
3.编码特征字符绕过
4.分隔重写特征字符绕过
5.利用截断字符绕过
6.变换变量位置绕过
7.针对域名保护的绕过
8.超大数据包绕过
9.转换数据提交方式绕过
10.HPP(HTTP参数污染)绕过
1、利用性能因素绕过。

WAF在设计的时候都会考虑到性能问题,检测数据包的包长或检测数据流长度,有一个限制。因此在设计WAF的时候可能就有一个默认值,默认多少个字节的流大小,或是多少个数据包。

可以向HTTPPOST添加填充数据,达到一定数目之后,POST中的sql注入恶意代码没有被检测了,达到了bypass的目的。

WAF的业务影响问题,一些传统硬件防护设备为了避免在高负载的时候影响用户体验,如延时等问题,会在高负载的时候关掉WAF防护功能,在低负载的时候又开启WAF功能。

此方法,主要针对软waf。可将一个payload,使用脚本并发发送多次,发现有些通过了WAF,有些被WAF拦截了。

2、字符解析问题。

一些WAF会由于某些字符解析出错,造成全局的bypass。

测试点:

1):get请求处
2):header请求处
3):post urlencode内容处
4):post form-data内容处

测试内容:

1)编码过的0-255字符
2)进行编码的0-255字符
3)utf gbk字符
\×00,&,&&,宽字符。

3、白名单绕过

基于IP地址的白名单,一般很难绕过。

基于应用层的数据的白名单,就可能造成bypass。

特殊目录白名单的绕过。

有些WAF,将admin dede install等特殊目录作为白名单。

被拦截:

GET/pen/news.php?id=1 union select user,password from mysql.user

通过:

GET/pen/news.php/admin?id=1 union select user,password from mysql.user
GET/pen/admin/.\news.php?id=1 union select user,password from mysql.user
4. WEB服务层绕过

(1)利用WAF系统、WEB服务器、WEB应用以及数据库对字符解析的不一致,进行绕过。

%的问题:

s%elect,WAF层可能的解析结果s%elect;iis+asp解析结果select。
对unicode编码的识别:
s%u0065%u006cect,WAF无法识别,asp+iis的环境识别为select;aspx+is的环境识别出错。

(2) 构建畸形HTTP请求方法进行绕过。

某些apache版本在做GET请求的时候,无论method为何值均会取出GET的内容,如请求为的method为DOTA2,
依然返回了aid为2的结果。



(3)构建畸形的boundary进行绕过。

协议头里有个boundary是随机生成的字符串,用来分隔文本的开始和结束。
对于php+apache组合:Php在解析multipart data的时候,对于boundary的识别,只取了逗号前面的内容,
而WAF可能能够识别整个boundary。例如boundary设为----ccccccc,select*from db,php解析的时候只
识别了----ccccccc,后面的内容被作为内容部分。此时可能就会出现BYPASS。
5.WEB应用层绕过

(1)变换请求方式

某个参数可以从get参数中获取,可以从post参数获取,也可以从cookie参数中获取。而WAF没有完全过滤这些请求方式。
有些waf过滤的时候过滤了get和post,但是cookie方式没有过滤。因此,可直接更改cookie参数提交payload,即绕过。

(2)urlencode与form-data

POST在提交数据的时候有两种方式,第一种方式是使用urlencode的方式提交,第二种方式是使用form-data的方式提交。
有些waf过滤的时候过滤了urlencode,但是form-data方式没有过滤。因此,可利用form-data方式绕过。







(3)畸形请求方式

asp/asp.net request解析问题。
在asp和asp.net中获取用户提交参数一般使用request包,如使用request[' ']来获取,可能会出现问题。 当使用request [ ]的形式获取数据的时候,会出现GET,POST分不清的情况。可以构造一个请求包,
METHOD为GET,但是还带有POST的内容和POST的content-type。



(4)HTTP参数污染(HPP)

?id=1&id=2&id=3的形式,在获取id值的时候不同的web技术获取的值是不一样的。
假设提交的参数即为:id=1&id=2&id=3
解析结果:
Asp.net+iis: id=1,2,3
Asp+iis: id=1,2,3
Php+apache: id=3
构造:index.php?a=1&a=select 1 union select2

(5)multipart协议解析错误导致文件名覆盖

在multipart协议中,一个文件上传块存在多个Content-Disposition,
将以最后一个Content-Disposition的filename值作为上传的文件名。
许多WAF解析到第一个Content-Disposition就认为协议解析完毕,获得上传的文件名,从而导致被绕过。

6.DB层绕过

数据库层bypass实质是在bypass WAF的sql注入防护规则。针对数据库特性构造sql注入语句绕过。
一般绕过了select from就基本可以sql注入获取数据了。 SQL注入的检查,主要是指参数和union之间、union和select之间,select与from之间,from和后面
的参数之间等几个关键位置进行。

(1)\Nunion的形式

select * from corp where corp_id=\Nunion (select 1,(select schema_name from information_schema.schemata limit 1));

(2)浮点数形式

select * from corp where corp_id=1.1union  (select 1,(select schema_name from information_schema.schemata limit 1));

(3)8e0的形式:

select * from corp where corp_id=8e0union  (select 1,(select schema_name from information_schema.schemata limit 1));

(4)利用/!50000/的形式

select * from corp where corp_id=-3/*!50000union*/(select 1,(select schema_name from information_schema.schemata limit 1));

(5)空格替换:

%09,%0a,%0b,%0c,%0d,%a0,/**/,/*somewords*/,().

7、其他变形

(1),-1,+1,~1,@8""",0,\N等
select * from corp where corp_id=8e0union  (select -1,(select schema_name from information_schema.schemata limit 1));
select * from corp where corp_id=8e0union  (select@'id',(select schema_name from information_schema.schemata limit 1));

WAF绕过的各种姿势的更多相关文章

  1. 各种WAF绕过手法学习

    原文:https://mp.weixin.qq.com/s/aeRi1lRnKcs_N2JLcZZ0Gg 0X00    Fuzz/爆破 fuzz字典 1.Seclists/Fuzzing https ...

  2. 数据库语法整理及WAF绕过方式

    关系型数据库 关系型数据库:指采用了关系模型来组织数据的数据库. 直白的说就是:关系型数据库最典型的数据结构是表,由二维表及其之间的联系所组成的一个数据组织 当今主流的关系型数据库有:Oracle,M ...

  3. 从偶然的机会发现一个mysql特性到wooyun waf绕过题

    从偶然的机会发现一个mysql特性到wooyun waf绕过题 MayIKissYou | 2015-06-19 12:00 最近在测试的时候,偶然的机会发现了一个mysql的特性, 为啥是偶然的机会 ...

  4. WAF绕过神器 (过安全狗、智创SQL注入)

    WAF绕过神器 (过安全狗.智创SQL注入) 发布时间:-- :10文章来源:网络文章作者:panni007 点击次数: 次 分享到: QQ空间 QQ微博 新浪微博 开心网 人人网 摘要:起因: by ...

  5. 绕WAF&安全狗新姿势

    俗话说只要思路宽,绕狗绕的欢.前段时间我有尝试着用以下的方法绕狗,效果还不错.不过这方法呢也许这段时间可以绕过,过段时间可能就失效了,大家还是要多去尝试找到更多的方法. 举例-->整型注入 绕过 ...

  6. 16. 再说 WAF 绕过

    1,大小写混排 这可以算最容易想到的方式了.大小写绕过用于只针对小写或大写的关键字匹配技术,正则表达式 /express/i 大小写不敏感即无法绕过,这是最简单的绕过技术. 举例: z.com/ind ...

  7. 基于HTTP协议的WAF绕过

    一,畸形包绕过 1.先关闭burpsuite长度更新,为get请求,先使用bp的method转换为POST请求 2.get请求中空格使用%20代替,Connection改为keep-alive 二,分 ...

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

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

  9. sql注入之堆叠注入及waf绕过注入

    #堆叠查询注入 1.堆叠查询概念 stacked injections(堆叠查询注入)从名词的含义就可以看出一应该是一堆(多条)sql语句一起执行.而在真实运用中也是如此,我们知道在mysql中,主要 ...

随机推荐

  1. python基础语法_字符串编码

    Python常用字符编码 http://www.cnblogs.com/schut/p/8406897.html   Python常见字符编码间的转换   在字符串写入文件时,有时会因编码问题导致无法 ...

  2. 《PHP程序员面试笔试宝典》——如何应对面试官的“激将法”语言?

    如何巧妙地回答面试官的问题? 本文摘自<PHP程序员面试笔试宝典> "激将法"是面试官用以淘汰求职者的一种惯用方法,它是指面试官采用怀疑.尖锐或咄咄逼人的交流方式来对求 ...

  3. C#随机打乱列表List元素顺序

    C#随机打乱列表List项目顺序 以下泛型扩展方法,实现了随机打乱泛型列表List<T>的功能 public static List<t> DisorderItems<t ...

  4. 使用IWebBrowser2操控浏览器页面测试(IE)

      测试一下在IE浏览器界面中插入代码测试,采用寻找窗口的方式获取Internet Explorer_Server句柄.   写的时候参考了很多网上的资料,有些地方不大适用就稍微修改了一下. Send ...

  5. 利用shell脚本[带注释的]部署单节点多实例es集群(docker版)

    文章目录 目录结构 install_docker_es.sh elasticsearch.yml.template 没事写写shell[我自己都不信,如果不是因为工作需要,我才不要写shell],努力 ...

  6. 面试官灵魂三问:什么是SOA?什么是微服务?SOA和微服务有什么区别?

    SOA SOA(Service-Oriented Architecture,面向服务的架构)是一种高层级的架构设计理念,可通过在网络上使用基于通用通信语言的服务接口,让软件组件可重复使用. 那么什么是 ...

  7. 简述LSM-Tree

    LSM-Tree 1. 什么是LSM-Tree LSM-Tree 即 Log Structrued Merge Tree,这是一种分层有序,硬盘友好的数据结构.核心思想是利用磁盘顺序写性能远高于随机写 ...

  8. Oracle表的约束

    表的约束定义:表的约束是 ORACLE 数据库中应用在表数据上的一系列强制性规则 按照约束用途分类: PRIMARY KEY:主键约束 FOREIGN KEY:外键约束 CHECK:检查约束 UNIQ ...

  9. 通过xmanager连接linux远程主机桌面

    转至:https://blog.csdn.net/kadwf123/article/details/79564293 1.效果图: 远程linux桌面版主机,此处是虚拟机: 使用xmanager xb ...

  10. windows下cuda、cudnn以及pytorch的安装

    一.在anaconda下配置cuda.cudnn以及pytorch环境 1.打开Anaconda Prompt,输入 conda create -n pytorch python=3.8        ...