在上一篇我写了利用SSRF漏洞读取云服务器的元数据,运气不错的话可能获取到权限足够大的STS凭证,用来遍历存储桶查看实例等操作。
然而我们在实战中经常在文件上传、客服会话等功能点碰到如下类型的StsToken。注意分辨这两种Ststoken的区别,两图对比:下图的响应数据中多了bucketName、endpoint等数据,记住这些数据我们后面都会用到。
如上图的临时凭证是阿里云提供的一种文件上传方案,开发者用户可以使用SDK将文件从前端直传到OSS存储桶,很多开发者都认为这种StsToken使用方式是没有问题的,因为他本来提供的服务就是文件上传,不管你攻击者上传什么类型的文件都是存储在桶里对我的服务没有任何影响。但是在阅读了我这篇文章之后也许对师傅们跟开发人员battle会有一定的帮助。在文件上传的功能点中除了常见的任意文件上传漏洞之外还有一种危害很大的漏洞那就是文件覆盖,试想一下攻击者将原本存储在桶里A公司的logo图标直接覆盖成B公司的logo图标,在用户打开站点时logo图标被自动调用,那将会是多么有趣的场景。
好了废话不多说,开始实操。在上文中提到了buckName,也就是我们上传文件到存储桶的桶名称。endpoint表示的是地域,例如:
https://oss-cn-beijing.aliyuncs.com/、https://oss-cn-shenzhen.aliyuncs.com/
当我们获取到buckName和endpoint之后,直接在我们的目标站点中查找直接从存储桶引用的文件,比如我获取的buckName是aaaaa-dev-data,endpoint是https://oss-cn-beijing.aliyuncs.com/,那么就寻找如下格式的目标文件:
aaaaa-dev-data.oss-cn-beijing.aliyuncs.com/aaaa/bbbb/cccc*
这个*表示.png、.jpg、.js等资源文件,我们的目的就是去覆盖这些文件。在本案例中我们尝试覆盖站点的logo图:
OK,在我们有了StsToken和目标文件的完整路径之后,我们使用ossutil工具来覆盖目标文件,下载地址及使用方法参考阿里云文档:
https://help.aliyun.com/zh/oss/developer-reference/install-ossutil?spm=5176.12818093_-1363046575.top-nav.30.357216d0HVHa6a&scm=20140722.S_help%40%40%E6%96%87%E6%A1%A3%40%40120075.S_BB1%40bl%2BBB2%40bl%2BRQW%40ag0%2Bhot%2Bos0.ID_120075-RL_ossutil-LOC_console~UND~help-OR_ser-V_3-P0_0
按照提示输入accessKeyID、stsToken、accessKeySecret、endpoint,上传命令:ossutil cp 目标文件名 oss://桶名/路径
可以看到站点的logo图标已经被我们修改,除了覆盖文件之外我们还可以尝试js投毒,可以看到如下js也是存储在桶里直接被调用的
我们使用ossutil上传一个恶意js
上传成功后再写一个js引用它
试想一下如果我们将目标站点中引用的js覆盖成我们上传的恶意js,那么结果一定很精彩。当然这想想就得了,真这么干估计得吃lao饭,在测试时注意业务影响最小化处理,证明漏洞存在即可。
原文始发于微信公众号(安全工程师实录):云上渗透-StsToken利用技巧
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论