AWS - S3 अनधिकृत Enum

Reading time: 10 minutes

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks का समर्थन करें

S3 सार्वजनिक बकेट

एक बकेट को “सार्वजनिक” माना जाता है यदि कोई भी उपयोगकर्ता बकेट की सामग्री को सूचीबद्ध कर सकता है, और “निजी” यदि बकेट की सामग्री को केवल कुछ उपयोगकर्ताओं द्वारा सूचीबद्ध या लिखा जा सकता है

कंपनियों के पास बकेट अनुमतियाँ गलत कॉन्फ़िगर की गई हो सकती हैं जो या तो सब कुछ या AWS में किसी भी खाते में प्रमाणित सभी को पहुँच देती हैं (तो किसी को भी)। ध्यान दें, कि ऐसी गलत कॉन्फ़िगरेशन के साथ भी कुछ क्रियाएँ नहीं की जा सकती हैं क्योंकि बकेट की अपनी पहुँच नियंत्रण सूचियाँ (ACLs) हो सकती हैं।

AWS-S3 गलत कॉन्फ़िगरेशन के बारे में यहाँ जानें: http://flaws.cloud और http://flaws2.cloud/

AWS बकेट खोजने के तरीके

जब एक वेबपृष्ठ AWS का उपयोग करके कुछ संसाधनों को स्टोर कर रहा हो, तो खोजने के लिए विभिन्न तरीके:

Enumeration & OSINT:

  • wappalyzer ब्राउज़र प्लगइन का उपयोग करना
  • बर्प का उपयोग करना (वेब को स्पाइडर करना) या पृष्ठ के माध्यम से मैन्युअल रूप से नेविगेट करके सभी संसाधनों को इतिहास में सहेजना।
  • संसाधनों के लिए जाँच करें जैसे डोमेन में:
http://s3.amazonaws.com/[bucket_name]/
http://[bucket_name].s3.amazonaws.com/
  • CNAMES के लिए जाँच करें क्योंकि resources.domain.com में CNAME bucket.s3.amazonaws.com हो सकता है
  • s3dns – एक हल्का DNS सर्वर जो DNS ट्रैफ़िक का विश्लेषण करके क्लाउड स्टोरेज बकेट (S3, GCP, Azure) की पहचान करता है। यह CNAMEs का पता लगाता है, समाधान श्रृंखलाओं का पालन करता है, और बकेट पैटर्न से मेल खाता है, जो ब्रूट-फोर्स या API-आधारित खोज के लिए एक शांत विकल्प प्रदान करता है। पुनः खोज और OSINT कार्यप्रवाह के लिए आदर्श।
  • https://buckets.grayhatwarfare.com, एक वेब जो पहले से खोजे गए खुले बकेट के साथ है।
  • बकेट नाम और बकेट डोमेन नाम को एक समान होना चाहिए।
  • 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 देता है।
  • यह जाँचने के लिए कि यह एक बकेट है, आप यहाँ भी जा सकते हैं https://flaws.cloud.s3.amazonaws.com/

ब्रूट-फोर्स

आप बकेट्स को कंपनी से संबंधित नामों को ब्रूट-फोर्स करके खोज सकते हैं:

# Generate a wordlist to create permutations
curl -s https://raw.githubusercontent.com/cujanovic/goaltdns/master/words.txt > /tmp/words-s3.txt.temp
curl -s https://raw.githubusercontent.com/jordanpotti/AWSBucketDump/master/BucketNames.txt >>/tmp/words-s3.txt.temp
cat /tmp/words-s3.txt.temp | sort -u > /tmp/words-s3.txt

# Generate a wordlist based on the domains and subdomains to test
## Write those domains and subdomains in subdomains.txt
cat subdomains.txt > /tmp/words-hosts-s3.txt
cat subdomains.txt | tr "." "-" >> /tmp/words-hosts-s3.txt
cat subdomains.txt | tr "." "\n" | sort -u >> /tmp/words-hosts-s3.txt

# Create permutations based in a list with the domains and subdomains to attack
goaltdns -l /tmp/words-hosts-s3.txt -w /tmp/words-s3.txt -o /tmp/final-words-s3.txt.temp
## The previous tool is specialized increating permutations for subdomains, lets filter that list
### Remove lines ending with "."
cat /tmp/final-words-s3.txt.temp | grep -Ev "\.$" > /tmp/final-words-s3.txt.temp2
### Create list without TLD
cat /tmp/final-words-s3.txt.temp2 | sed -E 's/\.[a-zA-Z0-9]+$//' > /tmp/final-words-s3.txt.temp3
### Create list without dots
cat /tmp/final-words-s3.txt.temp3 | tr -d "." > /tmp/final-words-s3.txt.temp4http://phantom.s3.amazonaws.com/
### Create list without hyphens
cat /tmp/final-words-s3.txt.temp3 | tr "." "-" > /tmp/final-words-s3.txt.temp5

## Generate the final wordlist
cat /tmp/final-words-s3.txt.temp2 /tmp/final-words-s3.txt.temp3 /tmp/final-words-s3.txt.temp4 /tmp/final-words-s3.txt.temp5 | grep -v -- "-\." | awk '{print tolower($0)}' | sort -u > /tmp/final-words-s3.txt

