해당 LAB은 몇 개의 화이트리스트 태그들에 XSS 취약점이 존재한다. 단, 모든 event들과 anchor href 속성은 차단되어 있다.
해당 LAB을 해결하기 위해선 XSS 벡터를 주입하여, 클릭 시, alert() 함수가 호출되도록해야 한다.
참고로, 가상 유저가 당신의 벡터를 클릭하는 것을 유도하기 위해 당신의 벡터에 "Click" 문구가 포함되어야 한다.
예시:
<a href="">Click me</a>
우선 허용되는 태그를 확인하기 위해 브루트포스 공격을 수행하겠습니다.
기본적인 Burpsuite 사용법은 생략하겠습니다.
HTTP 요청을 잡아서 Intruder로 전송하고 search 파라미터의 값에 무작위 값을 대입하겠습니다.

payload는 burpsuite의 XSS Cheat sheet 사이트에서 tag들을 copy해 burpsuite에 paste 합니다.

Start Attack

총 5개의 태그가 허용된 상태입니다. 이전에도 한 번 했어던 svg 태그와 animate 태그가 있습니다. 이 둘에 a 태그를 함께 사용해 공격해보도록 하겠습니다.
우선 <svg> 태그와 <animate> 태그가 무엇인지 알아보겠습니다.
💡
<svg>란?
벡터 기반의 그래픽을 그리기 위한 컨테이너. 그림을 그리기 위한 캔버스, 혹은 영역을 지정하는 태그라고 생각하면 됩니다.
💡
<animate>란?
<svg>태그 안에서 애니메이션을 적용하기위한 태그입니다. 특정 요소들의 크기, 위치, 색상 등을 시간에 따라 변화시킬 수 있습니다.<svg> <circle cx="100" cy="100" r="50"> <animate attributeName="애니메이션할 속성" values="100;50;120"/> </circle> </svg>
- attributeName : svg 태그내에서 사용가능한 속성 지정해 애니메이션 할당. 부모 태그에 작성된 속성이 아니어도 됨.
- values : values에 작성된 값을 지정한 속성에 하나씩 대입. 각 값은 세미콜론으로 구분.
현재 href 속성이 block 되었기 때문에 a 태그에서 직접적으로 사용하는 것이 불가능합니다. 그러나, attributeName 속성을 사용하면 href 속성을 사용하는 것이 가능해집니다.
이 점을 이용해 공격을 수행해보도록 하겠습니다.
우선 가상의 유저가 클릭할 수 있도록 링크를 생성합니다.
<svg>
<a>
<text x=20 y=20>Click Me!</text>
</a>
</svg>

검색창 상단에 문구가 출력되는 것을 볼 수 있습니다. 이제 여기에 animate 태그를 추가합니다.
<svg>
<a>
<animate attributeName="href" values="javascript:alert(1)"/>
<text>Click Me!</text>
</a>
</svg>
여기서 javascript:alert(1)은 JavaScript URI로, 브라우저가 해당 URI를 만나면, 즉시 해당 JS 코드를 실행합니다.
위 코드를 입력하면 아무런일도 벌어지지 않지만, 클리어했다는 문구가 나타납니다.

끝.