【发布时间】:2018-04-02 09:55:44
【问题描述】:
我正在尝试解决这个问题,我只能运行 ls 命令,而我的目标是读取标志。有一个易受攻击的 C 代码具有 setuid。
-rwsr-sr-x 1 lameprogrammer lameprogrammer 8579 Sep 15 07:21 vul_c
-rw-r----- 1 lameprogrammer lameprogrammer 154 Sep 15 07:40 flag
我是用户攻击者,我必须阅读这个标志文件。给定的C代码是
#include <stdlib.h>
#include <stdio.h>
#define FILENAME "/var/challenges/attacker/challenge1/flag"
int main(void)
{
int vert;
vert = system("ls " FILENAME);
if(!vert)
puts("Flag is at " FILENAME " :P ");
else
puts("Sorry! no file is there");
}
我试图将 ls 转换为 cat,这样如果运行,它将读取 flag 文件。为此,我将所有 bin 文件夹复制到本地空间,然后将 ls 替换为 cat,然后导出新的 PATH。从技术上讲,它应该替换并且我的 ls 命令应该像 cat 一样工作,但它不起作用。以下是我的命令:
cp -r /bin /home/attacker
cd /home/attacker/bin
rm ls
cp cat ls
export PATH=/home/attacker/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/usr/games
ls 命令不能作为 cat 工作,输出为:
ls: unrecognized option '--color=auto'
Try 'ls --help' for more information.
当我尝试运行 ./vul_c 时,它说权限被拒绝,然后它正在打印 对不起!没有文件。
对此的任何帮助都会很棒。
【问题讨论】:
-
但是比赛的重点是你打败了其他人。不是我们打败了他们,而是你把功劳。
-
比赛结束。我只是想解决这个问题,看看我哪里出错了。
-
你说“我在玩 CTF 比赛”。我想你可以理解为什么我们可能会认为这意味着你现在正在玩它,而不是你过去未能完成它。
-
ls的别名可能是ls --color=auto。这是cat不明白的信息。检查您的 .bashrc 或其他类似的配置文件。 -
@JohnZwinck 对不起我的英语。我搞砸了。