Reflected XSS : LAB [6]
DATE : 2024/1/14
Last updated
DATE : 2024/1/14
Last updated
단 몇 개의 SVG elements만이 허용되는 상황에서 reflected XSS 공격을 수행해보자.
LAB 페이지에 있는 검색 기능을 사용해보면 search parameter로 사용자가 입력한 값이 전달되는 동시에
검색 결과 속에 search parameter와 동일한 데이터를 출력하고 있음을 볼 수 있다.
이는 사용자가 (1) 입력한 값이 파라미터로 전달되며 그 파라미터 값이
(2) 즉시 응답에 포함되어 출력 되는 구조임으로 Reflected XSS를 수행할 수 있는 전제 조건을 만족한다.
search parameter가 Response에 즉시 반영되는 게 맞는 지 확실하게 확인하고 싶다면
repeater로 packet을 가져와 파라미터 값을 수정해보면 된다.
위와 같이 파라미터를 수정한 경우,
Response에 곧 바로 수정한 값이 들어가는 걸 볼 수 있다.
즉, 사용자의 입력 값을 가져다가 응답 페이지에 즉시 출력 시키고 있는 구조임을 확인한 셈이다.
그렇다면 스크립트를 실행하기 위해서 삽입할 수 있는 태그를 찾아보자.
애초에 LAB에서 SVG elements로 태그가 제한된다고 했기 때문에
<p> tag를 넣으면 "Tag is not allowed" 문구가 나오는 건 그리 놀랍지 않은 결과이다.
사용할 수 있는 태그를 모두 파악하기 위해 tag list를 넣고 intruder를 실행하면
다음과 같이 SVG elements인 svg, title, image, animatetransform tag만이
허용되는 걸 확인할 수 있다.
이 중 아무 태그나 활용해서 스크립트를 삽입하면 되겠거니! 했지만
허용되는 태그가 제한되는 동시에, 속성 & event handler 또한 제한되고 있는 듯하다.
이번엔 사용할 수 있는 event handler를 찾기 위해 intruder를 실행해보았다.
결과를 확인해보니, onbegin만이 사용할 수 있는 상태임을 파악했다.
onbegin은 애니메이션을 어느 시점에 시작할 것인지 설정하는 event handler로
기본 값은 0초(s) 이고 시간을 나타내는 형태로 값을 넣을 수 있다고 한다.
하지만 우리는 팝업 창을 띄우는 것이 목표이기 때문에 onbegin에 시간 대신 alert()를 작성할 것이다.
<svg> tag 안에 <animatetransform> tag를 넣어주고 onbegin event handler를 부여해준다.
search parameter에 스크립트를 넣고 전달하면
성공적으로 Response에 alert(1)이 삽입되면서 팝업 창이 뜬 결과를 볼 수 있을 것이다.