WAF绕过的各种姿势
主要思路:
根据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绕过的各种姿势的更多相关文章
- 各种WAF绕过手法学习
原文:https://mp.weixin.qq.com/s/aeRi1lRnKcs_N2JLcZZ0Gg 0X00 Fuzz/爆破 fuzz字典 1.Seclists/Fuzzing https ...
- 数据库语法整理及WAF绕过方式
关系型数据库 关系型数据库:指采用了关系模型来组织数据的数据库. 直白的说就是:关系型数据库最典型的数据结构是表,由二维表及其之间的联系所组成的一个数据组织 当今主流的关系型数据库有:Oracle,M ...
- 从偶然的机会发现一个mysql特性到wooyun waf绕过题
从偶然的机会发现一个mysql特性到wooyun waf绕过题 MayIKissYou | 2015-06-19 12:00 最近在测试的时候,偶然的机会发现了一个mysql的特性, 为啥是偶然的机会 ...
- WAF绕过神器 (过安全狗、智创SQL注入)
WAF绕过神器 (过安全狗.智创SQL注入) 发布时间:-- :10文章来源:网络文章作者:panni007 点击次数: 次 分享到: QQ空间 QQ微博 新浪微博 开心网 人人网 摘要:起因: by ...
- 绕WAF&安全狗新姿势
俗话说只要思路宽,绕狗绕的欢.前段时间我有尝试着用以下的方法绕狗,效果还不错.不过这方法呢也许这段时间可以绕过,过段时间可能就失效了,大家还是要多去尝试找到更多的方法. 举例-->整型注入 绕过 ...
- 16. 再说 WAF 绕过
1,大小写混排 这可以算最容易想到的方式了.大小写绕过用于只针对小写或大写的关键字匹配技术,正则表达式 /express/i 大小写不敏感即无法绕过,这是最简单的绕过技术. 举例: z.com/ind ...
- 基于HTTP协议的WAF绕过
一,畸形包绕过 1.先关闭burpsuite长度更新,为get请求,先使用bp的method转换为POST请求 2.get请求中空格使用%20代替,Connection改为keep-alive 二,分 ...
- 渗透测试学习 二十八、WAF绕过详解
大纲: WAF防护原理讲解 目录扫描绕过WAF 手工注入绕过WAF sqlmap绕过WAF 编写salmap绕过WAF 过WAF一句话编写讲解 菜刀连接绕过WAF webshell上传绕过WAF 提权 ...
- sql注入之堆叠注入及waf绕过注入
#堆叠查询注入 1.堆叠查询概念 stacked injections(堆叠查询注入)从名词的含义就可以看出一应该是一堆(多条)sql语句一起执行.而在真实运用中也是如此,我们知道在mysql中,主要 ...
随机推荐
- python基础语法_字符串编码
Python常用字符编码 http://www.cnblogs.com/schut/p/8406897.html Python常见字符编码间的转换 在字符串写入文件时,有时会因编码问题导致无法 ...
- 《PHP程序员面试笔试宝典》——如何应对面试官的“激将法”语言?
如何巧妙地回答面试官的问题? 本文摘自<PHP程序员面试笔试宝典> "激将法"是面试官用以淘汰求职者的一种惯用方法,它是指面试官采用怀疑.尖锐或咄咄逼人的交流方式来对求 ...
- C#随机打乱列表List元素顺序
C#随机打乱列表List项目顺序 以下泛型扩展方法,实现了随机打乱泛型列表List<T>的功能 public static List<t> DisorderItems<t ...
- 使用IWebBrowser2操控浏览器页面测试(IE)
测试一下在IE浏览器界面中插入代码测试,采用寻找窗口的方式获取Internet Explorer_Server句柄. 写的时候参考了很多网上的资料,有些地方不大适用就稍微修改了一下. Send ...
- 利用shell脚本[带注释的]部署单节点多实例es集群(docker版)
文章目录 目录结构 install_docker_es.sh elasticsearch.yml.template 没事写写shell[我自己都不信,如果不是因为工作需要,我才不要写shell],努力 ...
- 面试官灵魂三问:什么是SOA?什么是微服务?SOA和微服务有什么区别?
SOA SOA(Service-Oriented Architecture,面向服务的架构)是一种高层级的架构设计理念,可通过在网络上使用基于通用通信语言的服务接口,让软件组件可重复使用. 那么什么是 ...
- 简述LSM-Tree
LSM-Tree 1. 什么是LSM-Tree LSM-Tree 即 Log Structrued Merge Tree,这是一种分层有序,硬盘友好的数据结构.核心思想是利用磁盘顺序写性能远高于随机写 ...
- Oracle表的约束
表的约束定义:表的约束是 ORACLE 数据库中应用在表数据上的一系列强制性规则 按照约束用途分类: PRIMARY KEY:主键约束 FOREIGN KEY:外键约束 CHECK:检查约束 UNIQ ...
- 通过xmanager连接linux远程主机桌面
转至:https://blog.csdn.net/kadwf123/article/details/79564293 1.效果图: 远程linux桌面版主机,此处是虚拟机: 使用xmanager xb ...
- windows下cuda、cudnn以及pytorch的安装
一.在anaconda下配置cuda.cudnn以及pytorch环境 1.打开Anaconda Prompt,输入 conda create -n pytorch python=3.8 ...