Reflected XSS는 애플리케이션이 사용자의 입력값을 파라미터로 받아 코드 내부에서 사용할 때 일반 문자열이 아닌 스크립트 코드를 입력해 악성 스크립트가 실행되도록 만들고,

해당 URL을 클라이언트가 클릭하도록 유도해 공격하는 방법입니다.
서버가 해커의 입력 데이터를 그대로 반환한다라고 해서 Reflected(반사)라는 수식이 붙여진 것입니다.

XSS 공격을 사용해 alert() 함수를 호출해라.

웹 사이트에 접속해보니 검색 창이 하나 나옵니다. 아무거나 입력해서 결과를 확인합니다.

검색 결과는 아무것도 나오지 않았지만 눈에 띄는 점은 검색한 내용이 상단에 그대로 출력된다는 점입니다.

URL에는 search라는 파라미터의 값으로 사용자의 입력값을 받고 있습니다.
소스 코드를 확인해보면

입력한 값을 코드에 그대로 가져다 입력하고 있습니다.
여기에 alert()를 입력하여 경고창을 띄워보겠습니다.

<script>alert('test');</script> 입력 후 전송하면

검색 결과가 아닌 경고창이 나타납니다.

소스코드를 확인하니 입력한 JS 코드가 어떠한 처리도 되지 않고 그대로 입력되어있습니다.
https://0a870029046e45d6811926fb009800d1.web-security-academy.net/?search=%3Cscript%3Ealert%28%27test%27%29%3B%3C%2Fscript%3E
이 URL을 다른 사용자들이 클릭할 수 있도록 유도해보겠습니다.

메인 화면에서 View post를 눌러 첫 번째 블로그에 접속합니다.

맨 아래로 내려오면 댓글을 작성할 수 있는 폼이 있고, 입력란 중에 Website URL을 입력할 수 있는 칸이 있습니다. 여기에 스크립트 코드를 포함한 URL을 넣어 댓글을 작성해보겠습니다.

입력 후 전송하면

구문이 나오고 Back to blog를 클릭해서 돌아가면.

맨 아래에 추가된 것을 확인할 수 있습니다.
작성자의 이름을 클릭하면 댓글을 입력할 때 작성했던 Website의 주소로 이동하게 됩니다.
우리는 스크립트가 포함된 URL을 입력했기 때문에 이름을 클릭하게되면

경고창이 나타납니다. 이를 이용해 다른 유저들에게 경고창이 아닌 악성 코드가 실행되도록 유도할 수 있습니다.