728x90
이번 문제는 웹 메시지를 이용한 DOM XSS 문제다.
사이트의 html을 살펴보면
addEventListener함수를 이용해 message를 수신을 받아 ads라는 id를 가진 div자리에 넣어주는 것 같다.
그럼 message를 수신받으려면 송신하는 방법도 알아야 되는
여기서 사용되는것이 window.postMessage이다.
https://developer.mozilla.org/ko/docs/Web/API/Window/postMessage
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
그 결과
이미지 로드에 실패하며 print() 함수가 출력된다.
728x90
'Portswigger > DOM-based vulnerabilities' 카테고리의 다른 글
Portswigger - DOM XSS using web messages and JSON.parse solution (0) | 2024.01.18 |
---|---|
Portswigger - DOM XSS using web messages and a JavaScript URL solution (0) | 2024.01.17 |