본문 바로가기

Dreamhack/웹해킹

SSRF

SSRF는 공격자가 악의적인 요청을 서버로 보내도록 유도하는 취약점입니다. 이를 통해 공격자는 서버가 외부 서비스나 내부 네트워크에 요청을 보낼 때 그 요청을 조작하거나, 공격자가 의도한 특정 리소스에 접근할 수 있게 만듭니다. 일반적으로 서버가 외부 API나 웹 서버에 요청을 보내는 기능을 악용하며, 이를 통해 내부 시스템을 스캔하거나 민감한 정보를 노출시킬 수 있습니다.


SSRF 공격 예시: 내부 시스템 정보 유출

웹 애플리케이션에서 사용자가 외부 URL을 입력하면 해당 URL로 데이터를 가져오는 기능을 제공하는 경우가 있습니다. 공격자는 이 기능을 악용하여 서버가 내부 시스템으로 요청을 보내도록 유도하고, 중요한 정보를 유출시킬 수 있습니다.

1. 공격 시나리오

  1. 공격자는 웹 애플리케이션에서 제공하는 URL 입력 필드에 악의적인 URL을 입력합니다. 예를 들어, http://127.0.0.1:5000/fetch_url?url=http://127.0.0.1/admin와 같은 URL을 사용합니다.
  2. 이 URL이 서버로 전송되면, 서버는 사용자가 제공한 **url=http://127.0.0.1/admin*을 기반으로 내부 시스템에 요청을 보냅니다.
  3. 만약 서버의 관리 페이지가 로컬 주소(http://127.0.0.1/admin)에 있다면, 서버는 이 주소로 내부 API 요청을 보내게 됩니다.
  4. 결과적으로 공격자는 서버를 통해 내부 관리 API시스템 관리 페이지에 접근할 수 있게 됩니다.

SSRF 공격 방어 방법

1URL 검증 및 화이트리스트

사용자 입력에 의한 악의적인 요청을 차단하려면, 서버는 사용자가 입력한 URL을 검증해야 합니다. 특히 내부 리소스(로컬 주소나 내부 네트워크 주소)로 향하는 요청을 차단하는 것이 중요합니다.

  • 화이트리스트 사용:
    • 서버가 요청할 수 있는 URL을 화이트리스트로 제한하여 외부에서 지정된 URL만 요청을 허용합니다.
    • 예를 들어, http://127.0.0.1, http://localhost와 같은 로컬 주소는 요청을 차단합니다

SSRF 공격 예시: 파라미터 변조를 통한 내부 시스템 접근

웹 애플리케이션에서 사용자가 폼 데이터를 통해 내부 API로 전송되는 정보를 변조하는 파라미터 변조 공격은 SSRF공격의 일종입니다. 특히, & 구분자를 악용하여 파라미터 값을 변조하는 방식입니다.

공격 시나리오

공격자는 웹 애플리케이션에서 제공하는 폼 입력 필드에 악의적인 파라미터 변조 값을 삽입합니다. 예를 들어, 서버가 title과 user 파라미터를 받아서 내부 API로 전송하는 경우, 공격자는 title 필드에 &user=admin을 삽입하여 user 값을 변조할 수 있습니다.

예시:

  1. 공격자가 입력하는 값: 공격자는 title 필드에 title&user=admin을 입력합니다.
  2. title=title&user=admin body=body
  3. 서버가 변조된 데이터로 요청을 보낼 때: 서버는 사용자 입력을 title=title&user=admin로 받았기 때문에, 실제로 전송되는 데이터는 다음과 같습니다: title=title&user=admin$body=body&user=guest여기서 &user=admin을 공격자가 삽입하여 user 값을 admin으로 변조한 것입니다.
  4. 서버가 변조된 데이터 파싱: 서버는 파라미터를 순차적으로 처리하면서 user=admin을 첫 번째로 파싱하고, user=guest는 무시합니다. 이로 인해 user 값이 admin으로 설정됩니다.
  5. 결과적으로 반환되는 응답: 서버는 user가 guest여야 하지만, user 값이 admin으로 변조된 결과를 반환합니다.
  6. json 복사 { "title": "title", "body": "body", "user": "admin" }

SSRF 공격 방어 방법

  1. 파라미터 검증 및 이스케이프 처리
    • 서버가 사용자 입력값을 그대로 사용하는 경우, &와 같은 특수 문자가 파라미터 값에 포함되지 않도록 검증하거나 이스케이프 처리해야 합니다.
    • 파라미터 값 검증: title, body, user와 같은 입력 필드에서 특수 문자를 포함한 입력을 차단합니다.

'Dreamhack > 웹해킹' 카테고리의 다른 글

[🌱Beginner] path traversal  (0) 2025.08.17
(드림핵) blind-command  (0) 2025.04.02
Command Injection  (0) 2025.04.01
Blind Command Injection  (0) 2025.04.01
(드림핵) Carve Party  (0) 2025.04.01