본문 바로가기
Portswigger/DOM-based vulnerabilities

Portswigger - DOM XSS using web messages solution

by jh117jh 2024. 1. 15.
728x90

 

이번 문제는 웹 메시지를 이용한 DOM XSS 문제다.

 

 

사이트의 html을 살펴보면 

addEventListener함수를 이용해 message를 수신을 받아 ads라는 id를 가진 div자리에 넣어주는 것 같다.

 

그럼 message를 수신받으려면 송신하는 방법도 알아야 되는 

여기서 사용되는것이 window.postMessage이다.

https://developer.mozilla.org/ko/docs/Web/API/Window/postMessage

 

Window.postMessage() - Web API | MDN

window.postMessage() 메소드는 Window 오브젝트 사이에서 안전하게 cross-origin 통신을 할 수 있게 합니다. 예시로, 페이지와 생성된 팝업 간의 통신이나, 페이지와 페이지 안의 iframe 간의 통신에 사용할

developer.mozilla.org

 

window.postMessage() 메서드는 Window 오브젝트 사이에서 안전하게 cross-origin 통신을 할 수 있게 한다. 예시로, 페이지와 생성된 팝업 간의 통신이나, 페이지와 페이지 안의 iframe 간의 통신에 사용할 수 있다.

 

Window.postMessage(message, targetOrigin);

 

문법은 메시지 내용과 보낼 주소로 이뤄져 있다.

 

그럼 iframe을 이용하여 메시지를 보내보자

 

<iframe  src="https://0aab0052038612d2802d030700d1004d.web-security-academy.net/" 
height=100% width=100% onload="this.contentWindow.postMessage('<img src=1 onerror=print()> '
, 'https://0aab0052038612d2802d030700d1004d.web-security-academy.net/')">

 

 

iframe이 로드될 때 메시지가 보내지며 iframe의 윈도우 객체에 접근하기 위해 contentwindow를 사용하여 <img src=1 onerror=print()> 문자를 보내 print함수를 출력하게 한다.

 

https://developer.mozilla.org/en-US/docs/Web/API/HTMLIFrameElement/contentWindow

 

HTMLIFrameElement: contentWindow property - Web APIs | MDN

The contentWindow property returns the Window object of an HTMLIFrameElement.

developer.mozilla.org

 

 

그 결과

 

이미지 로드에 실패하며 print() 함수가 출력된다.

 

728x90