웹해킹

SSRF with blacklist-based input filters 필터링 우회

이둥둥 2025. 4. 3. 20:30

어떤 애플리케이션의 경우 127.0.0.1이나 localhost같은 호스트네임이나 /admin 등의 입력을 차단한다.

차단할 리스트를 먼저 세워서 그것을 기반으로 하는 필터링 체계는 블랙리스트 기반이라고 함

필터링을 우회할 수 있는 방법들 몇가지를 알아보자

 

 

IP 표현 대체 사용하기:

127.0.0.1 대신에 2130706433(정수 표현), 017700000001(8진수), 127.1(축약하는 방식) 

 

도메인을 127.0.0.1으로 설정하기

인풋값을 직접적으로 입력하기보다는 DNS를 활용해서 도메인이 127.0.0.1으로 해석되도록 등록해서 필터링하는 방식이 있다고 한다.

 

과정을 간단히 설명하겠음

 

 

GET /fetch?url=http://127.0.0.1/admin

위의 HTTP 요청을 보내면 127.0.0.1 이라는 값이 명시되어 있어 서버에서 차단당하므로 !

공격자는 hacker.com이라는 도메인을 등록한 후, DNS 설정으로 IP 주소를 127.0.0.1으로 설정한다

 

GET /fetch?url=http://hacker.com/admin

 

hacker.com 주소는 블랙리스트에 없으므로 서버요청이 허용될 가능성이 높은데

DNS에 의해 127.0.0.1으로 연결되면 127.0.0.1/admin에 접근

 

내가 쓰는 burpsuite는 커뮤니티 버전이라 사용할 수 없지만 프로페셔널 버전에는

Burp Collaborator라는 외부 도메인 테스트 도구가 있어서 서브도메인 생성이 가능하다고 한다

 

URL 인코딩

localhost, /admin 같은 문자열 역시 블랙리스트에 포함되어 있을 확률이 높다

인코딩을 거치면 우회가 가능함

 

  • /admin → %2fadmin or %2Fadmin
  • 127.0.0.1 → 127%2E0%2E0%2E1
  • localhost → LoCaLhOsT

대소문자 변형은 XSS에서도 많이 사용했는데 ssrf에서도 사용되는구나

 

URL Redirect

위에서 언급한 DNS랑 좀 비슷한 방식인데 중간에 리디렉트 서버를 사용한다

일단 리디렉트 Redirect는 클라이언트 요청을 받아 다른 URL로 자동 이동 시키는 기능을 의미한다.

 

127.0.0.1에 접속하는 것이 차단되더라도 hacker.com이라는 사이트에 아래와 같은 스크립트를 심으면

<?php
header("Location: http://127.0.0.1/admin");
?>
GET /fetch?url=http://hacker.com/redirect

 

HTTP 요청으로 인해 hacker.com에 접속이 된 후 

리디렉트로 인해 127.0.0.1에 접근이 가능할 수도 있음

 

리디렉트 방식에도 여러가지가 있는데 307 Redirect 같은 상태코드를 넣는다던가

HTTP/HTTPS 혼용을 하는 식으로 우회가 가능