Security-JAWS DAYS CTF - Writeup
Security-JAWS 第30回の中で行われたSecurity-JAWS DAYS CTFに参加しました。
Security-JAWS DAYS CTFはAWSに関連する問題のみが出題されるCTFとなっており、AWSを普段あまり触らない自分としては非常に勉強になる内容が多いCTFでした。
問題の難易度は Trivia / Warmup / Easy / Medium / Hard の5段階に分かれていて、AWS初心者でも挑める問題が複数用意されていました。MediumとHardの問題には挑めなかった/解けませんでしたが、Trivia~Easyで解けた問題についてWriteupを書きました。
Trivia問題
Trivia1~12は省略します
Trivia13 (10pt)
CloudTrailログを読み取り、作成されたユーザー名を回答してください。
CloudTrailのログを記録したファイルが提供される。ログファイルを確認するとCreateUserイベントが記録されており、 KRJXVVAWC13R
というユーザが作成されている。
{
"eventVersion": "1.08",
"userIdentity": {
"type": "AssumedRole",
"principalId": "AROXXXXXXXXXXXXXXXXX:test-user",
"arn": "arn:aws:sts::123456789012:assumed-role/test-user/test-user",
"accountId": "123456789012",
"accessKeyId": "ASIA44JPO63AVLDDIY5N",
"sessionContext": {
"sessionIssuer": {
"type": "Role",
"principalId": "AROXXXXXXXXXXXXXXXXX",
"arn": "arn:aws:iam::123456789012:role/test-user",
"accountId": "123456789012",
"userName": "test-user"
},
"webIdFederationData": {},
"attributes": {
"creationDate": "2022-10-15T21:38:24Z",
"mfaAuthenticated": "true"
}
}
},
"eventTime": "2022-10-15T22:05:16Z",
"eventSource": "iam.amazonaws.com",
"eventName": "CreateUser",
"awsRegion": "us-east-1",
"sourceIPAddress": "AWS Internal",
"userAgent": "AWS Internal",
"requestParameters": {
"userName": "KRJXVVAWC13R", ★
"tags": []
},
"responseElements": {
"user": {
"path": "/",
"userName": "KRJXVVAWC13R",
"userId": "AIDAXXXXXXXXXXXXXXXXX",
"arn": "arn:aws:iam::123456789012:user/KRJXVVAWC13R",
"createDate": "Oct 15, 2022 10:05:16 PM"
}
},
"requestID": "5eda3a85-64ed-4c5f-8d0a-9497e05f99bd",
"eventID": "5586ec9d-4e9d-431b-ad8e-e33a6c8ecb94",
"readOnly": false,
"eventType": "AwsApiCall",
"managementEvent": true,
"recipientAccountId": "123456789012",
"eventCategory": "Management",
"sessionCredentialFromConsole": "true"
}
Warmup問題
AWS CLI practice (50pt)
このIAMユーザー(シークレットキー+アクセスキー)が所属するAWSアカウントIDは何? この問題ではAWSアカウントIDの値がFLAGとなっています。
IAMユーザのアクセスキーとシークレットアクセスキーが提供されているので、AWS CLI(aws sts get-caller-identityコマンド)を使用して、IAMユーザの情報を確認する。
コマンドの実行結果から、AWSアカウントIDが 946546793415
であることが確認できた。
C:\Users\hamasho>aws configure
AWS Access Key ID [None]: <redacted>
AWS Secret Access Key [None]: <redacted>
Default region name [None]: ap-northeast-1
Default output format [None]:
C:\Users\hamasho>aws sts get-caller-identity
{
"UserId": "<redacted>",
"Account": "946546793415", ★
"Arn": "arn:aws:iam::946546793415:user/ctf_challenge_0"
}
Run function (50pt)
アクセスキーを調べてFLAGを入手せよ!
IAMユーザのアクセスキーとシークレットアクセスキーが提供されているので、AWS CLI(aws sts get-caller-identityコマンド)を使用してIAMユーザの情報を確認する。
IAMユーザ名は ctf_challenge_6 となっている。
C:\Users\hamasho\Downloads>aws configure
AWS Access Key ID [****************FL6G]:
AWS Secret Access Key [****************pmXV]:
Default region name [ap-northeast-1]:
Default output format [None]:
C:\Users\hamasho\Downloads>aws sts get-caller-identity
{
"UserId": "AIDAQZ2IU22WIFYNZDUBU",
"Account": "055450064556",
"Arn": "arn:aws:iam::055450064556:user/ctf_challenge_6"
}
ctf_challenge_6ユーザに割り当てられているポリシー情報を確認すると、インラインポリシーとして runlambda
というポリシーが存在する。問題名の通り、Lambdaを実行する必要がありそう?
C:\Users\hamasho\Downloads>aws iam list-attached-user-policies --user-name ctf_challenge_6
{
"AttachedPolicies": []
}
C:\Users\hamasho\Downloads>aws iam list-user-policies --user-name ctf_challenge_6
{
"PolicyNames": [
"runlambda" ★
]
}
runlambdaのポリシードキュメントを参照すると、Lambda関数のリソース名を確認できる。
C:\Users\hamasho\Downloads>aws iam get-user-policy --user-name ctf_challenge_6 --policy-name runlambda --query "PolicyDocument"
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "readiam",
"Effect": "Allow",
"Action": [
"iam:Get*",
"iam:List*"
],
"Resource": "arn:aws:iam::055450064556:user/ctf_challenge_6"
},
{
"Sid": "lambdaInvoke",
"Effect": "Allow",
"Action": [
"lambda:InvokeFunction"
],
"Resource": "arn:aws:lambda:ap-northeast-1:055450064556:function:run_me" ★
}
]
}
リソース名を確認できたので、aws lambda invokeコマンドでLambda関数を実行してみる。応答内容の文言の通り、実行ログを見る必要がありそう。
C:\Users\hamasho\Downloads> aws lambda invoke --function-name arn:aws:lambda:ap-northeast-1:055450064556:function:run_me test
{
"StatusCode": 200,
"ExecutedVersion": "$LATEST"
}
C:\Users\hamasho\Downloads>type test
{"statusCode": 200, "body": "\"Look at the log!\""}
オプションを変更して、実行ログを標準出力に出力させてみる、Base64エンコードされていると思われる文字列が得られる。
C:\Users\hamasho\Downloads>aws lambda invoke --function-name arn:aws:lambda:ap-northeast-1:055450064556:function:run_me --log-type Tail test
{
"StatusCode": 200,
"LogResult": "U1RBUlQgUmVxdWVzdElkOiBmYzkyNmM4OS1lYjA2LTRlNjctYmU4Zi1iNWFjZDU2YmJmYTAgVmVyc2lvbjogJExBVEVTVApTSkFXU3tZb3Vfd2FzX2FibGVfdG9fYXJyaXZlX0B0X3RoZV9sYW1iZGFfZnVuY3Rpb24uLXdlbGxfZG9uZSF9CkVORCBSZXF1ZXN0SWQ6IGZjOTI2Yzg5LWViMDYtNGU2Ny1iZThmLWI1YWNkNTZiYmZhMApSRVBPUlQgUmVxdWVzdElkOiBmYzkyNmM4OS1lYjA2LTRlNjctYmU4Zi1iNWFjZDU2YmJmYTAJRHVyYXRpb246IDEuMTIgbXMJQmlsbGVkIER1cmF0aW9uOiAyIG1zCU1lbW9yeSBTaXplOiAxMjggTUIJTWF4IE1lbW9yeSBVc2VkOiA0MCBNQgkK",
"ExecutedVersion": "$LATEST"
}
LogResultをBase64デコードするとFLAG文字列が得られる。
START RequestId: fc926c89-eb06-4e67-be8f-b5acd56bbfa0 Version: $LATEST
SJAWS{You_was_able_to_arrive_@t_the_lambda_function.-well_done!} ★
END RequestId: fc926c89-eb06-4e67-be8f-b5acd56bbfa0
REPORT RequestId: fc926c89-eb06-4e67-be8f-b5acd56bbfa0 Duration: 1.12 ms Billed Duration: 2 ms Memory Size: 128 MB Max Memory Used: 40 MB
FLAG : SJAWS{You_was_able_to_arrive_@t_the_lambda_function.-well_done!}
Find data 1 (50pt)
FLAGはバケツに突っ込んであるので探してね!
バケツ = S3バケットと思われる。AWSアカウントの情報が与えられるので、コンソールにアクセスしてS3バケットを確認する。
himituno-bucket1を確認すると、 FLAG
というファイルが格納されている。
格納されているFLAGをダウンロードして中身を確認するとFLAG文字列が記載されていた。
FLAG : SJAWS{mazuha-kote-sh1rabe_yokumitukemasitane!}
Find data 2 (50pt)
FLAGはバケツに突っ込んであるので探してね!
Find data 2と同様に、S3バケットからFLAGを探す問題と推測する。
今度はコンソール画面にはアクセスできないため、AWS CLIからS3バケットの中身を調査する。aws s3 lsコマンドを使ってバケット一覧を取得し、それぞれ中身を閲覧可能か確認する。
himituno-bucket2バケットは閲覧可能で、その配下にSECRETというディレクトリがある。
C:\Users\hamasho\Downloads>aws s3 ls
2023-08-13 23:13:07 backup-37szjp8pny7xx01
2023-08-26 22:43:13 camouflagedrop-wxhqft4lqf-assets-wxhqft4lqf-assets
2023-08-26 22:39:22 camouflagedrop-wxhqft4lqf-web-wxhqft4lqf-static
2023-08-22 20:16:14 cdk-hnb659fds-assets-055450064556-ap-northeast-1
2023-08-25 03:05:46 file-storage-afeffefespntbaiw7o5
2023-08-06 21:55:59 himituno-bucket1
2023-08-06 21:58:33 himituno-bucket2
2023-08-06 23:08:46 himituno-bucket3
2023-08-27 02:41:30 my-backup-file-ulxmhiw3jroec7sclynr06fkvhqssf
2023-08-22 20:56:47 s3misssignurl-t6j4qj4r-assets-t6j4qj4r-assets-bucket
2023-08-22 20:52:31 s3misssignurl-t6j4qj4r-web-t6j4qj4r-static-host-bucket
2023-08-24 04:24:09 totemo-kawaii-neko-no-namae-ha-lise-desu
2023-08-27 01:18:59 ulxmhiw3jroec7sclynr06fkvhqssf
C:\Users\hamasho\Downloads>aws s3 ls s3://backup-37szjp8pny7xx01
An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied
C:\Users\hamasho\Downloads>aws s3 ls s3://camouflagedrop-wxhqft4lqf-assets-wxhqft4lqf-assets
An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied
C:\Users\hamasho\Downloads>aws s3 ls s3://camouflagedrop-wxhqft4lqf-web-wxhqft4lqf-static
An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied
C:\Users\hamasho\Downloads>aws s3 ls s3://cdk-hnb659fds-assets-055450064556-ap-northeast-1
An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied
C:\Users\hamasho\Downloads>aws s3 ls s3://file-storage-afeffefespntbaiw7o5
An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied
C:\Users\hamasho\Downloads>aws s3 ls s3://himituno-bucket1
An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied
C:\Users\hamasho\Downloads>aws s3 ls s3://himituno-bucket2
PRE SECRET/
C:\Users\hamasho\Downloads>aws s3 ls s3://himituno-bucket3
An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied
C:\Users\hamasho\Downloads>aws s3 ls s3://my-backup-file-ulxmhiw3jroec7sclynr06fkvhqssf
An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied
C:\Users\hamasho\Downloads>aws s3 ls s3://s3misssignurl-t6j4qj4r-assets-t6j4qj4r-assets-bucket
An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied
C:\Users\hamasho\Downloads>aws s3 ls s3://s3misssignurl-t6j4qj4r-web-t6j4qj4r-static-host-bucket
An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied
C:\Users\hamasho\Downloads>aws s3 ls s3://totemo-kawaii-neko-no-namae-ha-lise-desu
An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied
C:\Users\hamasho\Downloads>aws s3 ls s3://ulxmhiw3jroec7sclynr06fkvhqssf
An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied
更にその下には大量のディレクトリと大量のflag.jpgというファイルが存在する。
C:\Users\hamasho\Downloads> aws s3 ls --recursive s3://himituno-bucket2/SECRET/
2023-08-06 22:03:43 62896 SECRET/1/flag.jpg
2023-08-06 22:03:43 62896 SECRET/10/flag.jpg
2023-08-06 22:03:44 62896 SECRET/100/flag.jpg
2023-08-06 22:03:44 62896 SECRET/1000/flag.jpg
2023-08-06 22:03:45 62896 SECRET/101/flag.jpg
2023-08-06 22:03:45 62896 SECRET/102/flag.jpg
2023-08-06 22:03:45 62896 SECRET/103/flag.jpg
2023-08-06 22:03:46 62896 SECRET/104/flag.jpg
2023-08-06 22:03:46 62896 SECRET/105/flag.jpg
(以下略)
C:\Users\hamasho\Downloads>aws s3 cp s3://himituno-bucket2/SECRET/ ./ --recursive
(以下略)
flag.jpgを全部ダウンロードして目grepしていくと、他と異なるファイルが見つかった。正解の画像ファイルにFLAG文字列が記載されていた。
FLAG : SJAWS{t@1hen-yoku_mitukemasita!}
Show IAM policy (50pt)
このユーザーにアタッチされているポリシーを確認してみよう!Policyドキュメントを注意深くみたらFLAGが隠れているかも。
競技時間内にギリギリ解けなかった問題。
IAMユーザのアクセスキーとシークレットアクセスキーが提供される。AWS CLI(aws sts get-caller-identityコマンド)を使用してユーザ情報を確認する。ユーザ名はctf_challenge_5となっている。
C:\Users\hamasho\Downloads>aws configure
AWS Access Key ID [****************STUF]:
AWS Secret Access Key [****************eJbG]:
Default region name [ap-northeast-1]:
Default output format [None]:
C:\Users\hamasho\Downloads>aws sts get-caller-identity
{
"UserId": "AIDAQZ2IU22WGWQKEMXU3",
"Account": "055450064556",
"Arn": "arn:aws:iam::055450064556:user/ctf_challenge_5"
}
IAMユーザに紐付くポリシーの情報は得られなかったので、IAMユーザが所属するグループを確認してみる。ctf_challenge_5ユーザはctf5グループに所属している。
C:\Users\hamasho\Downloads>aws iam list-groups-for-user --user-name ctf_challenge_5 --query "Groups[].GroupName"
{
"Groups": [
{
"Path": "/",
"GroupName": "ctf5",
"GroupId": "AGPAQZ2IU22WHDOHFQVUC",
"Arn": "arn:aws:iam::055450064556:group/ctf5", ★
"CreateDate": "2023-08-06T14:48:22+00:00"
}
]
}
aws iam list-group-policiesコマンドでctf5グループのインラインポリシーを取得すると、selfcheckというインラインポリシーが存在していた。
C:\Users\hamasho\Downloads>aws iam list-group-policies --group-name ctf5
{
"PolicyNames": [
"selfcheck"
]
}
aws iam get-group-policyコマンドでインラインポリシーの詳細を確認する。
C:\Users\hamasho\Downloads>aws iam get-group-policy --group-name ctf5 --policy-name selfcheck
{
"GroupName": "ctf5",
"PolicyName": "selfcheck",
"PolicyDocument": {
"Version": "2012-10-17",
"Statement": {
"Sid": "U0pBV1N7RG9feW91LWZpbmRfdGhlX0B0dGFjaGVkX3AwbDFjeT99",
"Effect": "Allow",
"Action": [
"iam:Get*",
"iam:List*"
],
"Resource": [
"arn:aws:iam::055450064556:group/ctf5",
"arn:aws:iam::055450064556:user/ctf_challenge_5"
]
}
}
}
Sidにセットされている文字列("U0pBV1N7RG9feW91LWZpbmRfdGhlX0B0dGFjaGVkX3AwbDFjeT99")をBase64デコードするとFLAGが得られる。
FLAG : SJAWS{Do_you-find_the_@ttached_p0l1cy?}
Where is the password? (50pt)
「AWSのとあるサービスからパスワードを取得してください! ヒント:AWSで安全にパスワード管理をしたい時に利用するサービスと言えば?」
パスワードの値を探せばFLAGが見つかるかも。
AWSで安全にパスワード管理をしたい時に利用するサービスというヒントがあるため、AWSコンソールからAWS Secrets Managerを確認する。
ctf/secretpasswordを確認すると、シークレットの値がFLAG文字列となっていた。
FLAG : SJAWS{Use_Secrets_Manager_for_P@ssw0rd_Management!}
Easy問題
Find data 3 (100pt)
FLAGはバケツに突っ込んであるので探してね!
s3 lsコマンドを各S3バケットに対して実行する。himituno-bucket3は閲覧権限がありそう。
C:\Users\hamasho\Downloads>aws s3 ls s3://backup-37szjp8pny7xx01
An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied
C:\Users\hamasho\Downloads>aws s3 ls s3://camouflagedrop-wxhqft4lqf-assets-wxhqft4lqf-assets
An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied
C:\Users\hamasho\Downloads>aws s3 ls s3://camouflagedrop-wxhqft4lqf-web-wxhqft4lqf-static
An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied
C:\Users\hamasho\Downloads>aws s3 ls s3://cdk-hnb659fds-assets-055450064556-ap-northeast-1
An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied
C:\Users\hamasho\Downloads>aws s3 ls s3://file-storage-afeffefespntbaiw7o5
An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied
C:\Users\hamasho\Downloads>aws s3 ls s3://himituno-bucket1
An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied
C:\Users\hamasho\Downloads>aws s3 ls s3://himituno-bucket2
An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied
C:\Users\hamasho\Downloads>aws s3 ls s3://himituno-bucket3
2023-08-06 23:11:05 89 readme.txt
C:\Users\hamasho\Downloads>aws s3 ls s3://my-backup-file-ulxmhiw3jroec7sclynr06fkvhqssf
An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied
C:\Users\hamasho\Downloads>aws s3 ls s3://s3misssignurl-t6j4qj4r-assets-t6j4qj4r-assets-bucket
An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied
C:\Users\hamasho\Downloads>aws s3 ls s3://s3misssignurl-t6j4qj4r-web-t6j4qj4r-static-host-bucket
An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied
C:\Users\hamasho\Downloads>aws s3 ls s3://totemo-kawaii-neko-no-namae-ha-lise-desu
An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied
C:\Users\hamasho\Downloads>aws s3 ls s3://ulxmhiw3jroec7sclynr06fkvhqssf
An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied
readme.txtをダウンロードして中身を確認する。FLAGが入ったファイルは削除されている?
C:\Users\hamasho\Downloads>aws s3 cp s3://himituno-bucket3/readme.txt ./
download: s3://himituno-bucket3/readme.txt to .\readme.txt
C:\Users\hamasho\Downloads>type readme.txt
It was pointed out that placing sensitive data on S3 is not recommended, so I removed it.
オブジェクト情報の一覧を表示する。readme.txt以外に SECRET_DATA というファイルが存在していたようだが、DeleteMarkersがTrueになっており、削除済み状態の状態になっているようだった。
C:\Users\hamasho\Downloads>aws s3api list-object-versions --bucket himituno-bucket3
{
"Versions": [
{
"ETag": "\"c9f27b84582adb55f13c221fcb6a98c2\"",
"Size": 34,
"StorageClass": "STANDARD",
"Key": "SECRET_DATA", ★
"VersionId": "MO4Xz6sB8DONDjCid6ideiRgfdyywcSv", ★
"IsLatest": false,
"LastModified": "2023-08-06T14:09:57+00:00",
"Owner": {
"DisplayName": "metal.preacher.667+secjawsctf02",
"ID": "fc0f5cd79b017dfe728d64cc204668f1627550263b144a54ae6c2074446d2f59"
}
},
{
"ETag": "\"5a60a9f41ca16805b78555e750446f4f\"",
"Size": 89,
"StorageClass": "STANDARD",
"Key": "readme.txt",
"VersionId": "C5Liv01TTxQDidoi3Uhs2NJuBkFCPCQI",
"IsLatest": true,
"LastModified": "2023-08-06T14:11:05+00:00",
"Owner": {
"DisplayName": "metal.preacher.667+secjawsctf02",
"ID": "fc0f5cd79b017dfe728d64cc204668f1627550263b144a54ae6c2074446d2f59"
}
}
],
"DeleteMarkers": [
{
"Owner": {
"DisplayName": "metal.preacher.667+secjawsctf02",
"ID": "fc0f5cd79b017dfe728d64cc204668f1627550263b144a54ae6c2074446d2f59"
},
"Key": "SECRET_DATA",
"VersionId": "RNzJqEkR36thowt.ug5SxaGYT18yckYP",
"IsLatest": true,
"LastModified": "2023-08-06T14:10:21+00:00"
}
],
"RequestCharged": null
}
削除済みオブジェクトのKey(ファイル名)とVersionIdが確認できたので、aws s3api get-objectコマンドで当該オブジェクトをローカル環境にダウンロードしてみる。ダウンロードした SECRET_DATA の中にFLAGが記載されていた。
C:\Users\hamasho\Downloads>aws s3api get-object --bucket himituno-bucket3 --key SECRET_DATA --version-id MO4Xz6sB8DONDjCid6ideiRgfdyywcSv ./SECRET_DATA
{
"AcceptRanges": "bytes",
"LastModified": "2023-08-06T14:09:57+00:00",
"ContentLength": 34,
"ETag": "\"c9f27b84582adb55f13c221fcb6a98c2\"",
"VersionId": "MO4Xz6sB8DONDjCid6ideiRgfdyywcSv",
"ContentType": "binary/octet-stream",
"ServerSideEncryption": "AES256",
"Metadata": {}
}
C:\Users\hamasho\Downloads>type SECRET_DATA
SJAWS{Versi0ning_ni_kizukim@sita?} ★
FLAG : SJAWS{Versi0ning_ni_kizukim@sita?}
Discussion