Reflected XSS : LAB [7]

DATE : 2024/1/15

Reflected XSS into a JavaScript string with single quote and backslash escaped

이번에 다뤄볼 Reflected XSS LAB에서는 작은 따옴표와 역슬래쉬를 사용할 수 없는 사례이다.

일단 블로그 검색 기능이 어떻게 구현되어 있는지 확인하기 위해

hanhxx를 검색 바에 입력해보았다. 이때 response packet을 보면

사용자가 입력한 값이 JavaScript에서 사용 되는 걸 알 수 있다.

LAB에서는 작은 따옴표와 역슬래쉬를 사용할 수 없기 때문에 search parameter에

angle brackets, double quote, single quote를 입력해보면

작은 따옴표 single quote만 역 슬래쉬가 붙으면서 escape 되는 걸 볼 수 있다.

그렇다면 우리는 스크립트를 실행 시키기 위해서 <script> tag를 삽입할 수 있다!

사용자가 입력한 값이 제일 먼저 사용되는 위치는 searchTerms 변수에 할당하는 부분으로

<script> var searchTerms = '__INPUT__'; document.write(); </script>

앞에 있는<script> tag를 이용해 마감 태그를 넣게 되면 __INPUT__을 감싸는 따옴표에서 벗어날 수 있다.

<script> var searchTerms = '</script>'; document.write(); </script>

</script>를 검색 바에 입력하게 되면 위와 같이 코드가 완성되면서

';document.write();는 일반적인 문자열로 화면에 출력될 것이다.

여기서 중요한 건 </script>를 넣음으로써 따옴표에서 벗어나

새로운 <script> tag를 넣으면 원하는 스크립트를 실행할 수 있게 된다는 것! 💡

<script> var searchTerms = '</script><script>alert(1)</script>'; document.write(); </script>

스크립트를 실행하기 위해 새로운 태그를 추가해 alert(1)을 넣어주면

변수 searchTerms을 정의하는 <script> tag에 이어 alert(1)을 호출하고 있는 <script> tag가 완성된다.

마지막으로 브라우저 상에서 팝업 창을 확인하기 위해 search parameter에

</script><script>alert(1)</script>

위와 같이 스크립트를 삽입하게 되면

성공적으로 팝업 창이 뜬 결과를 볼 수 있다. 👍

Last updated