https://portswigger.net/web-security/ssrf/lab-ssrf-with-blacklist-filter
<문제>
This lab has a stock check feature which fetches data from an internal system.
To solve the lab, change the stock check URL to access the admin interface at http://localhost/admin and delete the user carlos.
The developer has deployed two weak anti-SSRF defenses that you will need to bypass.
<풀이>
Check stock을 클릭해보자.


stockApi값을 http://localhost/로 바꿔보자.

stockApi값을 http://127.0.0.1/로 바꿔보자.

아래와 같이 막힌다.


stockApi값을 http://127.1/로 바꿨더니

Admin panel이 보인다.

Admin panel 클릭했더니 아래와 같은 메시지가 표시되어 접근하지 못한다.


stockApi값을 http://127.1/admin으로 바꿨더니

http://127.1/의 경우와 달리, http://127.1/admin은 막히는 것으로 보아 "admin"에 대해 필터링(string search)이 적용되었다고 추론할 수 있다.

이제 이 anti-SSRF defenses를 우회하기 위해 문자열의 일부를 URL 인코딩해보자.
"admin"의 admin을 인코딩했더니 blocked.

한번 더 인코딩했더니 Users 목록이 표시된다.



이제 stockApi값을 http://127.1/%25%36%31dmin/delete?username=carlos로 바꿔 carlos를 삭제한다.
이미지 하나가 누락됨..

확인