## Call s3scanner
s3scanner --threads 100 scan --buckets-file /tmp/final-words-s3.txt  | grep bucket_exists

S3 बकेट्स का लूट

खुले S3 बकेट्स को देखते हुए, BucketLoot स्वचालित रूप से दिलचस्प जानकारी के लिए खोज कर सकता है

क्षेत्र खोजें

आप https://docs.aws.amazon.com/general/latest/gr/s3.html में AWS द्वारा समर्थित सभी क्षेत्रों को खोज सकते हैं।

DNS द्वारा

आप dig और nslookup का उपयोग करके एक बकेट के क्षेत्र को प्राप्त कर सकते हैं खोजे गए IP का DNS अनुरोध करके:

bash
dig flaws.cloud
;; ANSWER SECTION:
flaws.cloud.    5    IN    A    52.218.192.11

nslookup 52.218.192.11
Non-authoritative answer:
11.192.218.52.in-addr.arpa name = s3-website-us-west-2.amazonaws.com.

यह सुनिश्चित करें कि हल किया गया डोमेन "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 के साथ भी जांच सकते हैं:

bash
#Use --no-sign-request for check Everyones permissions
#Use --profile <PROFILE_NAME> to indicate the AWS profile(keys) that youwant to use: Check for "Any Authenticated AWS User" permissions
#--recursive if you want list recursivelyls
#Opcionally you can select the region if you now it
aws s3 ls s3://flaws.cloud/ [--no-sign-request] [--profile <PROFILE_NAME>] [ --recursive] [--region us-west-2]

यदि बकेट का डोमेन नाम नहीं है, तो इसे सूचीबद्ध करने का प्रयास करते समय, केवल बकेट का नाम डालें और पूरा AWSs3 डोमेन नहीं। उदाहरण: s3://<BUCKETNAME>

सार्वजनिक URL टेम्पलेट

https://{user_provided}.s3.amazonaws.com

सार्वजनिक बकेट से खाता आईडी प्राप्त करें

यह S3:ResourceAccount नीति स्थिति कुंजी का लाभ उठाकर AWS खाते को निर्धारित करना संभव है। यह स्थिति उस S3 बकेट के आधार पर पहुंच को प्रतिबंधित करती है जिसमें एक खाता है (अन्य खाता-आधारित नीतियाँ उस खाते के आधार पर प्रतिबंधित करती हैं जिसमें अनुरोध करने वाला प्रमुख है)।
और क्योंकि नीति में वाइल्डकार्ड हो सकते हैं, इसलिए खाता संख्या केवल एक संख्या में पाई जा सकती है।

यह उपकरण प्रक्रिया को स्वचालित करता है:

bash
# Installation
pipx install s3-account-search
pip install s3-account-search
# With a bucket
s3-account-search arn:aws:iam::123456789012:role/s3_read s3://my-bucket
# With an object
s3-account-search arn:aws:iam::123456789012:role/s3_read s3://my-bucket/path/to/object.ext

यह तकनीक API Gateway URLs, Lambda URLs, Data Exchange डेटा सेट और यहां तक कि टैग के मान प्राप्त करने के लिए भी काम करती है (यदि आप टैग कुंजी जानते हैं)। आप मूल शोध और इस शोषण को स्वचालित करने के लिए उपकरण conditional-love में अधिक जानकारी प्राप्त कर सकते हैं।

एक बकेट की पुष्टि करना कि यह AWS खाते से संबंधित है

जैसा कि इस ब्लॉग पोस्ट में समझाया गया है, यदि आपके पास एक बकेट को सूचीबद्ध करने की अनुमति है तो यह संभव है कि आप उस खाते की ID की पुष्टि कर सकें जिससे बकेट संबंधित है, एक अनुरोध भेजकर जैसे:

bash
curl -X GET "[bucketname].amazonaws.com/" \
-H "x-amz-expected-bucket-owner: [correct-account-id]"

<?xml version="1.0" encoding="UTF-8"?>
<ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">...</ListBucketResult>

यदि त्रुटि "Access Denied" है, तो इसका मतलब है कि खाता आईडी गलत थी।

रूट खाता enumeration के रूप में उपयोग किए गए ईमेल

जैसा कि इस ब्लॉग पोस्ट में समझाया गया है, यह जांचना संभव है कि क्या कोई ईमेल पता किसी AWS खाते से संबंधित है S3 बकेट पर ACLs के माध्यम से ईमेल को अनुमति देने की कोशिश करके। यदि यह कोई त्रुटि उत्पन्न नहीं करता है, तो इसका मतलब है कि ईमेल किसी AWS खाते का रूट उपयोगकर्ता है:

python
s3_client.put_bucket_acl(
Bucket=bucket_name,
AccessControlPolicy={
'Grants': [
{
'Grantee': {
'EmailAddress': 'some@emailtotest.com',
'Type': 'AmazonCustomerByEmail',
},
'Permission': 'READ'
},
],
'Owner': {
'DisplayName': 'Whatever',
'ID': 'c3d78ab5093a9ab8a5184de715d409c2ab5a0e2da66f08c2f6cc5c0bdeadbeef'
}
}
)

संदर्भ

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks का समर्थन करें