0x01 前言
以前团队打攻防,如果打点打到云上主机,多数人可能不会花时间去深入探究,因此记录一下。这篇文章将以攻击者的视角,看待在 Web 应用托管服务中的元数据安全隐患,这是云上攻防中可能会遇到的场景,因为它们可探索的内容是较多的。未来更多业务部署上云,打点到云上主机的概率将会越来越大。
0x02 云主机相关信息
1、可以通过 360 及 hunter 搜索发现该站点部署在云主机。
2、可以发现主域名下,多个子域名下对应多个资产,打开后发现都部署了同一个网站。(既然都部署的是同一套网站,那我找到其中一台云主机网站的漏洞,是不是可以横向拿下多个网站呢?)
3、通过 域名反查 及 zoomeyes 进行搜索后,发现属于同一C段。并且其中一个Title提示:"阿里云万网虚机IP访问报错提示"。尝试通过域名看能否访问到万网主机web界面是不行的。
现在可以确定以下几点:
1)系统业务都部署在云上,可能使用的是 PaaS 架构
2)服务器为阿里云万网虚拟机
0x03 web渗透
1、相关组件信息
Wappalyzer 插件,告诉我开发语言是 PHP,中间件为 Nginx,前端框架 Layui 2.3.0
网站首页为登录页:xxx.cn/web/index/login ,(web模块下index控制器下login方法)
2、JSFinder、URLFinder 工具、findsomething 插件
探测到了很多路径。一些接口尝试访问,发现都是有鉴权措施的,后台堆报错信息进行了统一异常处理(状态码200并回显统一的报错信息)。工具可以帮助我的已经够多了,我手工翻翻 js
3、登录逻辑绕过
<1> 首先尝试的是登录逻辑绕过,看能否加载到后台才会加载的接口或者js文件。因为 login.js 给我提示了一些用户信息,开发直接在注释里写了5个不同权限的管理员账号
<2> 尝试登录 admin,提示的是密码错误。常规思路是把一些代表判断的值给改成正确的,但这里还要加另外一些参数。
<3> 经过了一个漫长的 Fuzz,最终我构造了一个响应。
"local_deploy":1,
"user":{"login":"admin","status":0}
"error_msg":"\u6210\u529f",
"error_code":"0"
<4> 而后发现后续请求的一个数据包是获取用户信息,用户名称对应的是登录响应数据包中的user参数值。发送到Repeater模块进行测试后,发现该接口是可以未授权获取用户信息,其中就包括用户密码 default_password 。
<5> 直接用该密码登录admin成功。
细节:网站后台页面路径:xxx.cn/index/myCourse/index ,(index模块下myCourse控制器下index方法)。相较于其他php开发的网站,这个网站前台为web模块,后台为index模块,竟然是一个页面对应一个 Controller 控制器,有点不合常规。
4、Ueditor 编辑器的发现
可以发现后台加载了一个 ueditor 的配置文件
庆幸的是 php 版本 Ueditor Demo 可以直接访问,且文件上传的接口可以使用。
参考配置文件 ueditor.config.js 内容。文件上传 xml、svg、pdf 打出 XSS,可以交 SRC 平台拿金币。其实针对打点更有价值的远程图片抓取功能存在的 SSRF 漏洞。
参考:SRC中的SSRF漏洞挖掘笔记
5、SSRF 获取元数据
利用Ueditor远程抓取图片功能,配合SSRF漏洞,让服务器获取阿里云容器内的元数据并,抓取到服务器保存为png。(其中执行的 http://100.100.100.200/latest/meta-data/
为阿里云ECI实例访问元数据的根目录)
参考: 在容器内获取元数据-阿里云帮助中心
通过元数据从ECS实例内部获取实例属性等信息_云服务器 ECS(ECS)-阿里云帮助中心
再访问该图片,即可获取到 AccessKeyId、AccessKeySecret、SecurityToken、Expiration(过期时间)
6、控制台接管
使用 CF 工具,先配置好AK SK,而后查看该凭证下权限,列出可用资源。
./cf config
./cf alibaba perm
./cf alibaba ls
在对存储桶进行翻阅后,发现另外一个配置文件写有AKSK、该凭证的权限值为:AdministratorAccess(可管理所有阿里云资源的权限),如果权限较小也无法执行更多横向操作。参考:阿里云权限策略对应的权限
并且 OSS 存储桶有大量数据。通常都能从中找到很多网站备份、配置文件、云主机配置信息等。
创建RAM角色登录控制台
./cf alibaba console
./cf alibaba console cancel
而后可以使用阿里云RAM用户登录
0x04 权限维持
拿到控制台权限后:
1、可在云函数创建后门
2、可创建存在后门的镜像,目标用户在使用镜像创建 ECS 时就可以触发后门代码。
3、创建新的 RAM 用户
0x05 其他
<1> 阿里云实例元数据文件列表
即SSRF请求的路径参考:通过元数据从ECS实例内部获取实例属性等信息
<2>防范措施
设置元数据的访问模式为仅加固模式,参考:通过元数据从ECS实例内部获取实例属性等信息
<3> 权限策略
多数情况都是使用系统自带的策略,当你获取到元数据后,关键的是列出当前凭证下的权限策略,如果当前权限无法读取任何资源,那后续利用将会很难开展。参考: 阿里云权限策略对应的权限
<4>数据加密方面
后面通过未授权就能拿用户密码,就会发现,其实系统的默认统一密码并不是弱口令,针对密码的加密去逆向再爆破登录实际上价值度不高。
登录时的数据包,输入的密码 123456 是经过多重加密的
通过翻阅 js ,可以拿到密码加密相关函数,可以看到 密钥Key 和偏移量 iv 等信息,也没再深入去尝试了。
总结:
本文介绍了攻击者如何攻击 Web 应用,利用漏洞获取元数据发起后续攻击,最终对用户资产造成危害。
1、发现服务器为云主机,云主机通常自带防护,但还是按常规思路进行信息收集。
2、虽然通过工具探测到JS文件中存在大量接口,但尝试访问后发现时存在鉴权措施。
3、发现开发者遗留在网站注释中的用户名信息,手动审计 JS 发现一些可能存在逻辑绕过的痕迹,进一步 FUZZ 后成功加载了后台初始化获取用户信息的接口。
4、经过测试发现该接口可未授权获取用户登录密码。(所以就明白之前访问后的报错说未登录可能只是个返回的统一错误信息,实际上部分接口可未授权获取数据)
5、在进入后台界面后,发现加载了 Ueditor 配置文件,手工拼接默认路径发现其 Demo 页面,则针对该编辑器历史公开漏洞进行尝试。
6、远程图片抓取功能的 SSRF 漏洞还是存在,并且可以回显成功后的路径。结合服务器为阿里云主机的特性,利用 SSRF 漏洞成功获取到了实例元数据。
7、使用 CF 工具尝试获取信息,从OSS存储桶里翻找到了配置文件,包含有AK SK,尝试使用该凭证再次进行接管,发现权限为 AdministratorAccess 可管理所有阿里云资源,成功创建RAM角色并登录控制台。
技巧:
1、如果服务器获取元数据的路径访问不了,可能是目标没有配置 RAM 用户。
2、如果列出的可用资源为空,可能是没有权限,或者本身就没有 ECS 和 RDS 资源。
3、云场景下横向移动,可通过控制台看到网段情况。
4、从低权限下的泄露,也可横向扩到到其他云服务,例如从 OSS 到 ECS 再到 RAM 。
5、当你命令执行创建RAM用户时,就会短信收到严重告警。创建恶意函数上传恶意镜像,可能会被直接拦截。权限够高我们可以尝试在接管控制台后可在安全中心关掉监控。
6、同样遇到其他云主机时想获取元数据时候,参考其官方文档,不同云服务供应商的利用路径也是不同的。
7、习惯性地先进行被动信息收集,当思路无法开展后再使用扫描类的工具,尽量减少自己的暴漏面。
8、为什么一切都这么顺利,其实大部分尝试都是基于实践中去总结,可能是个错误的方向,但还是有必要把能想到的都试一试。
8、这篇博客更多的意义是记录我个人在学习过程中的知识。由于笔者水平有限,本文的写作多借鉴于以下 文章,但也不乏创新思路点。对于攻防过程的技巧,勉强达到要求的合格水平,各位若有其他新颖独特的思路,还望不吝赐教,多多交流。
阿里云ECS攻防
元数据服务带来的安全挑战