이 문제에서 사용된 anti-SSRF defenses
1. URL 디코딩 한 번
2. regex search using a blacklist of strings
https://portswigger.net/web-security/ssrf/lab-ssrf-with-whitelist-filter
서버 측에서 발생하는 보안 취약점으로, 공격자가 서버를 이용해 내부 네트워크나 외부 자원에 요청을 보내게 만드는 공격 방식이다.
일반적인 SSRF 공격은 서버가 요청을 외부 시스템에 전달하는 방식을 악용하지만, Blind SSRF는 응답을 바로 확인할 수 없는 형태로 이루어진다. 즉, 공격자는 서버가 응답하는 내용에 대한 정보를 얻을 수 없지만, 서버의 내부 네트워크나 다른 서비스를 악용할 수 있는 위험을 초래한다.
응답을 확인할 수 없다
일반적인 SSRF에서는 공격자가 서버가 보내는 응답을 볼 수 있지만, Blind SSRF에서는 공격자가 응답을 받을 수 없다. 대신, 응답의 부재나 서버의 동작을 통해 서버 내부에서 발생하는 요청의 결과를 유추해야 한다.
내부 네트워크 접근
Blind SSRF는 외부 시스템뿐만 아니라 서버 내부의 리소스에 접근할 수 있는 가능성을 열어준다. 이를 통해 민감한 정보나 내부 시스템을 탈취할 수 있다.
서버의 동작으로 정보 유추
공격자는 서버가 어떻게 반응하는지(서버의 상태 코드, 시간 지연, 리소스의 변경 여부 등)를 통해 서버의 내부 동작을 파악하고 공격을 이어갈 수 있다.
시간 기반 Blind SSRF (Time-based Blind SSRF)
공격자는 서버로 요청을 보내고, 서버의 응답 시간을 측정하여 내부 네트워크에 접근할 수 있는지 여부를 판단한다.
예) 서버가 특정 요청에 대해 시간을 지연시키면 이를 통해 공격자는 요청이 성공했는지 실패했는지 유추 가능
반응 코드 기반 Blind SSRF (Response-based Blind SSRF)
공격자는 서버가 반환하는 HTTP 상태 코드나 응답을 통해 공격의 성공 여부를 파악한다.
예) 서버가 요청을 처리할 때 특정 상태 코드(200, 403, 404 등)를 반환하면 이를 통해 공격자는 서버 내부의 리소스에 접근할 수 있는지 판단 가능
내부 시스템의 노출
공격자가 서버를 통해 내부 시스템에 접근하여 중요한 서비스나 데이터를 유출할 수 있다.
예) 데이터베이스 서버나 관리 콘솔에 접근할 수 있는 경우 민감한 정보 탈취 가능
클라우드 서비스 이용한 공격
많은 클라우드 서비스가 내부 리소스에 대한 액세스를 제어하는 메커니즘을 가지고 있지만, SSRF 공격을 통해 해당 메커니즘을 우회하고 리소스를 탈취할 수 있다. 클라우드 환경에서는 메타데이터 서버나 내부 인프라에 접근할 수 있는 취약점이 존재할 수 있다.
서버의 서비스 중단
특정 내부 서비스나 네트워크를 대상으로 한 공격은 서버의 정상적인 운영을 방해하거나 서비스 거부(DoS) 공격을 유발할 수 있다.
기본적으로 서버가 외부 요청을 보내는 기능을 악용하여 내부 네트워크나 시스템에 접근하고 중요한 정보를 탈취하는 방식으로 진행된다. 공격자는 응답을 직접 확인할 수 없지만 시간 지연, 상태 코드, 내부 네트워크 정보를 통해 공격이 성공했는지 여부를 유추할 수 있다.
따라서 Blind SSRF를 방지하려면 서버의 외부 요청을 철저히 검증하고, 내부 네트워크 접근을 차단하는 등의 보안 조치가 필요하다.
#1 내부 서버의 민감한 정보 탈취
상황: 웹 애플리케이션이 외부 URL을 받아들여 요청을 처리하는 기능을 제공하는 경우, 공격자는 이를 악용해 서버 내부로의 요청을 유도할 수 있다. (내부 네트워크에서만 접근 가능한 시스템에 요청을 보내거나 중요한 파일을 탈취하려는 시도이다.)
일반적인 예시: 공격자는 웹 애플리케이션의 파라미터(예: url, target)에 127.0.0.1 또는 localhost와 같은 내부 주소를 삽입한다.
예를 들어, 애플리케이션이 다음과 같은 형태로 URL을 처리한다고 가정하자.
http://example.com/?url=http://127.0.0.1:8080
이 요청을 통해 서버는 127.0.0.1:8080로 요청을 보내는데, 이는 서버 내부에 존재하는 서비스일 수 있다.
공격 흐름
1. 공격자는 URL 파라미터를 통해 내부 서비스나 파일을 요청한다.
2. 서버가 요청을 처리하는 동안 공격자는 응답을 직접 확인할 수는 없지만 응답 지연 시간 등을 이용해 요청이 성공했는지 여부를 파악한다.
3. 성공적으로 내부 시스템에 접근하면 민감한 정보(예: admin 페이지, 데이터베이스, 시스템 파일)를 유출하거나, 내부 서비스에 대한 제어를 시도할 수 있다.
일반적인 피해
-내부 데이터베이스에 접근하여 민감한 데이터 유출
-관리 콘솔 페이지나 API에 접근하여 시스템 제어
-로컬 시스템 파일 탈취 또는 변경
이 시나리오는 웹 애플리케이션이 외부 URL을 처리하는 과정에서 흔히 발생한다. 공격자는 서버가 내부 네트워크에 요청을 보내는 방식이나 응답 시간 등을 이용해 공격을 감지하고 목표 시스템에 대한 접근을 유도한다.
#2 클라우드 서비스의 메타데이터 서버 접근
상황: 클라우드 서비스(예: AWS, Google Cloud)에서는 각 인스턴스에 대한 메타데이터 서버가 존재한다. 이 메타데이터 서버는 인스턴스에 대한 중요한 정보(예: IAM 역할, 보안 자격증명, 네트워크 정보 등)를 제공한다. Blind SSRF를 통해 공격자는 이러한 메타데이터에 접근하여 보안 크리덴셜을 탈취할 수 있다.
일반적인 예시: AWS EC2 인스턴스의 메타데이터 서버에 접근하려는 시도이다. 공격자는 웹 애플리케이션의 요청을 통해 169.254.169.254로 요청을 보낸다. 이 IP는 AWS EC2 메타데이터 서버의 주소이다.
http://169.254.169.254/latest/meta-data/
메타데이터 서버는 AWS의 IAM 역할, 보안 키, 인스턴스 정보 등을 반환하므로 공격자는 이를 통해 클라우드 리소스에 접근할 수 있다.
공격 흐름
1. 공격자는 웹 애플리케이션에서 내부 메타데이터 서버 주소를 삽입하여 요청을 보낸다.
2. 서버는 메타데이터 서버로 요청을 전달하고, 공격자는 응답 시간을 통해 요청이 성공했는지 여부를 파악한다.
3. 요청이 성공하면 공격자는 메타데이터 서버에서 IAM 키 또는 보안 자격증명을 탈취하고, 이를 사용하여 AWS 리소스에 접근할 수 있다.
일반적인 피해
-클라우드 인프라에서의 리소스 탈취 또는 비정상적인 접근
-보안 크리덴셜 유출하여 민감한 데이터 획득 또는 클라우드 리소스 조작
-EC2 인스턴스 정보를 탈취하여 서버의 보안 취약점을 파악하고 추가 공격
이 시나리오는 클라우드 환경에서 매우 일반적이며 Blind SSRF를 통해 클라우드 메타데이터 서버를 악용하는 경우가 많다. 메타데이터 서버는 중요한 보안 정보를 포함하고 있어 공격자가 이를 탈취할 경우 매우 심각한 피해를 초래할 수 있다.
입력 검증 강화
서버가 외부 요청을 처리할 때 모든 입력 값에 대해 철저한 검증을 해야 한다.
내부 네트워크 접근 차단
서버가 내부 네트워크로의 요청을 보내지 않도록 설정하고, 외부에서 내부 리소스에 접근할 수 없도록 해야 한다.
리소스 요청 제한
서버가 요청할 수 있는 외부 시스템과 포트 범위를 제한하여 공격자가 임의로 시스템에 접근하는 것을 방지한다.
로깅 및 모니터링
서버에서 발생하는 요청에 대한 로그를 상세히 기록하고 모니터링하여 비정상적인 트래픽을 실시간으로 감지할 수 있도록 해야 한다.
방화벽 및 보안 그룹 설정
내부 네트워크에 대한 접근을 제한하는 방화벽 및 보안 그룹을 설정하여 SSRF 공격을 방어한다.