我修改了ls:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
int main(int argc, char **argv){
char command[50];
strcpy(command,"/bin/ls ");
gid_t egid = getegid();
setregid(egid, egid);
if(argc > 1) {
if(strlen(argv[1]) > 40) {
printf("The command you have given is too long, try again.\n");
return 0;
}
strcat(command,argv[1]);
system(command);
}else{
printf("This is a special NSA-modified 'ls' program. See 'man ls' for further details on how to use it.\n");
printf("USAGE: %s [flags & files]\n",argv[0]);
}
return 0;
}
我必须执行一个名为get-code的程序,但我没有ls执行它的权限(修改后的ls与get-code程序在同一个目录中),所以如何执行使用修改后的ls?
获取代码程序有人可以帮助我吗?
答案 0 :(得分:1)
本练习旨在向您展示编写代码时的谨慎程度,以免在系统中打开大的安全漏洞。 “ls”命令没有任何执行另一个程序的选项。该程序将arg1中的任何内容添加到字符串“/ bin / ls”的末尾。如果你知道shell,就知道“;” character分隔两个命令。你能想出一种方法来设置参数,使它有一个分号,然后是你想要运行的命令吗?