加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 利用LD_PRELOAD和IFS利用SUID文件

发布时间:2020-12-16 07:07:18 所属栏目:百科 来源:网络整理
导读:我一直在阅读通过覆盖函数来了解IFS利用和LD_PRELOAD权限升级.虽然这是两个完全不同的问题,但我决定将它们一起发布,并希望这不是问题.虽然这些都很老,但我被告知他们仍然可以用于特权升级,我很乐意调查.但是,我遇到了一些问题. 所以,让我们从制作SUID文件/ t
我一直在阅读通过覆盖函数来了解IFS利用和LD_PRELOAD权限升级.虽然这是两个完全不同的问题,但我决定将它们一起发布,并希望这不是问题.虽然这些都很老,但我被告知他们仍然可以用于特权升级,我很乐意调查.但是,我遇到了一些问题.

所以,让我们从制作SUID文件/ tmp / suid开始.

#include <unistd.h>

int main() {
  system("/bin/date");
}

这叫/ bin / date.我们的想法是,我们可以更改内部字段分隔符,并使用当前拥有的权限欺骗文件以运行其他内容.这可以通过使名为bin的新文件包含攻击者放置在自定义位置的恶意代码来完成(或者可以吗?).然后我们更改$PATH变量并使其成为首先在我们的自定义路径中搜索位置,我们的恶意假二进制文件位于该路径中.然后通过将内部字段分隔符更改为“/”,而不是运行/ bin / date,程序将运行带有参数日期的/ tmp / fakepath / bin,这可能会触发权限提升.

当我尝试dankalia.com描述的方法时,它失败了.改为/ bin / date执行.如果我只是在控制台中键入bin日期,恶意二进制文件就会启动,但是当它通过/ tmp / suid调用时不会.

我认为该漏洞已修补,它只是忽略了IFS变量,但随后stackoverflow上的帖子让我感兴趣. (C: IFS System() Vulnerability).任何人都可以向我确认这是否有效,以及我做错了什么?谢谢.

至于LD_PRELOAD,我会保持相当简单.

define _GNU_SOURCE
#include <stdio.h>

int puts(const char *str) {
  printf("lel");
}

使用以下命令行进行编译:

gcc –Wall –fPIC –shared –o puts.so puts.c –ldl

然后,用preload技巧覆盖函数puts:

LD_PRELOAD=./puts.so ./vuln_program_that_uses_puts

这非常有效.但是,在处理SUID文件时以及当我们谈论权限提升时,这种情况不会发生. LD_PRELOAD与SUID文件不兼容,并且有充分的理由.我被告知“你可以让它工作,但这很难”.想法?

在此先感谢,并为长期问题感到抱歉.

解决方法

I’ve been told that “you can get it to work but that it’s hard”. Ideas?

操作系统对于这些类型的技巧是明智的,现在大多数都得到了修复.一般的想法是setuid,sudo和朋友不使用非特权用户的环境.

以下提供更多阅读:

> suid-binary vulnerabilities
> Breaking the links: Exploiting the linker

如果你想要的只是一个setuid二进制文件进入系统:

>关闭电脑>安装硬盘>重命名ls(或其他程序,如日期)>将sudo复制到ls(或其他程序,如日期)>卸载并重启

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读