我在名为vulnerable.c的文件中有以下代码:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main() {
   gid_t egid = getegid();
   setregid(egid, egid);
   system("echo testing");

   return 0;
}

以下是对易受攻击的可执行文件的权限:
-rwxr-sr-x 1测试冷却8192 2016年9月28日易受攻击
在我的主目录中,我创建了一个名为“echotest”的新目录,放入echo.c文件并编译它。echo.c文件刚刚打印出“已利用!!". 我还将PATH环境变量更改为包含$HOME/echotest。
现在,当我运行vulnerable时,它应该打印出“已利用!”但事实并非如此。我错过了什么?
我用“猫”做了一个类似的测试,但用echo没用。
任何帮助都将不胜感激。
谢谢

最佳答案

问题是echo通常是一个shell内置的。如果您想利用此漏洞,可以将易受攻击的代码更改为:

int main() {
   gid_t egid = getegid();
   setregid(egid, egid);
   system("env echo testing");

   return 0;
}

有关更多信息,请参见:How do I prevent bash to use a builtin command?

关于c - 在C中利用system()调用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39939853/

10-13 06:52