[Web_Hacking] Reflected XSS -6

Song·2024년 9월 1일

XSS

목록 보기
7/12

Lab: Reflected XSS with some SVG markup allowed

문제

이 LAB은 일반적인 태그들은 차단당했지만 SVG 태그와 event는 차단하지 않았다. 이 LAB을 해결하기 위해서는 XSS 공격을 수행해 alert() 함수를 호출해라.


정보수집

💡 SVG 태그란?
SVG 태그는 HTML 문서 내에서 이러한 벡터 이미지(점, 선, 도형 등 수학적 수식에 기반하여 만들어진 이미지)를 직접 삽입하고 조작할 수 있게 해주는 태그입니다.

<animate> 같은 태그를 활용해 벡터 이미지들에 동적 움직임 또한 추가할 수 있습니다.

<svg> 태그는 보통 태그 안에 <line>, <circle>, <polygon>, <animate> 등의 태그를 작성하는 형태입니다.

<svg> 태그에 사용할 수 있는 속성들만으로는 JS코드를 실행할 수는 없기 때문에 현재 LAB에서 <svg> 태그가 허용되었다는 말은 <svg> 태그 안에 사용가능한 추가적인 태그가 있고 그 태그의 속성을 통해 JS 코드를 실행할 수 있을 것이라고 유추할 수 있습니다.

이전처럼 Burpsuite를 열고 Bruteforce를 사용해 사용가능한 태그와 속성을 확인해보도록 하겠습니다.


공격

1) 허용된 태그 찾기

우선 블로그를 검색하는 HTTP 요청을 잡아서 Intruder로 전송하고

사용가능한 태그들을 확인하기 위해 search의 값으로 <§§>를 입력합니다.

payload도 이전처럼 cheat sheet 사이트에서 copy tags to clipboard & paste 후 Start Attack.

허용되는 태그는 <animatetransform>, <image>, <title>, <svg>로 총 4개 입니다.

현재 LAB은 일반적은 태그나 속성은 차단되어있기 때문에 <image> 태그나 <title>태그에서 사용하는 속성은 사용하지 못할 가능성이 큽니다. 그래서 <animatetransform>에서 JS 코드를 사용할 수 있는 속성을 찾아보겠습니다.

2) 허용된 속성 찾기

search의 값을 <svg><animatetransform%20§§=1>로 변경하고,

주의❗
원래라면 <animatetransform §§=1>로 태그의 이름과 속성 사이를 공백으로 구분하는데 HTTP 요청을 전송할 때는 공백을 반드시 URL 인코딩해서 %20으로 입력해야 한다. 안그러면 공백 뒤에 적힌 값들은 인식하지 못한다.

cheat sheet 사이트에서 copy events to clipboard & paste 후 Start attack.

onbegin이라는 속성 하나만 허용이 되어있습니다.

onbegin은 animation이 시작될 때 JS 코드를 실행하는 속성입니다. 여기에 값으로 alert()함수를 입력하면 LAB을 해결할 수 있을 것 같습니다.

<svg><animatetransform></svg>

입력 후 전송하면

끝.


정리

XSS-4,5,6 전부 블랙 리스트 필터의 허점을 찾아 허용된 태그가 존재할 때, 일반 태그, custom-tag, svg 태그로 공격을 수행하는 법을 배워봤습니다.

블랙 리스트 필터는 지정한 값을 제외한 전부가 허용되기 때문에 custom-tag가 존재하는 HTML을 필터링하기에는 부족한 면이 있습니다. 그래서 되도록이면 화이트리스트 필터를 사용하는 것이 좋습니다.

profile
안녕하세요

0개의 댓글