雲安全-AccessKey滲透中的利用


雲安全-AccessKey滲透中的利用
 
 

內容不太適合以公開的形式發布, 做項目時候發現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

雲安全-AccessKey滲透中的利用
 
 
雲安全-AccessKey滲透中的利用
 
 

OSS外網地址由:https://[Bucket名稱].oss-區域.aliyuns.com 組成 guizideoss.oss-cn-beijing.aliyuncs.com 在滲透期間看到這段地址或者在配置文件中多留意一下。

訪問控制

  • 對 OSS 的資源訪問分為擁有者訪問、第三方用戶訪問。這里的擁有者指的是 Bucket 的擁有者,也稱為開發者。
  • 第三方用戶是指訪問 Bucket 里資源的用 戶。 訪問又分為匿名訪問和帶簽名訪問。
  • 對於 OSS 來說,如果請求中沒有攜帶 任何和身份相關的信息即為匿名訪問。
    • 帶簽名訪問指的是按照 OSS API 文檔中 規定的在請求頭部或者在請求 URL 中攜帶簽名的相關信息。
    • OSS 提供 Bucket 和 Object 的權限訪問控制。
雲安全-AccessKey滲透中的利用
 
 

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查找關鍵詞(懂的自然懂,為了不讓零基礎的人亂搞)

雲安全-AccessKey滲透中的利用
 
 

使用行雲管家直接導入:

雲安全-AccessKey滲透中的利用
 
 

獲取OSS數據:

雲安全-AccessKey滲透中的利用
 
 

獲取ECS主機。

雲安全-AccessKey滲透中的利用
 
 

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

雲安全-AccessKey滲透中的利用
 
 
雲安全-AccessKey滲透中的利用
 
 

OpenAPI Explorer調用:

 

 

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

雲安全-AccessKey滲透中的利用
 
 

或CloudShell調試:

雲安全-AccessKey滲透中的利用
 
 
雲安全-AccessKey滲透中的利用
 
 

如想在本地執行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
雲安全-AccessKey滲透中的利用
 
 
{
    "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。

雲安全-AccessKey滲透中的利用
 
 
#!/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操作雲賬號下的資源。
雲安全-AccessKey滲透中的利用
 
 

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM