无文件系统利用Node原型污染实现远程代码执行
Gareth Heyes
研究员
@garethheyes
发布时间: 2023年3月23日 15:00 UTC
更新时间: 2023年3月23日 15:00 UTC
在这篇文章中,我们将介绍一种新的服务器端原型污染(SSPP)利用技术。如果你已经检测到SSPP(可能使用了我们的黑盒检测技术),那么实现远程代码执行(RCE)的下一步就是找到如fork()
这样的接收器。通常,fork
是通过使用--require
命令行标志利用文件系统或环境变量来利用的,但如果你无法这样做呢?我们将向你展示如何使用Node中的一个新命令行标志来执行任意代码,完全不需要本地文件。
import命令行标志
从Node 19.0.0开始,--import
标志允许你指定要加载的模块。我在设计一些Academy实验时发现了这一点,我发现可以使用--import
命令行选项来执行任意JavaScript,而无需文件系统上的任何内容!Michał Bentkowski最初在Chrome中使用类似函数的import()
和data:
协议在客户端JavaScript中发现了这一点,但这也可以应用于Node命令行标志。攻击方式如下:
|
|
在测试时,这也可以在NODE_OPTIONS
中使用。我们向Node开发人员报告了这一点,经过仔细考虑,他们决定这“不是一个入口点安全问题”,因此不违反他们的威胁模型。
执行任意代码
要执行任意代码并获得对文件系统或基于系统的命令的访问权限,你必须使用导入的Node模块。以下是如何使用此技术的演示:
|
|
上面的代码使用--import
命令行标志加载一个数据URL,该URL使用import
加载Node文件系统模块,并简单地将一个文件写入/tmp/pwnd
,内容为“pwnd”。
亲自尝试
我们已经升级了Academy实验中的Node,以便你可以尝试这种技术。最适合使用的实验是“通过服务器端原型污染实现远程代码执行”,因为它使用了fork()
。使用以下代码应在使用--import
标志时创建DNS交互。你能修改有效负载来解决实验吗?
|
|