AngularJS模板注入学习

google的xss game里出现了两道有关于AngularJS模板注入造成XSS的题目,之前没接触过,学习一下。

第一道题出现在level 5

其中核心部分的js如下:

一个DOM XSS,但是输出点在value中,这时可以用AngularJS的模板注入来执行弹窗,可以直接使用内置服务来完成{{$eval('alert(1)')}},除了$eval,还可以使用$evalAsync

第二题是level 6

输出点在<form action="/f/rWKWwJGnAeyi/?xxx=au1ge" method="POST">

尝试直接插入{{$eval('alert(1)')}}发现{貌似被过滤,可以直接使用html实体&lcub;来代替{

AngularJS的模板注入

在这篇文章:AngularJS客户端模板注入其中的一句话很好描述了AngularJS模板注入的条件和作用:

这也就意味着,只要可以注入双花括号,任何人都可以执行Angular语句。

有一个很重要的条件是Angular语句,而Angular有其自身的沙箱保护机制以及其域的概念,限制了我们能干的事情,但是因为太多bypass的方法导致1.6版本中沙箱的特性被移除,同时,即便是经过html编码的输入,也会被AngularJS执行。

参考

AngularJS-沙箱逃逸和XSS

基于DOM的AngularJS沙箱逃逸技术

AngularJS客户端模板注入