本文为译文,原文地址:https://bugra.ninja/posts/cloudshell-command-injection/
Cloud Shell是一个在线开发和操作环境,可在任何地方通过浏览器访问。你可以使用预装了gcloud命令行工具、kubectl等工具的在线终端管理你的资源。你还可以使用在线云壳编辑器开发、构建、调试和部署你的基于云的应用程序。
调查Google Cloud Shell
首先,我总是检查我的目标的网页存档页面以找到一些有趣的 URL。
网址不多,但我可以找到一些参数来挖掘。
其中之一是project
参数。此参数的值会更改我们在 Cloud Shell 中的项目。
简单来说,如果我们访问https://shell.cloud.google.com/?project=test
,我们的项目名称会test
在 Cloud Shell 终端中更改为 。
我在这个参数中尝试了很多东西,但找不到任何东西。在使用这个参数时,我注意到还有一个名为 的参数show
,它改变了 Cloud Shell 终端。
默认情况下,Cloud Shell 与show=ide,terminal
. 那个终端看起来像这样:
我将该参数更改为show=ide
,得到了这个终端:
在这个终端上,我尝试了与我在第一个终端测试相同的东西。
我在project参数中输入asd'
,在终端中看到了一些非常令人兴奋的东西。
你看到我看到的了吗?该终端运行了一个Python脚本,其中包含project
参数的值,没有任何编码。我得到这个报错:
File "<stdin>", line 9
if 'asd'':
^
SyntaxError: EOL while scanning string literal
我的值中的撇号导致了 Python 代码中的错误。我很快将我的值更改为asd':#
以修复该语法错误。但是,我遇到了另一个错误:
File "<stdin>", line 10
config.set('core', 'project', 'asd':#')
^
SyntaxError: invalid syntax
所以,我的值也反映在另一行代码中。我知道第一个位置是if 'value': 而另一个是config.set('core', 'project', 'value')。第一个位置以':'结束,另一个位置以')结束。
如果我们检查Python 中的多行语法,我们可以创建带有三个撇号的多行文本。
第一个代码部分有一个撇号,最后一个代码部分有一个撇号。因此,我刚刚在打印功能中添加了两个撇号,并使内置代码变为假。
我将project值更改为asd':print(''
,Python代码运行时没有任何语法错误!
我修复了Python代码的语法,然后我可以在if
语句之后执行任何Python代码。对吗?是的!
我把project的值更改为asd':import os;os.system("cat /etc/passwd");print(''
并得到了这个:
Bingo,在Cloud Shell中注入了命令!我还能够毫无问题地获得一个远程shell。这是一段演示攻击的视频。
https://huoxian-community.oss-cn-beijing.aliyuncs.com/2022-10-20/1666234470-159987-googlecloudshell.mp4
时间线
2022 年 1 月 28 日 06:40 PM:将报告发送到 Google VRP。
2022 年 1 月 28 日 07:00 PM:收到Nice Catch!
消息。作为 P1 接受的报告。
2022 年 2 月 15 日下午 8:55:$$$ 🙂
2022 年 6 月 1 日下午 02:42:已修复。(之前可能已修复,但我在 6 月 1 日注意到)
感谢 Google VRP 团队在 20 分钟内对报告进行分类。这太疯狂了!另外,感谢 Numan Türle 启发我研究 Cloud Shell。