主要思路:

根据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中生成器的两段代码

    生产者-消费者经典单线程问题 import time def consumer(name):     print("%s 准备吃包子啦!" %name)     while Tru ...

  2. 基于FMC接口的Kintex-7 XC7K325T PCIeX4 3U PXIe接口卡

    一.板卡概述 本板卡基于Xilinx公司的FPGAXC7K325T-2FFG900 芯片,pin_to_pin兼容FPGAXC7K410T-2FFG900 ,支持PCIeX8.64bit DDR3容量 ...

  3. Dump Lsass内存转储新旧方法

      之前看到一篇关于Lsass内存dump的文章,学习记录一下.   lsass.exe(Local Security Authority Subsystem Service)进程空间中,存有着机器的 ...

  4. kubeasz 部署高可用 kubernetes 集群

    文章目录 环境准备 配置模板机 配置hosts解析 配置ssh 免密钥登陆 kubeasz 部署服务准备 配置主机清单 部署集群 环境准备 IP HOSTNAME SYSTEM 192.168.131 ...

  5. shell批量监控网站状态码

    shell批量监控网站状态码脚本,使用curl很慢.等我学完其他方式,在来更新. #!/bin/bash #GuoYabin yuming=`/bin/cat yuming.txt` for i in ...

  6. CobaltStrike逆向学习系列(4):Beacon 上线协议分析

    这是[信安成长计划]的第 4 篇文章 关注微信公众号[信安成长计划] 0x00 目录 0x01 Beacon 发送 0x02 TeamServer 处理 0x03 流程图 0x04 参考文章 在上一篇 ...

  7. 如何深入学习Java并发编程?

    在讲解深入学习Java并发编程的方法之前,先分析如下若干错误的观点和学习方法. 错误观点1:学习Java编程主要是学习多线程. 这话其实是说明了表面现象,多线程其实还真是并发编程的实现方式,但在实际高 ...

  8. windev中的内存机制及其与C语言中的内存指针相似性(一)

    windev中的内存机制,是初入windev世界必须要越过的一道高山,以下我的理解和经验未必都对,如有错误或遗漏,以后再纠正或补充!另外,以下内容,咱先谈应用,再说对机制的认识和理解. 一.新建表单, ...

  9. 【C#Task】TaskCreationOptions 枚举

    根据 TaskCreationOptions 的不同,出现了三个分支 LongRunning:独立线程,和线程池无关 包含 PreferFairness时:preferLocal=false,进入全局 ...

  10. Java:输入输出、格式化输出

    1.输出 都在System.out模块下,常用方法有: print:输出: println:输出并换行: printf:格式化输出: 2.格式化输出 格式化输出的方法是System.out.print ...