PentesterLab의 SSRF 문제에 대한 접근 방법을 기록
첫번째 문제는 아래와 같이 url 파라미터로 입력받는 url의 데이터를 가져와 출력해주는 페이지이다.
싱글/더블쿼터는 국룰이여서 확인해보니 에러가 발생했으며, 사용되는 함수는 file_get_contents였다.
결과적으로 우리는 해당 서버의 1234/TCP의 WebRoot를 확인해야되기에 포트스캔을 먼저 진행해보니 1234/TCP는 외부에 오픈되어있는것 같지 않아보였다.
url 파라미터에 아래와 같은 값을 입력하여 전달하였더니 Timeout 에러가 발생하였다.
?url=http://ptl-1c405e74-a66fe2e5.libcurl.so:1234
http 프로토콜을 떼고 입력하면 File not found 에러가 발생한다.
?url=ptl-1c405e74-a66fe2e5.libcurl.so:1234
아래와 같이 http://127.0.0.1:1234를 입력하니 플래그를 획득할 수 있었다. 도메인 Lookup기능이 없거나 가상호스트인것으로 판단된다.
?url=http://127.0.0.1:1234
이런 SSRF를 이용하여 내부 포트 스캔도 가능하며 파일을 읽거나 FTP, LDAP 등의 접속도 가능할 수 있다.
?url=file:///etc/passwd
두번째 문제는 첫번째 문제에서 발생했던 url 파라미터에 대한 "127.0.0.1" 값을 서버에서 필터링한다고한다.
이를 우회하는 문제이나, SSRF Bypass에 대한 여러 트릭을 보면 문자열 기반 필터링은 쉽게 우회할 수 있다.
?url=http://0x7f.0.1:1234
127.0.0.1 필터링을 우회할 수 있는 트릭은 여러가지가 있으며, 아래 링크 참고(Server Side Request Forgery)