云主机通过使用Access Key Id / Secret Access Key加密的方法来验证某个请求的发送者身份。Access Key Id(AK)用于标示用户,Secret Access Key(SK)是用户用于加密认证字符串和云厂商用来验证认证字符串的密钥,其中SK必须保密。 AK/SK原理使用对称加解密。
云主机接收到用户的请求后,系统将使用AK对应的相同的SK和同样的认证机制生成认证字符串,并与用户请求中包含的认证字符串进行比对。如果认证字符串相同,系统认为用户拥有指定的操作权限,并执行相关操作;如果认证字符串不同,系统将忽略该操作并返回错误码。
大部分的云主机都支持AK/SK都认证方式,用于API调用等功能,由于开发的不规范,以及一些其它漏洞,可能会导致AK/SK泄露。在渗透中,如果发现目标泄露了AK/SK,可以通过AK/SK直接攻击其对应的云服务器。
行云管家直接大部分主流的云厂商。
选择对应厂商,通过AK/SK凭证对主机进行绑定。
AK/SK验证通过,选择绑定的云主机。
绑定成功,可以直接重置操作系统登录密码。(取得客户授权后操作)
如下,目标使用了spring boot 2.0框架,开放了env端点。
存在阿里云aliyun.accesskey和aliyun.secretKey属性,其对应的value进行了脱敏处理。
尝试获取脱敏的属性明文。
需要补课的参考我之前的文章。
https://www.jianshu.com/p/ae4be3af5231
目标网站存在/actuator/jolokia 接口且使用了 jolokia-core 依赖,直接尝试使用第一种方法获取明文。(大多数情况通过下载应用实时的 JVM 堆信息,获取明文)
修改arguments为想要获取的属性值。
成功获取到aliyun.accesskey、aliyun.secretKey的明文信息。
使用行云管家输入获取的AK/SK绑定主机。可以查看到主机的实例ID,所属地区等信息。
最终目的是获取服务器权限,由于没有取得客户允许,不能随意重置操作系统密码。
查看阿里云官方的api使用。
https://api.aliyun.com/#/?product=Ecs
在左上方搜索框,搜索相关命令执行的操作方法。
RunCommand为执行命令。
CreateCommand是创建命令和InvokeCommand调用命令一起使用。
首先尝试直接执行命令:
选择熟悉的脚本语言,本次使用python
RegionId为地域ID,通过行云管家获取到
RunShellScript:适用于Linux实例Shell脚本。
CommandContent:对bash反弹shell命令进行Base64编码
InstanceId:通过行云管家获取到实例ID
正确输入后,可以调试SDK代码执行脚本,也可以把脚本内容粘贴到本地执行。
执行成功后远程vps没有接收到反弹的shell,原因未知。
查看其他师傅的利用文章使用的CreateCommand创建命令和InvokeCommand调用命令进行反弹shell操作。
首先使用CreateCommand创建命令,输入对应信息。
执行脚本,获取到返回的CommandId
然后使用InvokeCommand调用命令,输入得到的CommandId
执行脚本
vps成功接收到反弹的shell
可以直接使用网上自动化的利用工具,简单便捷。
https://github.com/iiiusky/alicloud-tools
指定AK/SK 获取主机列表
./AliCloud-Tools -a xxx -s xxx ecs --list
指定AK/SK,实例ID,和执行的命令。
./AliCloud-Tools -a xxx -s xxx ecs exec -I xxx -c "whoami"
成功接收到反弹的shell。
图形化工具
https://github.com/mrknow001/aliyun-accesskey-Tools/releases/tag/1.0
网上的大多数文章都是对阿里云的AK/SK进行利用。
然而实际情况中可能遇到其它的云主机AK/SK泄露。
如:
亚马逊云
七牛云
在行云管家列表内的可以直接绑定去管理。
不在列表内的,需要去查看官方的API文档,然后根据文档进行进一步的利用。
以七牛云举例,其官方开发者中心描述了如何使用AK/SK对服务器进行管理。
多看官方的开发者文档
参考链接: