绕过WAF运行命令执行漏洞的方法大全

本文详细介绍了如何绕过Web应用防火墙(WAF)限制,执行命令的方法,涵盖Windows和Linux环境。在Windows下,通过符号、set命令、环境变量和字符串切割实现命令执行;在Linux下,利用符号、逻辑运算符、环境变量、大括号以及重定向符号等手段。此外,还展示了如何利用Base64编码规避长度限制。

前言

作者:掌控安全-桐镜
今天发散一下思维,聊聊关于命令执行漏洞绕过过滤的方法,让我们一起由浅入深。

一、windows下

1.1 符号与命令的关系
在看一个例子开始之前,首先了解一点,”和^这还有成对的圆括号()符号并不会影响命令的执行。在windows环境下,命令可以不区分大小写

whoami //正常执行
w"h"o"a"m"i //正常执行
w"h"o"a"m"i" //正常执行
wh"“oami //正常执行
wh”“o^am"i //正常执行
((((Whoam”"i)))) //正常执行

当然你可以加无数个”但不能同时连续加2个符号,因为号是cmd中的转义符,跟在他后面的符号会被转义

w""""""""""""“hoami //正常执行
w”"""""""""""“hoa^m”“i //正常执行
w”"""""""""""“hoa^^m”"i //执行错误

如果在命令执行的时候遇到了拦截命令的关键字,那么就可以使用这种方式绕过啦。

1.2 了解set命令和windows变量
我们再了解一下cmd中的set命令和%符号的含义
首先set命令可以用来设置一个变量(环境变量也是变量哦~),那么%符号如下图

set a=1 //设置变量a,值为1
echo a //此时输出结果为"a"
echo %a% //此时输出结果为"1"

可以明显的看出,用两个%括起来的变量,会引用其变量内的值。那也就是说:

set a=whoami //设置变量a的值为whoami
%a% //引用变量a的值,直接执行了whoami命令

这样就可以执行命令了,又或者还可以

set a=who
set b=ami
%a%%b% //正常执行whoami

set a=w""ho
set b=a^mi
%a%%b% //根据前一知识点进行组合,正常执行whoami

set a=ser&& set b=ne&& set c=t u && call %b%%c%%a%
//在变量中设置空格,最后调用变量来执行命令

通常我们也可以自定义一个或者多个环境变量,利用环境变量值中的字符,提取并拼接出最终想要的cmd命令。如:
Cmd /C “set envar=net user && call echo %envar%”
可以拼接出cmd命令:net user

也可以定义多个环境变量进行拼接命令串,提高静态分析的复杂度:
cmd /c “set envar1=ser&& set envar2=ne&& set envar3=t u&&call echo %envar2%%envar3%%envar1%”

cmd命令的“/C”参数,Cmd /C “string”表示:执行字符串string指定的命令,然后终止。
而启用延迟的环境变量扩展,经常使用 cmd.exe的 /V:ON参数,
/V:ON参数启用时,可以不使用call命令来扩展变量,使用 %var% 或 !var! 来扩展变量,!var!可以用来代替%var%,也就是可以使用感叹号字符来替代运行时的环境变量值。后面介绍For循环时会需要开启/V:参数延迟变量扩展方式。

1.3 windows进阶,切割字符串!
再进阶一下,命令行有没有类似php或者python之类的语言中的截取字符串的用法呢,当然也是有的。还拿刚才的whoami来举例

%a:~0% //取出a的值中的所有字符
此时正常执行whoami
%a:~0,6% //取出a的值,从第0个位置开始,取6个值
此时因为whoami总共就6个字符,所以取出后正常执行whoami
%a:~0,5% //取5个值,whoam无此命令
%a:~0,4% //取4个值,whoa无此命令

从上图可以看出,截取字符串的语法就是
%变量名:~x,y%
即对变量从第x个元素开始提取,总共取y个字符。
当然也可以写-x,-y,从后往前取
写作-x,可取从后往前数第x位的字符开始,一直到字符的末尾
-y来决定少取几个字符

继续操作
首先set看一下目前有哪些变量可以给我们用呢

第一个a=whoami可以暂时先忽略,是我自己设置的。
我自己电脑上的环境变量还是挺多的,那我几乎可以用这种方式执行任何命令,因为这些变量的值,几乎都有26个字母在了
从简单的开始,如果命令执行不允许空格,被过滤,那么可以

net%CommonProgramFiles:~10,1%user

CommonProgramFiles=C:\Program Files\Common Files
从CommonProgramFiles这个变量中截取,从第10个字符开始,截取后面一个字符,那这个空格就被截取到了(也就是Program和Files中间的那个空格),net user正常执行,当然了,还可以配合符号一起使用

net%CommonProgramFiles:~10,1%user

再列出C盘根目录

d

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值