Reflected XSS : LAB [8]
DATE : 2024/1/15
Last updated
DATE : 2024/1/15
Last updated
이번 LAB에서는 작은 따옴표는 탈출! 큰 따옴표 & < > 기호는 HTML Entity Encoding 처리를 한다고 한다.
즉, Reflected XSS를 수행하기 위해 사용할 수 없는 문자가 작은 따옴표, 큰 따옴표, < > 기호라는 것.
이전 문제는 작은 따옴표만 제한되었기 때문에 뭔가 난이도가 높아진 느낌이지만 사실상 그리 어렵진 않다.
검색 기능이 어떤 식으로 구현되어 있는 지 보기 위해 검색 바에 아무거나 입력한 뒤 packet을 확인해보자.
response packet을 보면 코드는 이전 문제와 동일하다. 하지만!
angle brackets 기호를 사용할 수 없는 상황이기 때문에 태그를 만들 수 없다는 제한을 고려해보면
이번 문제는 이미 작성되어 있는 <script> tag를 활용해 스크립트만 삽입하는 형태로 공격을 할 수 있다.
문제는 사용자가 입력한 값이 작은 따옴표로 감싸지기 때문에 이를 빠져나올 필요가 있는데
현재 LAB에서는 작은 따옴표가 escape 되고 있다는 사실!
"escape 된다" 라는 건 작은 따옴표 앞에 역 슬래쉬가 붙게 된다는 건데
오히려 이 부분을 역 이용할 수 있지 않을까??
사용자 입력 값에 작은 따옴표가 들어 있다면 이를 발견하는 순간, 작은 따옴표 앞에 \ 기호가 붙게 된다.
근데 만약 역 슬래쉬를 하나 붙인 상태로 입력하게 되면
작은 따옴표 앞에 \ 기호가 두 개가 되면서 작은 따옴표를 문자열로 탈출 시키기 위한 기능을 잃게 된다.
즉 \\ 라는 문자열이 만들어지는 것이다.
이때 빼기 연산자인 - 기호를 사용하게 되면 앞 뒤 코드를 분리하는 효과를 얻을 수 있게 되고
문자열 '\\'과 분리된 alert(1)이 <script> tag 안에 만들어지기 때문에
뒤에 남은 작은 따옴표를 지우기 위해 주석만 더 추가해준다면
작은 따옴표 앞에는 역 슬래쉬가 붙고, < > 기호 & 큰 따옴표는 HTML entity 처리되고 있다..
성공적으로 팝업 창을 띄울 수 있게 된다.