R's Hacking Daily Log

SSRF - Lab (3) 본문

Port Swigger/SSRF

SSRF - Lab (3)

hanhxx 2023. 7. 9. 12:29

Circumventing common SSRF defenses

지금까지 살펴보았던 Lab은 기본적인 SSRF를 실행해 본 느낌이었다.

이번 Lab에서는 조금 다르게 SSRF 공격에 대한 방어가 이루어진다고 한다. 

 

SSRF를 예방하기 위한 여러 방법이 존재하겠지만

이번에 살펴볼 Lab에서는 Blacklist 기반의 input filter를 사용한다.

 

 

SSRF with blacklist-based input filters

몇몇 어플리케이션에서는 SSRF 공격을 예방하기 위해서 

1) /admin과 같은 민감한 URL

2) localhost & 127.0.0.1과 같은 hostname을 포함하는 input

을 차단한다고 한다. 

 

1 & 2의 경우가 차단된다고 할 때, 

127.0.0.1의 alternative IP 형태인 2130706433, 017700000001,127.1로 대체하거나

URL encoding을 하는 등 그밖의 기술들을 사용해 우회할 수 있다. 

(blacklist를 기반으로 차단되는 값을 인식하지 못하게 만들기 위함)

 

 

Lab - SSRF with blacklist-based input filter

앞선 Lab에서와 동일하게 재고를 확인하는 form을 사용해 admin page를 얻어오고자 한다.

 

다만 이번 Lab에서는 blacklist가 존재하기 때문에 /localhost/admin이라는 경로를 있는 그대로 입력했을 시

접근이 불가할 수 있다.

 

예상한 대로 http://localhost/admin 경로를 입력하면 SSRF attack을 방지하기 위해 차단된다고 응답을 받았다.

그렇다면 localhost를 alternative IP로 나타내면 어떨까?

 

localhost를 alternative IP로 수정해보기도 하고

 

 

URL encoding도 해본 결과 모두 차단된다는 응답을 얻었다.

 

마지막으로 127.0.0.1을 127.1로 입력해 보니 드디어 status code 200!

localhost를 나타내는 값들이 다 차단되고 127.1만 우회가 되는 듯하다. 

 

 

그렇다면 admin은 과연 통과가 될까? 해보면 알겠지만 127.1/admin을 입력하면 차단당한다..

이것저것 해본 결과 'admin의 a'만 url encode를 두 번 거친 값이 통과되었다.

stockApi에 입력한 값 http://127.1/%25%36%31dim은 눈에 익숙하진 않지만 127.0.0.1/admin을 나타내는 값이다.

 

따라서 재고를 확인하는 부분에 admin page가 출력되는 걸 볼 수 있을 것이다.

출력된 페이지에서 carlos 계정의 Delete 버튼을 누르면 삭제되진 않지만 

삭제하기 위해 전달되는 Query 형태는 알아낼 수 있다.

 

 

해당 값을 그대로 127.1/%25%36%31dmin 경로 뒤에 붙여주면 된다.

그렇게 값을 수정한 packet을 보내면 

 

 

결과적으로 Lab을 마무리할 수 있다!!

 

 


이번 Lab에서는 SSRF attack에 대한 Blacklist 기반의 방어 기술이 적용된 사례를 살펴볼 수 있었다.

 

localhost or admin과 같은 단어를 차단하기 위한 list에도 빠져있는 단어가 존재할 수 있기 때문에

100% 안전을 보장할 수는 없다는 점!!

 

'Port Swigger > SSRF' 카테고리의 다른 글

SSRF - Lab (5)  (0) 2023.07.11
SSRF - Lab (4)  (0) 2023.07.10
SSRF - Lab (2)  (0) 2023.06.28
SSRF - Lab(1)  (0) 2023.06.27
SSRF (1)  (0) 2023.06.27
Comments