AWS - S3 Unauthenticated Enum
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ένα bucket θεωρείται “δημόσιο” αν οποιοσδήποτε χρήστης μπορεί να καταγράψει το περιεχόμενο του bucket, και “ιδιωτικό” αν το περιεχόμενο του bucket μπορεί να καταγραφεί ή να γραφτεί μόνο από ορισμένους χρήστες.
Οι εταιρείες μπορεί να έχουν λανθασμένα ρυθμισμένα δικαιώματα buckets που δίνουν πρόσβαση είτε σε όλα είτε σε όλους τους πιστοποιημένους χρήστες στο AWS σε οποιονδήποτε λογαριασμό (δηλαδή σε οποιονδήποτε). Σημειώστε ότι ακόμη και με τέτοιες λανθασμένες ρυθμίσεις, ορισμένες ενέργειες μπορεί να μην είναι δυνατές καθώς τα buckets μπορεί να έχουν τις δικές τους λίστες ελέγχου πρόσβασης (ACLs).
Μάθετε για τις λανθασμένες ρυθμίσεις AWS-S3 εδώ: http://flaws.cloud και http://flaws2.cloud/
Διαφορετικές μέθοδοι για να βρείτε πότε μια ιστοσελίδα χρησιμοποιεί AWS για την αποθήκευση ορισμένων πόρων:
Χρησιμοποιώντας το wappalyzer πρόσθετο του προγράμματος περιήγησης
Χρησιμοποιώντας burp (spidering του ιστού) ή πλοηγώντας χειροκίνητα μέσω της σελίδας, όλοι οι πόροι που φορτώνονται θα αποθηκευτούν στην Ιστορία.
Ελέγξτε για πόρους σε τομείς όπως:
Ελέγξτε για CNAMES καθώς το resources.domain.com
μπορεί να έχει το CNAME bucket.s3.amazonaws.com
Ελέγξτε https://buckets.grayhatwarfare.com, μια ιστοσελίδα με ήδη ανακαλυμμένα ανοιχτά buckets.
Το όνομα bucket και το όνομα τομέα bucket πρέπει να είναι τα ίδια.
flaws.cloud είναι σε IP 52.92.181.107 και αν πάτε εκεί σας ανακατευθύνει στο https://aws.amazon.com/s3/. Επίσης, dig -x 52.92.181.107
δίνει s3-website-us-west-2.amazonaws.com
.
Για να ελέγξετε αν είναι bucket μπορείτε επίσης να επισκεφθείτε https://flaws.cloud.s3.amazonaws.com/.
Μπορείτε να βρείτε buckets δοκιμάζοντας ονόματα που σχετίζονται με την εταιρεία που κάνετε pentesting:
https://github.com/jordanpotti/AWSBucketDump (Περιέχει μια λίστα με πιθανά ονόματα buckets)
Δεδομένων των ανοιχτών buckets S3, BucketLoot μπορεί αυτόματα να αναζητήσει ενδιαφέροντα πληροφορίες.
Μπορείτε να βρείτε όλες τις υποστηριζόμενες περιοχές από το AWS στο https://docs.aws.amazon.com/general/latest/gr/s3.html
Μπορείτε να βρείτε την περιοχή ενός bucket με ένα dig
και nslookup
κάνοντας ένα DNS αίτημα της ανακαλυφθείσας IP:
Ελέγξτε ότι το αναγνωρισμένο domain έχει τη λέξη "website".
Μπορείτε να αποκτήσετε πρόσβαση στον στατικό ιστότοπο πηγαίνοντας στο: flaws.cloud.s3-website-us-west-2.amazonaws.com
ή μπορείτε να αποκτήσετε πρόσβαση στον κάδο επισκεπτόμενοι: flaws.cloud.s3-us-west-2.amazonaws.com
Αν προσπαθήσετε να αποκτήσετε πρόσβαση σε έναν κάδο, αλλά στο όνομα τομέα καθορίσετε άλλη περιοχή (για παράδειγμα ο κάδος είναι στο bucket.s3.amazonaws.com
αλλά προσπαθείτε να αποκτήσετε πρόσβαση στο bucket.s3-website-us-west-2.amazonaws.com
, τότε θα σας υποδειχθεί η σωστή τοποθεσία:
Για να δοκιμάσετε την ανοιχτότητα του κάδου, ένας χρήστης μπορεί απλά να εισάγει το URL στον περιηγητή του. Ένας ιδιωτικός κάδος θα απαντήσει με "Access Denied". Ένας δημόσιος κάδος θα καταγράψει τα πρώτα 1,000 αντικείμενα που έχουν αποθηκευτεί.
Ανοιχτό σε όλους:
Ιδιωτικό:
Μπορείτε επίσης να το ελέγξετε αυτό με το cli:
Αν ο κάδος δεν έχει όνομα τομέα, όταν προσπαθείτε να τον καταγράψετε, βάλτε μόνο το όνομα του κάδου και όχι ολόκληρο το τομέα AWSs3. Παράδειγμα: s3://<BUCKETNAME>
Είναι δυνατόν να προσδιορίσετε έναν λογαριασμό AWS εκμεταλλευόμενοι το νέο S3:ResourceAccount
Policy Condition Key. Αυτή η συνθήκη περιορίζει την πρόσβαση με βάση το S3 bucket στο οποίο βρίσκεται ένας λογαριασμός (άλλες πολιτικές που βασίζονται σε λογαριασμούς περιορίζουν με βάση τον λογαριασμό στον οποίο βρίσκεται ο αιτών).
Και επειδή η πολιτική μπορεί να περιέχει wildcards, είναι δυνατόν να βρείτε τον αριθμό του λογαριασμού μόνο έναν αριθμό τη φορά.
Αυτό το εργαλείο αυτοματοποιεί τη διαδικασία:
Αυτή η τεχνική λειτουργεί επίσης με URLs API Gateway, URLs Lambda, σύνολα δεδομένων Data Exchange και ακόμη και για να αποκτήσετε την τιμή των ετικετών (αν γνωρίζετε το κλειδί της ετικέτας). Μπορείτε να βρείτε περισσότερες πληροφορίες στην αρχική έρευνα και το εργαλείο conditional-love για να αυτοματοποιήσετε αυτή την εκμετάλλευση.
Όπως εξηγείται σε αυτή την ανάρτηση στο blog, αν έχετε άδειες για να καταγράψετε ένα bucket είναι δυνατόν να επιβεβαιώσετε ένα accountID στο οποίο ανήκει το bucket στέλνοντας ένα αίτημα όπως:
Αν το σφάλμα είναι “Access Denied” σημαίνει ότι το ID του λογαριασμού ήταν λάθος.
Όπως εξηγείται σε αυτή την ανάρτηση στο blog, είναι δυνατόν να ελέγξετε αν μια διεύθυνση email σχετίζεται με οποιονδήποτε λογαριασμό AWS προσπαθώντας να παραχωρήσετε άδειες σε μια διεύθυνση email μέσω ACLs σε ένα S3 bucket. Αν αυτό δεν προκαλέσει σφάλμα, σημαίνει ότι το email είναι χρήστης root κάποιου λογαριασμού AWS:
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)