AWS - S3 Unauthenticated Enum

htARTE (HackTricks AWS Red Team 전문가)를 통해 **제로**부터 **히어로**까지 AWS 해킹을 배우세요!

HackTricks를 지원하는 다른 방법:

S3 공개 버킷

**“공개”**로 간주되는 버킷은 어떤 사용자도 버킷의 내용을 목록화할 수 있고, 버킷의 내용이 특정 사용자에 의해목록화 또는 작성될 수 있는 경우 **“비공개”**로 간주됩니다.

회사들은 버킷 권한을 잘못 구성하여 모든 것이나 AWS에 인증된 모든 사용자(따라서 누구에게나)에게 액세스 권한을 부여할 수 있습니다. 이러한 잘못된 구성으로 인해 일부 작업을 수행할 수 없을 수도 있습니다. 왜냐하면 버킷에는 고유한 액세스 제어 목록(ACL)이 있을 수 있기 때문입니다.

AWS-S3 구성 오류에 대해 알아보세요: http://flaws.cloudhttp://flaws2.cloud/

AWS 버킷 찾기

웹페이지가 AWS를 사용하여 일부 리소스를 저장하는지 확인하는 다양한 방법:

열거 및 OSINT:

  • wappalyzer 브라우저 플러그인 사용

  • burp를 사용하여 (웹을 스파이더링하거나 페이지를 수동으로 탐색하면 모든 로드된 리소스History에 저장됨)

  • 도메인에서 리소스를 확인:

http://s3.amazonaws.com/[bucket_name]/
http://[bucket_name].s3.amazonaws.com/
  • resources.domain.com과 같은 CNAME을 가진 bucket.s3.amazonaws.com과 같은 도메인에서 확인

  • 이미 발견된 공개 버킷을 보유한 https://buckets.grayhatwarfare.com 확인

  • 버킷 이름버킷 도메인 이름동일해야 함

  • flaws.cloudIP 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/을 방문할 수도 있습니다.

브루트포스

회사와 관련된 이름을 브루트포스하여 버킷을 찾을 수 있습니다:

# 순열을 생성하기 위한 단어 목록 생성
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

# 테스트할 도메인 및 서브도메인을 기반으로 단어 목록 생성
## 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

# 공격할 도메인 및 서브도메인 목록을 사용하여 순열 생성
goaltdns -l /tmp/words-hosts-s3.txt -w /tmp/words-s3.txt -o /tmp/final-words-s3.txt.temp
## 이전 도구는 서브도메인에 대한 순열을 생성하는 데 특화되어 있으므로 해당 목록을 필터링합니다
<strong>### "."로 끝나는 줄 제거
</strong>cat /tmp/final-words-s3.txt.temp | grep -Ev "\.$" > /tmp/final-words-s3.txt.temp2
### TLD 없는 목록 생성
cat /tmp/final-words-s3.txt.temp2 | sed -E 's/\.[a-zA-Z0-9]+$//' > /tmp/final-words-s3.txt.temp3
### 점 없는 목록 생성
cat /tmp/final-words-s3.txt.temp3 | tr -d "." > /tmp/final-words-s3.txt.temp4http://phantom.s3.amazonaws.com/
### 하이픈 없는 목록 생성
cat /tmp/final-words-s3.txt.temp3 | tr "." "-" > /tmp/final-words-s3.txt.temp5

## 최종 단어 목록 생성
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

s3scanner 호출

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

S3 버킷 획득

S3 오픈 버킷이 주어지면 BucketLoot은 자동으로 흥미로운 정보를 탐색할 수 있습니다.

지역 찾기

AWS에서 지원하는 모든 지역을 https://docs.aws.amazon.com/general/latest/gr/s3.html에서 찾을 수 있습니다.

DNS를 통해

dig 및 **nslookup**을 사용하여 발견된 IP의 DNS 요청으로 버킷의 지역을 얻을 수 있습니다:

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을 입력할 수 있습니다. 비공개 버킷은 "액세스 거부"로 응답하고, 공개 버킷은 저장된 첫 1,000개의 객체를 나열합니다.

모두에게 열려 있음:

비공개:

또한 cli로도 이를 확인할 수 있습니다:

#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

공개 버킷에서 계정 ID 가져오기

새로운 S3:ResourceAccount 정책 조건 키를 활용하여 AWS 계정을 확인하는 것이 가능합니다. 이 조건은 계정이 속한 S3 버킷을 기반으로 액세스를 제한합니다 (다른 계정 기반 정책은 요청하는 주체가 속한 계정을 기반으로 제한합니다). 그리고 정책에 와일드카드를 포함할 수 있기 때문에 계정 번호를 한 번에 한 숫자씩 찾을 수 있습니다.

이 도구는 이 프로세스를 자동화합니다:

# 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 URL, Lambda URL, Data Exchange 데이터 세트 및 심지어 태그 값(태그 키를 알고 있는 경우)을 얻는 데에도 작동합니다. 더 많은 정보는 원본 연구 및 이 취약점을 자동화하는 도구 conditional-love에서 찾을 수 있습니다.

참고 자료

htARTE (HackTricks AWS Red Team Expert)를 통해 제로부터 AWS 해킹을 전문가로 배우세요

HackTricks를 지원하는 다른 방법:

最終更新