我正在为.net MVC应用程序进行渗透测试。该应用程序使用Javascript框架/库,如Jquery和angular JS。
网页上有一个输入字段,我可以插入<script>alert(1)</script>.
Web应用程序通过AJAX响应(json响应)发回输入。我可以发现我的输入反映在网页上,但是我给测试XSS的javascript有效负载没有执行。我已经在谷歌浏览器和IE浏览器中进行了测试。
我检查了AJAX响应,并且没有输出编码。
虽然标题X-XSS-Protection:1; mode = block存在,我在Google Chrome控制台中没有看到任何关于阻止不安全脚本的错误(如果chrome阻止执行不安全的javascript,我们通常会收到此错误)。
我检查了以下网址,看看angual-js是否默认输出编码/转义。 https://docs.angularjs.org/guide/security但是没有完全理解。
当我检查元素,即我的输入(<script>alert(1)</script>
)时,我得到以下内容:
<textarea rows="3" ng-model="abc" maxlength="500" placeholder="xyz" ng-readonly="abcd>1" input-restrictor="" class="ng-pristine ng-valid ng-valid-maxlength ng-not-empty ng-touched" aria-multiline="true" aria-invalid="false" readonly="readonly"></textarea>
为什么我的JS有效负载没有在浏览器中执行?
答案 0 :(得分:0)
最后我得到了答案。 AngularJS在呈现内容之前不会输出编码。 我们的有效载荷-
<script>alert('xss')</script>
变成如图所示的类似内容。浏览器将其视为纯文本而不是javascript,因此无法执行。
仅当您检查元素并右键单击并编辑为HTML时,才能看到输出编码。我还在这里写了更详细的博客文章 https://medium.com/@nav7neeet/angular-js-and-xss-458eea91f3a5