一、符号与命令的关系

在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中所有字符,也就是whoami
2.%a:
0,6% # 取出a的值,从第0个开始取,取6个值,也是whoami
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

参考文章:https://bbs.zkaq.cn/t/4557.html