【问题标题】:How to use a modified ls program to execute another program?如何使用修改后的 ls 程序执行另一个程序?
【发布时间】:2014-03-10 21:30:37
【问题描述】:

我得到了一个修改后的 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 获取代码程序?

有人可以帮我吗?

【问题讨论】:

  • system() 将执行 command ,就好像它被输入到 shell 中一样。你需要找到一种方法来欺骗system() 在ls 之后运行另一个命令。
  • 这是我已经发现的,但我不知道有什么额外的命令@rmartinjak
  • "我必须执行一个名为 get-code 的程序"
  • 已经做了 ./ls -exec /some-maps/get-code {} \;就像我说的我没有其他权限,只有 ls 是可以使用 root 权限打开的,我不知道如何使用 ls @rmartinjak 执行
  • 这是作业吗?这看起来像是正确检查输入是否有特殊字符(清理输入)的练习,因为结果是违反安全性的。作为提示,您可以将参数放在引号中,然后您键入的任何字符都将包含在参数中,即使是对 shell 具有特殊含义的字符。

标签: c linux terminal privileges ls


【解决方案1】:

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

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

【讨论】:

  • 不,我不知道怎么做,因为他们给我们的课程只有制作网站的知识......但是是的,整个课程都称为 Security1,所以我们了解安全方面的差距以及如何让电脑更强大地抵御黑客攻击......他们说:你知道为什么黑客可以通过黑客攻击自己来进行黑客攻击:/但是对它的了解并不多
  • 好吧,我建议阅读更多关于 shell 的内容,“man bash”是一个很好的起点。系统只是在 shell 中运行字符串,所以如果该字符串是“/bin/ls ; /some-maps/get-code”,它将运行 ls 然后运行 ​​get-code。
  • 第一个如果拒绝我这样做
  • 好的,你到了。参数中只能包含 40 个字符。我注意到您将 /bin/ls 放入参数中,这不是必需的。我认为您只需使用“;./get-code”作为参数,它的长度小于 40 个字符。
  • :D 感谢您的帮助! puu.sh/7qJSB.png 确实有效!我得到了我的练习 6 的特殊代码,我希望这次是别的东西!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-24
  • 1970-01-01
  • 1970-01-01
  • 2013-01-27
  • 2014-06-10
  • 1970-01-01
相关资源
最近更新 更多