이 취약점에 대한 **테스트**는 **SSTI**의 경우와 매우 **유사**합니다. 해석기는 **템플릿**을 기대하고 실행할 것입니다. 예를 들어, `{{ 7-7 }}`와 같은 payload로, 앱이 **취약**하다면 `0`을 볼 수 있고, 그렇지 않으면 원본인 `{{ 7-7 }}`을 볼 수 있습니다.
AngularJS는 HTML과 상호 작용하는 널리 사용되는 JavaScript 프레임워크로, **`ng-app`**과 같은 디렉티브로 알려진 속성을 통해 HTML과 상호 작용합니다. 이 디렉티브는 AngularJS가 HTML 콘텐츠를 처리하고 중괄호 안에 JavaScript 표현식을 실행할 수 있게 합니다.
사용자 입력이 `ng-app`으로 태그된 HTML 본문에 동적으로 삽입되는 시나리오에서 임의의 JavaScript 코드를 실행할 수 있습니다. 입력 내에서 AngularJS 구문을 활용하여 이를 달성할 수 있습니다. 아래는 JavaScript 코드가 실행되는 방법을 보여주는 예시입니다:
매우 **기본적인 온라인 예제**로 **AngularJS** 취약점을 [http://jsfiddle.net/2zs2yv7o/](http://jsfiddle.net/2zs2yv7o/)에서 찾을 수 있으며 **[Burp Suite Academy](https://portswigger.net/web-security/cross-site-scripting/dom-based/lab-angularjs-expression)**에서도 확인할 수 있습니다.
[**Angular 1.6에서 샌드박스가 제거**](http://blog.angularjs.org/2016/09/angular-16-expression-sandbox-removal.html#:\~:text=The%20Angular%20expression%20sandbox%20will,smaller%20and%20easier%20to%20maintain.\&text=Removing%20the%20expression%20sandbox%20does,surface%20of%20Angular%201%20applications.)되어 이 버전부터 `{{constructor.constructor('alert(1)')()}}` 또는 `<input ng-focus=$event.view.alert('XSS')>`와 같은 페이로드가 작동해야 합니다.
[https://vue-client-side-template-injection-example.azu.now.sh/](https://vue-client-side-template-injection-example.azu.now.sh/)에서 **취약한 Vue** 구현을 찾을 수 있습니다.\
그리고 취약한 예제의 **소스 코드**는 여기에서 확인할 수 있습니다: [https://github.com/azu/vue-client-side-template-injection-example](https://github.com/azu/vue-client-side-template-injection-example)
VUE에서 CSTI에 대한 매우 좋은 포스트를 찾을 수 있습니다. [https://portswigger.net/research/evading-defences-using-vuejs-script-gadgets](https://portswigger.net/research/evading-defences-using-vuejs-script-gadgets)
**더 많은 페이로드는** [**https://portswigger.net/research/abusing-javascript-frameworks-to-bypass-xss-mitigations**](https://portswigger.net/research/abusing-javascript-frameworks-to-bypass-xss-mitigations)
<summary><strong>제로부터 영웅이 될 때까지 AWS 해킹 배우기</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>