Portswigger-Reflected XSS with some SVG markup allowed

problem link

풀이

Reflected XSS가 있지만 일반적인 태그는 막힌다. 하지만 SVG 태그와 이벤트는 허용되는 것이 있다. XSS를 이용하여 클릭 시 alert하게 하라. 단, 타겟은 크롬 브라우저라 가정한다.

검색 입력란이 있다.

검색한 값은 h1 태그의 텍스트값으로 반사된다. 검색값은 search라는 이름의 URL 쿼리로 들어간다.

허용되는 태그를 찾기 위해 Intruder를 이용한다. XSS cheat sheet 에서 태그 목록을 복사할 수 있다.

discard, image, svg, title 태그가 필터링되지 않는다. 문제 설명란에서 SVG 태그에 대해 언급했으므로 이 태그와 관련된 페이로드를 찾는다. (또는 각 태그별로 사용 가능한 핸들러를 테스트해 XSS 가능한 태그를 찾아볼 수도 있다.)

discard 태그는 svg 태그와 함께 쓰이는 태그이다. <svg><discard ~~ ></svg> 와 같은 형식으로 쓰인다. 특정 요소를 폐기할 시간을 지정하여 클라이언트의 메모리를 절약하게 해주는 태그이다.

이번에는 discard 태그의 핸들러 중 사용 가능한 핸들러가 있는지 Intruder를 이용해 찾아본다. XSS cheat sheet 에서 핸들러 목록도 얻을 수 있다.

onbegin 이벤트 핸들러가 필터링되지 않는다는 점을 알아냈다. 이 핸들러를 이용해 페이로드를 짠다.

<svg><discard%20onbegin=alert(1)></svg> 페이로드를 보내면 성공한다. 참고로 이 페이로드는 치트시트에 크롬에서만 작동한다고 써 있는데, 실제로 alert 창이 뜨지는 않았다. 브라우저 버전에 따라 더이상 먹히지 않을 지도 모르겠다.

이 취약점은 사용자가 입력한 값을 검증할 때 예외를 두어 발생하였다.


tags: writeup, xss, reflected xss, wstg-inpv-01, discard-tag, web hacking