【问题标题】:Exploit on a C program with fgets()使用 fgets() 利用 C 程序
【发布时间】:2021-02-21 06:31:16
【问题描述】:

这是我考试中的一个问题,发生在当天早些时候:

考虑下面的代码 sn-p。攻击者的目标是执行攻击者选择的代码,例如生成一个 shell,或者擦除文件系统的内容。


/* barfoo is called with a non-zero value if the user is 
authenticated. Else it is called with 0.*/

void barfoo (int authstatus) {
      char packet[1024];
      fgets (packet, 1023, stdin);
      if(authstatus != 0) system (packet);
      else syslog ("Not authorised to process packet");
      return; 
}

Q1:假设我要在启用堆栈金丝雀的情况下编译这个程序。假设 libc 未在启用堆栈金丝雀的情况下编译。攻击者能否利用该程序?

Q2:假设我要在启用堆栈金丝雀(返回地址保护)的情况下编译这个程序。假设 libc 是在启用堆栈金丝雀的情况下编译的。攻击者能否利用该程序?

Q3:假设我要在启用了不可执行页面(即 W-xor-X 保护)的系统上运行此程序。攻击者能否利用该程序?

他们三个的答案显然都是肯定的,但我不知道如何。

在第一季度和第二季度,为了实现缓冲区溢出,我们必须覆盖金丝雀,这会在代码执行时引发异常。

我们可以尝试使用 ROP(面向返回的编程)攻击,但要执行该攻击,我们需要指向缓冲区的开头,因此,我们需要覆盖堆栈上的返回地址。我也看不到我们如何进行格式字符串利用或类似的事情。

另外,在这种情况下,由于我们使用 fgets() 而不是 gets() 来读取输入,所以它会在 1022 个字符后停止读取,那么我们还能如何利用该程序呢?

我在原始 ROP 论文中读到,我们可以使用帧指针覆盖,但我不确定这意味着什么,也不知道这在这里究竟是如何工作的。

任何指示都会有所帮助,谢谢。

【问题讨论】:

  • 我不知道fgets 具有正确大小的缓冲区如何用于溢出缓冲区。 authstatus 是什么?
  • @Jabberwocky 这本身不是真实世界的代码——我们只得到了这个代码 sn-p 但我想“authstatus”只是一个用于检查身份验证的变量,因为代码中的注释说。
  • 您无法利用对fgets() 的调用来执行堆栈粉碎或类似操作。但是,由于authstatusany 非零值提供了shell 访问,因此该函数可能与程序中其他地方的漏洞结合使用。没有其他代码可以查看吗?
  • @r3mainer 很遗憾,没有。这是整个问题。但是,导师确实给了我们一个提示,漏洞不在 fgets() 中,而是在其他地方。我想您可能会以某种方式更改或破坏 authstatus 的值,但由于这将“高于”返回地址,我不确定这是如何发生的。

标签: c security buffer-overflow exploit


【解决方案1】:

与其他评论者一样,我很确定 fgets 调用本身是不可利用的。但是看看syslog https://linux.die.net/man/3/syslog 的论点:

void syslog(int priority, const char *format, ...);
//versus
syslog ("Not authorised to process packet");

如果它开始在堆栈的某处寻找它的格式字符串,我想知道是否可以说服它尝试packet 的内容。

【讨论】:

    【解决方案2】:

    stdin 是一个 FILE 结构,可以被覆盖,通过 vtable 指针触发函数调用(如果它被操纵)

    https://seb-sec.github.io/2020/04/29/file_exploitation.html https://github.com/CptGibbon/House-of-Corrosion

    这假设其他原语可用并且已被使用。

    【讨论】:

      猜你喜欢
      • 2016-03-14
      • 1970-01-01
      • 2022-01-16
      • 2012-03-15
      • 1970-01-01
      • 2011-08-17
      • 2018-01-02
      • 2013-08-01
      • 2021-10-15
      相关资源
      最近更新 更多