如何使用修改后的ls程序执行另一个程序?

时间:2014-03-10 21:30:38

标签: c linux terminal privileges ls

我修改了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?

获取代码程序

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

很高兴老师说这是允许的。实际上我有一个更大的问题是这是一个现实生活中的问题 - 你要做的是利用安全漏洞,这在现实世界中并不是一个好主意。

本练习旨在向您展示编写代码时的谨慎程度,以免在系统中打开大的安全漏洞。 “ls”命令没有任何执行另一个程序的选项。该程序将arg1中的任何内容添加到字符串“/ bin / ls”的末尾。如果你知道shell,就知道“;” character分隔两个命令。你能想出一种方法来设置参数,使它有一个分号,然后是你想要运行的命令吗?