XSS Point 1

DATE : 2023/12/20

이번 POST를 시작으로 XSS Point 6까지 걸쳐 XSS 공격 포인트를 찾는 연습을 해볼 것이다.

이번에도 SQLi 때와 마찬가지로 회원 가입 및 로그인 과정은 필수!

회원 가입을 한 후, 바-로 로그인해 index.php로 들어온 화면이다.

로그인을 마친 사용자에게는 마이페이지, 공지 사항 페이지가 제공된다.

차례대로 마이페이지부터 방문해보자.

마이페이지로 들어가게 되면 위와 같은 화면을 볼 수 있을 것이다.

이 페이지로 접속할 때 서버와 주고 받은 packet을 확인해보면

URL에 user parameter로 현재 로그인한 사용자의 ID가 전달되고 있는 동시에

그 값과 일치하는 데이터가 response에 들어있는 걸 확인할 수 있다.

이 부분을 XSS 공격 포인트로 삼을 수 있을 지 user parameter 값을 조작해보면

response에 별 반응이 없는 걸 볼 수 있다.

안타깝지만, user parameter를 조작한다고 해서 response 내용을 바꿀 수 있는 건 아니었나 보다.

그럼 다음으로 넘어가 공지 사항 페이지를 탐색해보자. 😏

공지 사항 페이지로 들어가게 되면 위와 같은 화면을 볼 수 있을 것이다.

글쓰기 버튼을 눌러 제목과 내용을 간단히 작성해주면

작성한 게시물이 생성된 걸 볼 수 있다! 한 번 클릭해서 들어가 보자.

게시물의 상세 페이지로 이동하면 위와 같이 수정, 삭제 버튼과 함께

작성된 게시물의 내용과 제목을 한 눈에 볼 수 있다!

이 페이지에 들어오기 위해 서버로 날아간 Packet을 확인해보니

GET /xss_1/notice_read.php?id=232&view=1 HTTP/1.1
Host: ctf.segfaulthub.com:4343
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.6099.71 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Referer: http://ctf.segfaulthub.com:4343/xss_1/notice_list.php
Accept-Encoding: gzip, deflate, br
Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7
Cookie: session=ccf0cc67-e7f0-4493-8cb8-27746700d530.faqKGaLztpnwAmRg7PbYDhMkuvM; PHPSESSID=jvj34b8ctojglktcp71hqosqrs
Connection: close

이번에는 id & view parameter가 전달되고 있다.

id는 게시물에 부여되는 고유 번호 같은데, 다른 값으로 바꿔봤더니

권한이 없다고 한다.. view parameter도 다른 값을 넣어봤지만 별 다른 변화를 찾아내진 못했다.

view parameter에 응답이 달라지지 않는 걸 보면 id parameter만 가져다가 select문을 실행해

게시물 정보를 가져와 페이지에 띄워주고 있는 듯하다.

우리는 XSS 공격 포인트를 찾고 있는 것이기 때문에 이 부분은 일단 넘기기로 하자.

그렇다면 그냥 대놓고 게시물에 XSS를 실행하기 위한 스크립트를 작성해보자!!

이번 POST는 말 그대로 XSS 포인트를 찾는 게 목적이기 때문에

<script>alert(1)</script>

alert() 함수가 실행되는 여부만 확인해볼 것이다.

내용을 저장하고 난 뒤

공지 사항 페이지에서 스크립트 내용으로 수정한 게시물을 다시 클릭하게 되면..!

아무 일도 일어나지 않는다! (lol)

게시물 내용에 작성한 script는 우리가 의도한 대로 스크립트로써 동작하지 못하나 보다.

그렇다면 게시물 내용이 아니라 제목에 작성해보는 건.. 어떨까? 😏

게시물 작성 시 서버로 전달되는 Packet을 사용해서

title 부분에 <script>alert(1)</script> 를 작성해보았다.

그 결과 글 작성에 성공했다고 하니 페이지에서 게시물을 확인할 수 있을 것이다.

(하나씩 적어본다는 게.. 너무 많이 만들어버렸다..)

만약 게시물 제목 부분에 XSS 공격이 가능하다면 TItle에

<script>alert(1)</script>

를 작성해둔 게시물을 클릭했을 때, 팝업 창이 뜨게 될 것이다.

결과를 확인하기 위해 게시물을 클릭해보면..!

👏👏👏

성공적으로 alert(1)이 실행된 결과를 마주할 수 있을 것!!

이렇게 해서 XSS 공격 포인트 찾기 - 첫 번째 문제 해결이다. 👍

Last updated