
URL 필터링은 URL에 포함된 문자열을 검사하여 부적절한 URL로의 접근을 막는 보호기법이다. 제어 방식에 따라 블랙리스트, 화이트리스트 필터링으로 나뉜다.
블랙리스트 필터링은 URL에 포함되면 안되는 문자열로 블랙리스트를 만들고, 이를 이용하여 이용자 접근을 제어한다. 예를 들어, 블랙리스트에 "http://naver.com/"이 있으면 "http://naver.com/"가 포함된 모든 URL로의 접근을 차단한다. 예외는 있을 수 있으므로 유의하여야 한다.
화이트리스트 필터링은 접근을 허용할 URL로 화이트리스트를 만든다. 이용자가 화이트리스트 외의 URL에 접근하려고 하면 이를 차단한다.


주소를 입력하면 이미지를 볼 수 있는 사이트가 나온다.
자세히 말하면 이 img_viewer는 이용자가 POST로 전달한 url에 HTTP 요청을 보내고, 응답을 반환하는 것이다.

문제에서 주어진 코드를 참고해보면, 서버 주소에 "127.0.0.1", "localhost"가 포함된 URL로의 접근을 막는데, 이를 우회하면 SSRF를 통해 내부 HTTP 서버에 접근할 수 있다.

위 주소는 필터링을 우회할 수 있는 localhost URL들이다.

위 소스코드는 1500에서 1800중 랜덤한 포트번호를 브루트포스로 찾고, 찾으면 그 번호를 출력하고 코드를 종료한다.

브루트포스의 결과이다.

브루트포스의 결과로 나온 포트번호를 필터링 우회 URL에 넣어 이미지를 요청한다.

요청한 이미지가 나온다. 개발자 도구로 이미지 코드를 살펴보면 아래와 같이 나온다.

이 중 빨간색 표시 부분을 Base64 디코더에 넣어본다.


flag가 잘 나오는 것을 볼 수 있다.