Reflected XSS : LAB [1]
DATE : 2024/1/3
Last updated
DATE : 2024/1/3
Last updated
LAB에서는 블로그를 찾아볼 수 있는 검색 기능을 제공하고 있다.
처음에 입력해본 키워드는 "hello"이다.
아쉽게도 hello라는 블로그는 없는 듯하다. 여기서 주목할 점은
(1) 사용자가 입력한 값이 search parameter로 전달되고 있는 동시에 (URL에서 확인)
(2) parameter를 포함하는 응답 페이지를 바로 받아볼 수 있다는 것이다.
다시 한 번 확인해볼 겸, 이번엔 "bye"를 검색해보았다.
이번에도 사용자가 입력한 내용을 문구에 출력해주고 있다.
Packet을 확인해보면 <h1> tag로 검색 결과를 알려주는 문구를 다루고 있는데
검색 결과가 없는 경우를 보면, 고정된 "0 search results for" 문구에
사용자가 입력한 내용을 연결하는 형태인 듯하다.
현재 사용자가 입력한 값은 HTML tag 안에 있는 h1 tag로 들어가고 있다.
그렇다면 임의의 태그를 작성해도 이 역시 HTML tag 안으로 들어가는 셈이 된다.
따라서 스크립트를 실행하기 위해 script tag를 적어 넣는다면
공격자가 원하는 스크립트를 실행할 수 있을 지도 모른다..!
Proof Of Concept 개념으로 XSS를 시도하기 위해서 아래와 같이 팝업 창을 띄우는 스크립트를 작성했다.
검색 바에 스크립트를 입력하게 되면 search parameter로 스크립트가 전달돼
위와 같이 Response 속에 스크립트가 들어가게 된다.
스크립트가 포함된 Response가 사용자 브라우저로 전달되면
script tag를 발견한 브라우저가 이를 실행하기 때문에
성공적으로 스크립트가 실행된 결과를 볼 수 있게 되는 흐름임을 알아야 한다.
사실 Reflected XSS 같은 경우는 일반 사용자가 스스로 스크립트를 작성하고 서버에 보내는 개념이 아니라
공격자가 준비해둔 URL을 클릭하도록 유도함으로써 발생하게 된다.
즉, 이번 LAB을 통해 알아가야 하는 건 실제 Reflected XSS가 일어나는 공격 흐름이라기 보다는
어떤 원리로 인해 스크립트를 서버로 보낸 당사자에게 다시 스크립트가 돌아오게 되는 지를
이해하기 위한 예시라 보는 게 적절할 듯하다.
입력 칸이 보이면 뭐든 넣어보고 싶은 게 사람의 본능..
자.. 그럼 생각을 해보자.