c – 利用LD_PRELOAD和IFS利用SUID文件
我一直在阅读通过覆盖函数来了解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文件不兼容,并且有充分的理由.我被告知“你可以让它工作,但这很难”.想法? 在此先感谢,并为长期问题感到抱歉. 解决方法
操作系统对于这些类型的技巧是明智的,现在大多数都得到了修复.一般的想法是setuid,sudo和朋友不使用非特权用户的环境. 以下提供更多阅读: > suid-binary vulnerabilities 如果你想要的只是一个setuid二进制文件进入系统: >关闭电脑>安装硬盘>重命名ls(或其他程序,如日期)>将sudo复制到ls(或其他程序,如日期)>卸载并重启 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |