Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何使用修改后的ls程序执行另一个程序?_C_Linux_Terminal_Privileges_Ls - Fatal编程技术网

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

C 如何使用修改后的ls程序执行另一个程序?,c,linux,terminal,privileges,ls,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,

我有一个修改过的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;
}
#包括
#包括
#包括
#包括
int main(int argc,字符**argv){
char命令[50];
strcpy(命令“/bin/ls”);
gid_t egid=getegid();
setregid(egid,egid);
如果(argc>1){
if(strlen(argv[1])>40){
printf(“您发出的命令太长,请重试。\n”);
返回0;
}
strcat(命令,argv[1]);
系统(指挥部);
}否则{
printf(“这是一个特殊的NSA修改的'ls'程序。有关如何使用它的详细信息,请参阅'man ls'。”;
printf(“用法:%s[标志和文件]\n”,argv[0]);
}
返回0;
}

我必须执行一个名为get code的程序,但如果没有ls,我没有执行该程序的权限(修改后的ls与get code程序位于同一目录中),因此如何使用修改后的ls执行get code程序


有人能帮我吗?

很高兴老师说可以。事实上,我会有一个更大的问题,这是一个现实生活中的问题——你试图做的是利用一个安全漏洞,而这在现实世界中不是一个好主意


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

system()
将执行
命令,就像它被键入一个shell一样。您需要找到一种方法来欺骗
system()
ls
之后运行另一个命令。这是我已经发现的,但我不知道@rmartinjak“我必须执行一个名为get code的程序”已经执行了什么额外命令。/ls-exec/some map/get code{};就像我说的,我没有其他特权,只有ls可以用root权限打开它,我不知道如何使用ls@rmartinjakIs执行这个作业?这看起来像是正确检查输入的特殊字符(清除输入)的练习,因为结果是违反安全性。作为一个提示,你可以把论点放在引号里,然后你键入的任何字符都会出现在论点中,即使是那些对shell有特殊意义的字符。不,我不知道怎么做,因为他们给我们上的课程只有制作网站的知识。。。但是,是的,整个课程被称为安全1,所以我们了解了安全方面的差距,以及如何使电脑更强大,以抵御黑客攻击。。。他们说:你知道为什么黑客可以通过自己的黑客行为进行黑客攻击:/是的,没有那么多的知识。好吧,我建议你多读一些关于shell的文章,“ManBash”是一个很好的开始。系统只是在shell中运行该字符串,因此如果该字符串为“/bin/ls;/some maps/get code”,则它将运行ls,然后运行get-code。如果第一个字符串拒绝我执行itOk,那么您就成功了。参数中只能有40个字符。我注意到您在参数中放置了/bin/ls,这是不需要的。我认为您只需使用“;/get code”作为参数,它不超过40个字符。:D感谢您的帮助!它确实有用!我得到了练习6的特殊代码,我希望这次是别的!