본문 바로가기
Portswigger/XSS

Portswigger - DOM XSS in jQuery selector sink using a hashchange event solution

by jh117jh 2023. 9. 1.
728x90

이번 문제는 홈페이지에 DOM based xss 취약점이 있고 location.hash기능을 이용해 자동으로 스크롤된다고 나와있다.

 

사실 확인을 위해 페이지에 접속 후 script부분을 보면

기본적으로 URL에 해시태그 뒤의 항목이 지정되면 웹에서 이 값을 검색하고 일치하는 항목으로 스크롤한다.

또한 window.location.hash.slice(1)부분은 hash부분을 그냥 가져오기 때문에 취약점이 될 수 있다.

 

확인해보면 게시물 중 Kids라는 단어를 포함한 게시물이 있다.

그럼 url 뒤에 #Kids를 입력하면 해당 게시물로 자동 이동되는 걸 볼 수 있다.

그리고 #<img src=1 onerror=alert(0)>를 입력하면 

이러한 취약점을 알 수 있다.

 

이제 문제에서는 피해자에게 익스플로잇을 전달하여 print()함수를 실행하라 했으니 이 취약점을 담아 전송하면 된다.

여기서 우리가 사용해야 될것은 iframe이다.

 

iframe이란?

iframe이란 Inline Frame의 약자로, 웹 브라우저 내에 도 다른 프레임, 즉 현재 브라우저에 랜더링 되고 있는 문서 안에 또 다른 HTML페이지를 삽입할 수 있도록 하는 기능이다.

 

예를 들어 게시물에 글 말고 지도, 동영상등을 삽입하고 싶을 때 사용한다. 간단하게 이 게시글 안에 유튜브 동영상을 넣으려면 유튜브 페이지를 가져와야 되는데 그 과정을 iframe을 사용한다 생각하면 편하다.

 

피해자에게 이렇게 전달하면 피해자가 받으면서 우리가 취약점을 확인했던 페이지가 로드가 되고

hash에 <img src=x onerror=print()>가 입력될것이다. 그러면 pirnt() 함수가 실행되어 상대방에게 호출되게 된다.

 

728x90