Reflected XSS : LAB [1]

DATE : 2024/1/3

Reflected XSS into HTML context with nothing encoded

LAB에서는 블로그를 찾아볼 수 있는 검색 기능을 제공하고 있다.

입력 칸이 보이면 뭐든 넣어보고 싶은 게 사람의 본능.. 😏

처음에 입력해본 키워드는 "hello"이다.

아쉽게도 hello라는 블로그는 없는 듯하다. 여기서 주목할 점은

(1) 사용자가 입력한 값이 search parameter로 전달되고 있는 동시에 (URL에서 확인)

(2) parameter를 포함하는 응답 페이지를 바로 받아볼 수 있다는 것이다.

다시 한 번 확인해볼 겸, 이번엔 "bye"를 검색해보았다.

이번에도 사용자가 입력한 내용을 문구에 출력해주고 있다.

Packet을 확인해보면 <h1> tag로 검색 결과를 알려주는 문구를 다루고 있는데

0 search results for '____'

검색 결과가 없는 경우를 보면, 고정된 "0 search results for" 문구에

사용자가 입력한 내용을 연결하는 형태인 듯하다.

자.. 그럼 생각을 해보자. 🤔

현재 사용자가 입력한 값은 HTML tag 안에 있는 h1 tag로 들어가고 있다.

그렇다면 임의의 태그를 작성해도 이 역시 HTML tag 안으로 들어가는 셈이 된다.

따라서 스크립트를 실행하기 위해 script tag를 적어 넣는다면

공격자가 원하는 스크립트를 실행할 수 있을 지도 모른다..!

Proof Of Concept 개념으로 XSS를 시도하기 위해서 아래와 같이 팝업 창을 띄우는 스크립트를 작성했다.

<script>alert(1)</script>

검색 바에 스크립트를 입력하게 되면 search parameter로 스크립트가 전달돼

<h1>0 search results for '<script>alert(1)</script>'</h1>

위와 같이 Response 속에 스크립트가 들어가게 된다.

스크립트가 포함된 Response가 사용자 브라우저로 전달되면

script tag를 발견한 브라우저가 이를 실행하기 때문에

성공적으로 스크립트가 실행된 결과를 볼 수 있게 되는 흐름임을 알아야 한다.

사실 Reflected XSS 같은 경우는 일반 사용자가 스스로 스크립트를 작성하고 서버에 보내는 개념이 아니라

공격자가 준비해둔 URL을 클릭하도록 유도함으로써 발생하게 된다.

즉, 이번 LAB을 통해 알아가야 하는 건 실제 Reflected XSS가 일어나는 공격 흐름이라기 보다는

어떤 원리로 인해 스크립트를 서버로 보낸 당사자에게 다시 스크립트가 돌아오게 되는 지

이해하기 위한 예시라 보는 게 적절할 듯하다.

Last updated