문제 정보
여러 기능과 입력받은 URL을 확인하는 봇이 구현된 서비스입니다.
CSRF 취약점을 이용해 플래그를 획득하세요.
문제 정보 확인 후 홈페이지에 접속해봤다. 접속하니 4개의 페이지가 나온다.
일단 vuln(csrf)page에 들어가봤다. 들어갔는데 주소창에는<script>alert(1)<script>
라 적혀있는데 페이지에는<*>alert(1)
로 출력이 되어있다. 바로 코드를 확인해보자.
코드를 확인해봤는데 위와같이 script가 *로 치환되어있는 것을 볼 수 있다. 필터링이 되어있는 것 같다. 그래서 XSS-1,2 문제에서 활용한 svg 우회를 시도해봐야겠다.
svg우회를 시도해봤는데 "onload"에서 "on"도 *로 치환이 된다.
flag 페이지에서 위와같이 입력하고 제출하면 good 라는 alert 창이 뜬다.
여기서 유추해볼 수 있는 것은 웹서버에게 vuln 페이지 인자값을 넘겨주는 것으로 유추할 수 있다.
나는 일단 flag 페이지에 xss를 삽입하면 실행이 되는지 확인하려고 request.net을 이용했다.
그 결과 실행이 되지 않았다. 그래서 javascript가 막혀있나 생각하고 svg/onload를 이용했는데 역시나 안된다.
마지막으로 img src 태그를 이용했는데 request.net에 로그가 찍혔다.
img 태그를 이용해 공격자가 원하는 페이지를 요청할 수 있게 된다.
코드를 확인하던 중 /admin/notice_flag 페이지는 userid=admin 이면 flag를 memo 페이지에 출력한다. 그러면 위에서 성공한 img 태그를 이용해 flag 페이지에 userid=admin으로 요청을 해보자.
<img src="/admin/notice_flag?userid=admin">
memo 페이지에 위와같이 flag가 출력되었다.