AWS - S3, Athena & Glacier Enum
Tip
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die š¬ Discord groep of die telegram groep of volg ons op Twitter š¦ @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
S3
Amazon S3 is ān diens wat jou toelaat om groot hoeveelhede data te stoor.
Amazon S3 bied verskeie opsies om die beskerming van data in REST te bereik. Die opsies sluit Toestemming (Beleid), Enkripsie (KliĆ«nt en Bediener-kant), Emmerweergawe en MFA gebaseerde verwydering in. Die gebruiker kan enige van hierdie opsies aktiveer om databesking te bereik. Data-replikaasie is ān interne fasiliteit deur AWS waar S3 outomaties elke objek oor al die Beschikbaarheidsgebiede repliseer en die organisasie hoef dit nie in hierdie geval te aktiveer nie.
Met hulpbron-gebaseerde toestemmings kan jy toestemmings vir sub-gidse van jou emmer apart definieer.
Emmerweergawe en MFA gebaseerde verwydering
Wanneer emmerweergawe geaktiveer is, sal enige aksie wat probeer om ān lĆŖer binne ān lĆŖer te verander ān nuwe weergawe van die lĆŖer genereer, terwyl die vorige inhoud van dieselfde ook behou word. Daarom sal dit nie sy inhoud oorskryf nie.
Boonop sal MFA gebaseerde verwydering verhinder dat weergawes van lĆŖers in die S3-emmer verwyder word en ook dat Emmerweergawe gedeaktiveer word, sodat ān aanvaller nie in staat sal wees om hierdie lĆŖers te verander nie.
S3 Toegang logs
Dit is moontlik om S3 toegang aan te dui (wat standaard gedeaktiveer is) vir ān emmer en die logs in ān ander emmer te stoor om te weet wie die emmer toegang (albei emmers moet in dieselfde streek wees).
S3 Presigned URLās
Dit is moontlik om ān presigned URL te genereer wat gewoonlik gebruik kan word om toegang te verkry tot die gespesifiseerde lĆŖer in die emmer. ān presigned URL lyk soos volg:
https://<bucket-name>.s3.us-east-1.amazonaws.com/asd.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ASIAUUE8GZC4S5L3TY3P%2F20230227%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20230227T142551Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Security-Token=IQoJb3JpZ2luX2VjELf%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLWVhc3QtMSJHMEUCIBhQpdETJO3HKKDk2hjNIrPWwBE8gZaQccZFV3kCpPCWAiEAid3ueDtFFU%2FOQfUpvxYTGO%2BHoS4SWDMUrQAE0pIaB40qggMIYBAAGgwzMTgxNDIxMzg1NTMiDJLI5t7gr2EGxG1Y5CrfAioW0foHIQ074y4gvk0c%2B%2Fmqc7cNWb1njQslQkeePHkseJ3owzc%2FCwkgE0EuZTd4mw0aJciA2XIbJRCLPWTb%2FCBKPnIMJ5aBzIiA2ltsiUNQTTUxYmEgXZoJ6rFYgcodnmWW0Et4Xw59UlHnCDB2bLImxPprriyCzDDCD6nLyp3J8pFF1S8h3ZTJE7XguA8joMs4%2B2B1%2FeOZfuxXKyXPYSKQOOSbQiHUQc%2BFnOfwxleRL16prWk1t7TamvHR%2Bt3UgMn5QWzB3p8FgWwpJ6GjHLkYMJZ379tkimL1tJ7o%2BIod%2FMYrS7LDCifP9d%2FuYOhKWGhaakPuJKJh9fl%2B0vGl7kmApXigROxEWon6ms75laXebltsWwKcKuYca%2BUWu4jVJx%2BWUfI4ofoaGiCSaKALTqwu4QNBRT%2BMoK6h%2BQa7gN7JFGg322lkxRY53x27WMbUE4unn5EmI54T4dWt1%2Bg8ljDS%2BvKfBjqmAWRwuqyfwXa5YC3xxttOr3YVvR6%2BaXpzWtvNJQNnb6v0uI3%2BTtTexZkJpLQYqFcgZLQSxsXWSnf988qvASCIUhAzp2UnS1uqy7QjtD5T73zksYN2aesll7rvB80qIuujG6NOdHnRJ2M5%2FKXXNo1Yd15MtzPuSjRoSB9RSMon5jFu31OrQnA9eCUoawxbB0nHqwK8a43CKBZHhA8RoUAJW%2B48EuFsp3U%3D&X-Amz-Signature=3436e4139e84dbcf5e2e6086c0ebc92f4e1e9332b6fda24697bc339acbf2cdfa
ān Voorafondertekende URL kan uit die cli geskep word met die kredensiale van ān hoofpersoon met toegang tot die objek (as die rekening wat jy gebruik nie toegang het nie, sal ān korter voorafondertekende URL geskep word, maar dit sal nutteloos wees)
aws s3 presign --region <bucket-region> 's3://<bucket-name>/<file-name>'
Note
Die enigste vereiste toestemming om ān voorafondertekende URL te genereer, is die toestemming wat gegee word, so vir die vorige opdrag is die enigste toestemming wat die hoofpersoon nodig het
s3:GetObject
Dit is ook moontlik om voorafondertekende URLās te skep met ander toestemmings:
import boto3
url = boto3.client('s3').generate_presigned_url(
ClientMethod='put_object',
Params={'Bucket': 'BUCKET_NAME', 'Key': 'OBJECT_KEY'},
ExpiresIn=3600
)
S3 Enkripsiemeganismes
DEK beteken Data Enkripsiesleutel en is die sleutel wat altyd gegenereer word en gebruik word om data te enkripteer.
Bediener-kant enkripsie met S3 bestuurde sleutels, SSE-S3
Hierdie opsie vereis minimale konfigurasie en al die bestuur van enkripsiesleutels wat gebruik word, word deur AWS bestuur. Al wat jy hoef te doen is om jou data te laai en S3 sal al die ander aspekte hanteer. Elke emmer in ān S3-rekening word aan ān emmersleutel toegeken.
- Enkripsie:
- Objektdata + geskepte platte DEK ā> GeĆ«nkripteerde data (gestoor binne S3)
- Geskepte platte DEK + S3 Meestersleutel ā> GeĆ«nkripteerde DEK (gestoor binne S3) en platte teks word uit geheue verwyder
- Dekripsie:
- GeĆ«nkripteerde DEK + S3 Meestersleutel ā> Platte DEK
- Platte DEK + GeĆ«nkripteerde data ā> Objektdata
Neem asseblief kennis dat in hierdie geval die sleutel deur AWS bestuur word (rotasie slegs elke 3 jaar). As jy jou eie sleutel gebruik, sal jy in staat wees om te roteer, te deaktiveer en toegangbeheer toe te pas.
Bediener-kant enkripsie met KMS bestuurde sleutels, SSE-KMS
Hierdie metode laat S3 toe om die sleutelbestuursdiens te gebruik om jou data-enkripsiesleutels te genereer. KMS bied jou ān baie groter buigsaamheid oor hoe jou sleutels bestuur word. Byvoorbeeld, jy kan die CMK deaktiveer, roteer en toegangbeheer toepas, en bestellings teen hul gebruik met AWS Cloud Trail.
- Enkripsie:
- S3 versoek data sleutels van KMS CMK
- KMS gebruik ān CMK om die paar DEK platte teks en DEK geĆ«nkripteerd te genereer en stuur dit na S3
- S3 gebruik die platte sleutel om die data te enkripteer, stoor die geƫnkripteerde data en die geƫnkripteerde sleutel en verwyder die platte sleutel uit geheue
- Dekripsie:
- S3 vra KMS om die geƫnkripteerde datasleutel van die objek te dekripteer
- KMS dekripteer die datasleutel met die CMK en stuur dit terug na S3
- S3 dekripteer die objektdata
Bediener-kant enkripsie met kliƫnt verskaf sleutels, SSE-C
Hierdie opsie gee jou die geleentheid om jou eie meester sleutel te verskaf wat jy dalk reeds buite AWS gebruik. Jou kliƫnt-verskaf sleutel sal dan saam met jou data na S3 gestuur word, waar S3 dan die enkripsie vir jou sal uitvoer.
- Enkripsie:
- Die gebruiker stuur die objektdata + Kliƫntsleutel na S3
- Die kliƫntsleutel word gebruik om die data te enkripteer en die geƫnkripteerde data word gestoor
- ān Gesoute HMAC-waarde van die kliĆ«ntsleutel word ook gestoor vir toekomstige sleutelvalidasie
- die kliƫntsleutel word uit geheue verwyder
- Dekripsie:
- Die gebruiker stuur die kliƫntsleutel
- Die sleutel word gevalideer teen die gestoor HMAC-waarde
- Die kliƫnt verskaf sleutel word dan gebruik om die data te dekripteer
Kliƫnt-kant enkripsie met KMS, CSE-KMS
Soos met SSE-KMS, gebruik dit ook die sleutelbestuursdiens om jou data-enkripsiesleutels te genereer. Hierdie keer word KMS egter via die kliƫnt en nie S3 aangespreek nie. Die enkripsie vind dan kliƫnt-kant plaas en die geƫnkripteerde data word dan na S3 gestuur om gestoor te word.
- Enkripsie:
- KliĆ«nt versoek ān datasleutel van KMS
- KMS stuur die platte DEK en die geƫnkripteerde DEK met die CMK terug
- Beide sleutels word teruggestuur
- Die kliƫnt enkripteer dan die data met die platte DEK en stuur die geƫnkripteerde data + die geƫnkripteerde DEK (wat as metadata van die geƫnkripteerde data binne S3 gestoor word) na S3
- Dekripsie:
- Die geƫnkripteerde data met die geƫnkripteerde DEK word na die kliƫnt gestuur
- Die kliƫnt vra KMS om die geƫnkripteerde sleutel te dekripteer met die CMK en KMS stuur die platte DEK terug
- Die kliƫnt kan nou die geƫnkripteerde data dekripteer
Kliƫnt-kant enkripsie met kliƫnt verskaf sleutels, CSE-C
Deur hierdie meganisme te gebruik, kan jy jou eie verskaf sleutels benut en ān AWS-SDK kliĆ«nt gebruik om jou data te enkripteer voordat jy dit na S3 vir stoor stuur.
- Enkripsie:
- Die kliĆ«nt genereer ān DEK en enkripteer die platte data
- Dan, met behulp van sy eie pasgemaakte CMK, enkripteer dit die DEK
- dien die geƫnkripteerde data + geƫnkripteerde DEK aan S3 waar dit gestoor word
- Dekripsie:
- S3 stuur die geƫnkripteerde data en DEK
- Aangesien die kliƫnt reeds die CMK het wat gebruik is om die DEK te enkripteer, dekripteer dit die DEK en gebruik dan die platte DEK om die data te dekripteer
Enumerasie
Een van die tradisionele hoofmaniere om AWS-organisasies te kompromitteer, begin deur emmers wat publiek toeganklik is, te kompromitteer. Jy kan publieke emmer enumerators op hierdie bladsy vind.
# Get buckets ACLs
aws s3api get-bucket-acl --bucket <bucket-name>
aws s3api get-object-acl --bucket <bucket-name> --key flag
# Get policy
aws s3api get-bucket-policy --bucket <bucket-name>
aws s3api get-bucket-policy-status --bucket <bucket-name> #if it's public
# list S3 buckets associated with a profile
aws s3 ls
aws s3api list-buckets
# list content of bucket (no creds)
aws s3 ls s3://bucket-name --no-sign-request
aws s3 ls s3://bucket-name --recursive
# list content of bucket (with creds)
aws s3 ls s3://bucket-name
aws s3api list-objects-v2 --bucket <bucket-name>
aws s3api list-objects --bucket <bucket-name>
aws s3api list-object-versions --bucket <bucket-name>
# copy local folder to S3
aws s3 cp MyFolder s3://bucket-name --recursive
# delete
aws s3 rb s3://bucket-name ā-force
# download a whole S3 bucket
aws s3 sync s3://<bucket>/ .
# move S3 bucket to different location
aws s3 sync s3://oldbucket s3://newbucket --source-region us-west-1
# list the sizes of an S3 bucket and its contents
aws s3api list-objects --bucket BUCKETNAME --output json --query "[sum(Contents[].Size), length(Contents[])]"
# Update Bucket policy
aws s3api put-bucket-policy --policy file:///root/policy.json --bucket <bucket-name>
##JSON policy example
{
"Id": "Policy1568185116930",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1568184932403",
"Action": [
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::welcome",
"Principal": "*"
},
{
"Sid": "Stmt1568185007451",
"Action": [
"s3:GetObject"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::welcome/*",
"Principal": "*"
}
]
}
# Update bucket ACL
aws s3api get-bucket-acl --bucket <bucket-name> # Way 1 to get the ACL
aws s3api put-bucket-acl --bucket <bucket-name> --access-control-policy file://acl.json
aws s3api get-object-acl --bucket <bucket-name> --key flag #Way 2 to get the ACL
aws s3api put-object-acl --bucket <bucket-name> --key flag --access-control-policy file://objacl.json
##JSON ACL example
## Make sure to modify the Ownerās displayName and ID according to the Object ACL you retrieved.
{
"Owner": {
"DisplayName": "<DisplayName>",
"ID": "<ID>"
},
"Grants": [
{
"Grantee": {
"Type": "Group",
"URI": "http://acs.amazonaws.com/groups/global/AuthenticatedUsers"
},
"Permission": "FULL_CONTROL"
}
]
}
## An ACL should give you the permission WRITE_ACP to be able to put a new ACL
dual-stack
Jy kan toegang tot ān S3-bucket verkry deur ān dual-stack eindpunt te gebruik met ān virtuele gehoste styl of ān padstyl eindpuntnaam. Hierdie is nuttig om S3 deur IPv6 te benader.
Dual-stack eindpunte gebruik die volgende sintaksis:
bucketname.s3.dualstack.aws-region.amazonaws.coms3.dualstack.aws-region.amazonaws.com/bucketname
Privesc
In die volgende bladsy kan jy kyk hoe om S3-toestemmings te misbruik om voorregte te verhoog:
Unauthenticated Access
S3 Post Exploitation
Persistence
Other S3 vulns
S3 HTTP Cache Poisoning Issue
Volgens hierdie navorsing was dit moontlik om die antwoord van ān arbitrĆŖre bucket te kas asof dit aan ān ander behoort. Dit kon misbruik gewees het om byvoorbeeld javascript-lĆŖer-antwoorde te verander en arbitrĆŖre bladsye te kompromitteer wat S3 gebruik om statiese kode te stoor.
Amazon Athena
Amazon Athena is ān interaktiewe navraagdiens wat dit maklik maak om data direk in Amazon Simple Storage Service (Amazon S3) te analiseer met standaard SQL.
Jy moet ān relationele DB-tabel voorberei met die formaat van die inhoud wat in die gemonitorde S3-buckets gaan verskyn. En dan sal Amazon Athena in staat wees om die DB uit die logs te vul, sodat jy dit kan navraag doen.
Amazon Athena ondersteun die vermoƫ om S3-data wat reeds versleuteld is, te navraag en as dit geconfigureer is om dit te doen, kan Athena ook die resultate van die navraag versleuteld wat dan in S3 gestoor kan word.
Hierdie versleuteling van resultate is onafhanklik van die onderliggende navraag S3-data, wat beteken dat selfs al is die S3-data nie versleuteld nie, kan die navraag resultate versleuteld wees. ān Paar punte om bewus van te wees is dat Amazon Athena slegs data ondersteun wat versleuteld is met die volgende S3-versleutelingmetodes, SSE-S3, SSE-KMS, en CSE-KMS.
SSE-C en CSE-E word nie ondersteun nie. Benewens dit, is dit belangrik om te verstaan dat Amazon Athena slegs navrae teen versleutelde voorwerpe wat in dieselfde streek as die navraag self is sal uitvoer. As jy S3-data moet navraag doen wat met KMS versleuteld is, dan is spesifieke toestemmings nodig deur die Athena-gebruiker om hulle in staat te stel om die navraag uit te voer.
Enumeration
# Get catalogs
aws athena list-data-catalogs
# Get databases inside catalog
aws athena list-databases --catalog-name <catalog-name>
aws athena list-table-metadata --catalog-name <catalog-name> --database-name <db-name>
# Get query executions, queries and results
aws athena list-query-executions
aws athena get-query-execution --query-execution-id <id> # Get query and meta of results
aws athena get-query-results --query-execution-id <id> # This will rerun the query and get the results
# Get workgroups & Prepared statements
aws athena list-work-groups
aws athena list-prepared-statements --work-group <wg-name>
aws athena get-prepared-statement --statement-name <name> --work-group <wg-name>
# Run query
aws athena start-query-execution --query-string <query>
Verwysings
- https://cloudsecdocs.com/aws/defensive/tooling/cli/#s3
- https://docs.aws.amazon.com/AmazonS3/latest/userguide/dual-stack-endpoints.html
Tip
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die š¬ Discord groep of die telegram groep of volg ons op Twitter š¦ @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
HackTricks Cloud

