AWS - S3 Unauthenticated Enum
Last updated
Last updated
AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE) GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)
버킷은 **“공개”**로 간주되며, 모든 사용자가 버킷의 내용을 나열할 수 있는 경우, **“비공개”**로 간주되며, 버킷의 내용은 특정 사용자만 나열하거나 쓸 수 있는 경우입니다.
회사는 버킷 권한이 잘못 구성되어 모든 것 또는 AWS의 모든 계정에 인증된 모든 사용자에게 접근을 허용할 수 있습니다(즉, 누구에게나). 이러한 잘못된 구성에서도 일부 작업은 수행할 수 없을 수 있으며, 버킷은 자체 접근 제어 목록(ACL)을 가질 수 있습니다.
AWS-S3 잘못된 구성에 대해 알아보세요: http://flaws.cloud 및 http://flaws2.cloud/
웹페이지가 AWS를 사용하여 일부 리소스를 저장할 때 찾는 다양한 방법:
wappalyzer 브라우저 플러그인 사용
burp 사용(웹 스파이더링) 또는 페이지를 수동으로 탐색하여 모든 로드된 리소스가 기록에 저장됩니다.
리소스 확인 도메인에서:
CNAMES 확인, resources.domain.com
은 CNAME bucket.s3.amazonaws.com
을 가질 수 있습니다.
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/를 방문할 수도 있습니다.
회사를 대상으로 이름을 무차별 대입하여 버킷을 찾을 수 있습니다:
https://github.com/jordanpotti/AWSBucketDump (잠재적인 버킷 이름 목록 포함)
S3 공개 버킷이 주어지면, BucketLoot는 자동으로 흥미로운 정보를 검색할 수 있습니다.
AWS에서 지원하는 모든 지역은 https://docs.aws.amazon.com/general/latest/gr/s3.html에서 확인할 수 있습니다.
dig
및 **nslookup
**을 사용하여 발견된 IP의 DNS 요청을 수행하여 버킷의 지역을 확인할 수 있습니다:
해결된 도메인에 "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
정책 조건 키를 이용하여 가능합니다. 이 조건은 계정이 있는 S3 버킷을 기준으로 접근을 제한합니다 (다른 계정 기반 정책은 요청하는 주체가 있는 계정을 기준으로 제한합니다).
정책에 와일드카드가 포함될 수 있기 때문에 한 번에 하나의 숫자로 계정 번호를 찾는 것이 가능합니다.
이 도구는 이 과정을 자동화합니다:
이 기술은 API Gateway URL, Lambda URL, Data Exchange 데이터 세트와 태그 값을 가져오는 데에도 작동합니다(태그 키를 알고 있는 경우). 더 많은 정보는 원본 연구와 이 취약점을 자동화하는 도구 conditional-love에서 찾을 수 있습니다.
이 블로그 게시물에서 설명한 바와 같이, 버킷을 나열할 수 있는 권한이 있는 경우 요청을 보내어 버킷이 속한 accountID를 확인할 수 있습니다:
If the error is an “Access Denied” it means that the account ID was wrong.
As explained in this blog post, it's possible to check if an email address is related to any AWS account by trying to grant an email permissions over a S3 bucket via ACLs. If this doesn't trigger an error, it means that the email is a root user of some AWS account:
AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE) GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)