문제 페이지에 들어가보니, admin 페이지로 넘어가는게 미션인 듯하다.
here is proxy just for fun
부분의 proxy를 클릭하니, 문제 서버에서 프록시를 해주는 것으로 판단이 된다.
admin페이지로 넘어가니, 로그인을 하라고 해서 일단 내가 알고 있는 guest/guest를 입력해봤다.
아무 소득이 없었다. 그래서 혹시 쿠키에 뭔가 저장이 됬는지 확인을 해봤는데, 아무것도 없었다.
우연히 로그인 취소 버튼을 클릭하니, 저런 사이트가 나왔다.
로그아웃 시 login 세션이 빈 세션으로 지정되고, index 페이지로 리다이렉트된다.
로그인 세션이 있을 경우에 hi 로그인 세션
을 출력한다.
이후에 로그인 세션이 admin이면, 접속한 주소가 172.17.0.x
주소이면 Flag를 출력한다.
그게 아니라면, admin이 아니라는 문구를 추가적으로 출력한다.
로그인 세션이 없다면, id와 pw 파라미터를 통해 쿼리문에 id와 pw을 삽입하여 로그인을 할 수 있다.
나는 이러한 코드를 볼 수 있었는데, WWW-Authenticate
해더를 볼 수 있었다.
이는 http 인증을 한다는 것으로 판단이 된다.
HTTP 인증 - HTTP | MDN
HTTP 인증 - HTTP | MDN
HTTP는 액세스 제어와 인증을 위한 프레임워크를 제공합니다. 가장 일반적인 인증 방식은 "Basic" 인증 방식입니다. 이 페이지에서는 일반적인 HTTP 인증 프레임워크를 소개하고 서버에 HTTP의 Basic
developer.mozilla.org
위와 같이 SQLi를 통해 admin으로 로그인을 할 수 있으며, WWW-Authenticate
으로 인증을 하는 것을 알 수 있다.
해당 Base64는 admin으로 인코딩한 것이다.
이를 통해 문제 서버의 프록시를 이용하여, admin 페이지에 주요 헤더와 데이터들을 보냈다.
Request 해더 삽입을 할 때 줄 구분을 위해 CRLF(%0d%0a)를 사용하였다.
Flag를 획득할 수 있었다.