【问题标题】:C: escalate privileges in Linux by backing this programC: 通过支持这个程序来提升 Linux 中的权限
【发布时间】:2016-02-23 18:53:01
【问题描述】:

这个程序有什么漏洞?

我目前被困在一个黑客练习中,不知道该怎么做!

你认为“路径”是什么意思?因为我认为这很重要。

#include <fcntl.h>
#include <limits.h>
#include <pwd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>

int main(int argc, char *argv[])
{
  char buf[1024], path[PATH_MAX + 1];
  int fd, i;

  strcpy(path, getpwuid(getuid())->pw_dir);
  strcat(path, "/script.sh");

  strcpy(buf, "#!/bin/bash\necho Hello.\ndate\nrm \"$0\"\n");

  umask(0);
  if ((fd = open(path, O_CREAT | O_EXCL | O_WRONLY, 02760)) < 0) {
        perror("open");
        return 1;
  }
  write(fd, buf, strlen(buf));  
  close(fd);

  printf("please wait for us to run your script");  
  fflush(stdout);
  for (i = 0; i < 5; i++) {
        printf(".");
        fflush(stdout);
        sleep(1);
  }
  printf(" starting script\n");

  execl("/bin/sh", "/bin/sh", path, (char *) 0); 
  perror("execl");
  return 0;
}

【问题讨论】:

  • SO 不是咨询网站。
  • 你是要解释别人的代码吗?
  • @WeatherVane 是的,这是一个黑客练习,我正在努力寻找弱点
  • @CarolineRudolph 您知道我们中的一些人是专业开发人员,他们不得不在备份上花费额外的时间并在 AV 软件上花费大量资金来防止恶意软件进入我们的系统?您是在向我们寻求黑客练习方面的帮助吗?
  • 呃,没有。简单得多。看看“printf(“请等待我们运行你的脚本”);”迅速的。也许程序正在等待别的东西?在这种情况下,您可能还想查看“umask(0)”语句及其含义。

标签: c privilege-elevation


【解决方案1】:

嗯。

程序编写一个脚本,稍后在用户权限下执行。

umask (0) 系统调用实际上使该文件在世界范围内可写(隐含地 - open 调用使其可组写 - 感谢 Daniel Jour 指出这一点 - 但如果您组中的任何人的第一个命令注入该文件将是一个 chmod,它可以升级)。

正如 cmets 中所指出的,您组中的任何人 只需将所有命令写入该命名文件,即可以用户的权限并代表用户注入他想要执行的任何内容,同时程序太棒了,他等了五秒钟。

关于“不要帮助人们进行黑客攻击”的简短评论 - cmets:OP 正在做的是试图了解程序中可能存在的漏洞,我们仍然处于非常基础的水平这里。如果任何程序员都意识到他的代码中可能存在这样的缺陷,他应该感激不尽。试图将这些东西隐藏在引擎盖下只会帮助黑客,并且不会让任何事情变得更安全。

【讨论】:

  • 没错,但您会认为这是一个漏洞吗?该程序会创建一个文件,该文件稍后会以调用它的同一用户的权限运行,那么为什么不直接在提示符处输入“恶意”代码而不是运行上面的程序呢?
  • 另外,该文件不会是世界可写的,它实际上是-rwxrwS---(用户:root,组:whatever-your-users-group-is)
  • 你试过了吗?如果是,并且您看到 -rwxrwS--- 您在启用了 acl 的系统(可能是 Linux)上。 umask 的行为不同(有充分的理由......)。正如我所指出的,如果没有 acl,umask(0) 将使文件实际上是世界可写的。我推荐一个男人umask。而上面的/anyone/,我的意思是/anyone/,即系统上的所有用户。这就是漏洞
  • 你确定吗?使用模式02760 调用open(不是fopen)。 (是的,我运行了上面的,即使使用 SETID)
  • 我认为你错了。 umask 调用意味着不会禁用从模式授予 open 的任何权限。但是由于 open 模式明确禁用了世界访问,因此生成的文件将没有世界(可写)访问。 (另外,我的测试系统没有acl,我刚查过)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-15
  • 1970-01-01
  • 2018-06-07
  • 2011-04-13
  • 1970-01-01
  • 1970-01-01
  • 2013-08-05
相关资源
最近更新 更多