# Cross-site scripting Lab11
本題是 DOM-based XSS 搭配 AngularJS 表達式注入,而且尖括號(<, >)與雙引號(")都被 HTML encode 了,所以我們必須走 Angular 表達式注入的路線。
一樣先進入網站。

隨便找個東西並看原始碼。

AngularJS 會掃描有 `ng-app` 屬性的 HTML 元素,並解析裡面的 表達式,例如 `{{1+2}}`。
輸入的內容被反映在有 `ng-app` 的區域內,但 `<>` 與 `"` 都會被 encode,代表你無法直接注入 `<script>` 或 `onerror="..."`,這時候可以用 AngularJS 的表達式注入技巧來繞過。
所以利用 AngularJS 表達式注入觸發 alert:
```
{{$on.constructor('alert(1)')()}}
```
- `{{$on}}` 是 AngularJS 預設在 scope 裡的事件函數。
- `$on.constructor` 回傳的是 Function。
- `Function('alert(1)')()` 就等於執行 `alert(1)`。
在輸入框輸入並搜尋後:


---