这是系统安全的作业。
作业有 2 个部分。给出了 2 个可执行文件。 exectest 和 exectestsecure。
反编译后发现如下:
执行测试
...
execv("ls",...);
...
exectestsecure
...
execv("/bin/ls",...);
...
目标是打印 Hello, World! 而不是运行 ls 命令。
对于第一部分,我创建了 helloworld 程序并将其编译为我的主目录中的 ls。然后我将我的主目录添加到 PATH 中。
我不明白我能为 exectestsecure 做什么,它使用绝对路径。
以 root 身份运行 exectestsecure 有一些奖励点。奖励使用带有 setuid(0) 的可执行文件,并且具有正确的权限。我认为如果我找到一种方法劫持对/bin/ls 的调用,我也可以回答奖励问题。
最佳答案
如果 libc 是动态链接的,您可以尝试使用 LD_PRELOAD 覆盖 execv()。您将需要一些工具:objdump、dlsym、strace。找到要遵循的路径here例如。
关于linux - 使用绝对路径覆盖 exec 系统调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21523162/