#include </etc/shadow> - Hanno的博客
2019年12月16日,星期一
最近我看到一条推文,有人提到可以在用gcc编译的C代码中包含/dev/stdin
。这至少可以说是令人惊讶的。
当你从IT安全背景看到这样的内容时,你会开始思考这是否可以被滥用于攻击。虽然我没有想出任何具体方法,但我开始思考你还可以包含其他什么。由于你基本上可以包含系统上的任意路径,这可能会被用于数据泄露——如果你能说服别人编译你的代码。
有许多网页提供在线服务,你可以在其中输入C代码并运行。很明显,如果运行的代码没有以某种方式进行沙箱处理,这样的系统是不安全的。但是编译器也需要进行沙箱处理,这一点是否同样明显呢?
你会如何攻击这样的系统?直接通过代码泄露数据相对困难,因为你需要包含最终成为有效C代码的数据。也许有一个技巧可以使像/etc/shadow
这样的文件成为有效的C代码(你可以在include之前和之后放置代码),但我没有找到。但也不需要这样做:从编译器得到的错误消息就是你所需要的。我测试的所有在线工具都会在代码编译失败时显示错误。
我甚至发现有一个服务允许我添加
#include </etc/shadow>
并显示root密码的哈希值。这实际上意味着该服务以root权限运行编译任务。
包含/etc
中的各种文件可以了解系统的一些信息。例如,/etc/lsb-release
通常提供有关所用发行版的信息。有趣的是,包含/proc
中的伪文件不起作用。似乎gcc将它们视为空文件。这限制了了解系统的可能性。/sys
和/dev
可以工作,但它们包含的可读信息较少。
总之,我认为让其他人编译代码的服务应考虑对编译过程进行沙箱处理,从而确保无法通过这些攻击向量泄露有趣的信息。
发布者:Hanno Böck
分类:代码、英语、Linux、安全
时间:18:38
评论(7)| 引用(0)
引用
本文的特定引用URI
无引用
评论
#1
Jon
2019-12-17 12:13
用编译器访问/etc/shadow?当然不行。
在我所有可用的系统上,我得到以下结果:
$ cat t.c
#include
$ gcc t.c
t.c:1:10: fatal error: /etc/shadow: Permission denied
#include
^~~~~~~~~~~~~
compilation terminated.
#1.1
pikzel
2019-12-17 12:58
正如他所说:“这实际上意味着该服务以root权限运行编译任务”
我假设你没有以root权限运行编译器。
#2
Arctic Kona(主页)
2019-12-18 03:44
这让我想起了一种编译器炸弹攻击,涉及精心制作的C源代码,需要大量内存和磁盘空间来编译。
#2.1
Han You
2020-01-09 15:51
我曾经通过#Include
崩溃了我大学的在线编译器。
#2.2
Han You
2020-01-09 15:52
#include /dev/random
#3
mzr
2019-12-21 20:31
在某些操作系统和文件系统上,你还可以将目录作为常规文件包含。这允许你枚举系统上的文件。
#3.1
mzr
2019-12-21 20:33
使用.incbin
添加评论
名称
电子邮件
主页
回复对象
[顶级]#1: Jon 于 2019-12-17 12:13
#1.1: pikzel 于 2019-12-17 12:58
#2: Arctic Kona 于 2019-12-18 03:44
#2.1: Han You 于 2020-01-09 15:51
#2.2: Han You 于 2020-01-09 15:52
#3: mzr 于 2019-12-21 20:31
#3.1: mzr 于 2019-12-21 20:33
评论
电子邮件地址不会显示,仅用于电子邮件通知。
为防止自动机器人评论垃圾邮件,请在下面的输入框中输入你在图像中看到的字符串。只有在字符串匹配时才会提交你的评论。请确保你的浏览器支持并接受cookie,否则无法正确验证你的评论。
输入上方防垃圾邮件图像中的字符串:
记住信息?
订阅此条目
关于
本博客由Hanno Böck撰写。
除非另有说明,其内容以CC0许可。
你可以在这里找到我的网页,其中包含我作为记者的工作链接。
我还发布了一份关于气候变化和脱碳技术的新闻通讯。
该博客使用免费软件Serendipity,并托管在schokokeks.org。
Hanno on Mastodon | 联系/印记 | 隐私/数据保护