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中,主要 ...
随机推荐
- 4、Linux基础--系统目录
笔记 1.晨考 1.移动文件的命令 mv 2.删除文件的命令及其参数 rm 参数: -r : 递归删除 -f : 不提示删除 -i : 提示删除 3.复制文件的命令及其参数 cp 参数: -r : 递 ...
- kaptcha验证码参数设置
Constant 描述 默认值 kaptcha.border 图片边框,合法值:yes , no yes kaptcha.border.color 边框颜色,合法值: r,g,b (and optio ...
- 企业必读:BI数据可视化工具选型
伴随着大数据时代的到来,企业对数据的需求从"IT主导的报表模式"转向"业务主导的自助分析模式",可视化BI工具也随之应运而生.面对如此众多的可视化BI工具,我们 ...
- Zabbix 5.0:服务端进程总结
Blog:博客园 个人 参考:<深入理解Zabbix监控系统>.<Zabbix用户手册> Zabbix服务端进程被分为不同的种类,每一种进程负责相应的任务,包括收集原始监控数据 ...
- 【计算机基础】IL代码-CLR平台上的字节码【什么是字节码?它与虚拟机的关系?】
字节码(英语:Bytecode)将虚拟机可以读懂的代码称之为字节码.将源码编译成虚拟机读的懂的代码,需要虚拟机转译后才能成为机器代码的中间代码 叫做字节码. 字节码主要为了实现特定软件运行和软件环境. ...
- C# Event 内核构造 |EventWaitHandle、AutoResetEvent、 ManualResetEvent
EventWaitHandle 继承:Object->WaitHandle-> EventWaitHandle派生:System.Threading.AutoResetEvent\Syst ...
- Git学习笔记(详细)、idea集成
目录 概述 安装 常用命令 总结 idea使用git idea使用github Gitee GitLab Git使用git rebase 修改提交历史中的作者及邮箱信息 概述 官网:https://g ...
- 按照TomCat版本重新配置web.xml文件
在TomCat的目录:C:\Program Files\Apache Software Foundation\Tomcat 9.0_Tomcat9.2\webapps\ROOT\WEB-INF下的we ...
- qt(二)
主程序入口: #include <iostream> #include <QApplication> #include "MainWindow.h" int ...
- Linux网络命名空间
命名空间(Linux namespace)是linux内核针对实现虚拟化引入的一个特性.创建的每个进程都有自己的命名空间,运行在其中的进程都像是在独立的操作系统中运行一样,命名空间保证了进程之 ...