介绍

在过去十年中,前端开发发生了巨大的变化。大多数现代Web应用程序都是使用诸如AngularJS、React、Vue等前端框架。根据谷歌的说法,“AngularJS是一款基于javascript的开源前端Web框架,主要由谷歌和社区进行维护,它可用来解决在开发单页应用时遇到的众多挑战”。大多数人都默认为这些框架对XSS这样的漏洞应该天生免疫,但事实并非如此,它们只是利用方式(和传统XSS对比)有点不同。

Angular

在处理Angular应用时,有几件事情你需要了解。我将简要介绍几个Angular的特点,比如模板、表达式和作用域,它们对理解Angular中的客户端模板注入至关重要。

当你在浏览器中查看Angular应用时,实际上是在查看一个模板。一个模板是一个HTML片段,告诉Angular如何在Angular应用中渲染组件。模板的主要优点是你可以传递数据,动态生成HTML代码。下面是一个模板示例:

Welcome {{Username}}!

正如你所看到的,模板创建了一个h1标签来欢迎当前的用户。{{Username}}是一个表达式,它会根据你的用户名进行更改。如果用户名是ghostlulz,那么应用将显示Welcome ghostlulz!,Angular的这种动态生成方式使HTML页面变得非常灵活,无需使用下面的静态页面:

Welcome ghostlulz!

表达式也像javascript的代码片段。和javascript表达式一样,Angular表达式也可以包含文字、操作符和变量,如下图所示:1+1

a+b

user.name

items[index]

与针对全局窗口的javascript表达式不同,Angular表达式针对的是作用域对象。这意味着如果你试图使用alert(1),它就会报错,因为作用域内没有“alert”函数(除非你定义了一个)。作用域只是一个对象,你可以在其中定义变量和函数,如下图所示:$scope.username = "Ghostlulz";

$scope.greetings = function() {

return 'Welcome ' + $scope.username + '!';

};

客户端模板注入(XSS)

根据谷歌“当应用把用户输入嵌入到客户端模板框架时,客户端模板注入漏洞就出现了”的说法。Angular是一个客户端模板框架,你可以将用户输入嵌入到这些模板中。这也使得Angular成为这类漏洞的完美攻击目标。

假设你在一个站点上测试XSS,你可以这样做:

你可以发现,并没有弹出警告框,这是因为服务器在解析输入之前进行了编码,具体代码如下所示。<?php

// GET parameter ?q= mit sicherem escaping

$q = $_GET['q'];

echo htmlspecialchars($q,ENT_QUOTES);

?>

这(编码)是一种非常流行的防御XSS的方法,对于大多数应用来说已经足够了,但是Angular不同。在Angular中,我们可以使用不需要使用特殊字符的表达式,这不会受到htmlspecialchars函数的影响,如下所示:

如上图所示,我使用了表达式{{1+1}},它的值是“2”。而这就表明应用很容易受到客户端模板注入的影响。

仅仅让目标应用将两个数字相加并不那么令人兴奋,但是如果我们可以注入javascript代码呢?现在我们知道不能简单地插入一个alert(1)函数,因为该函数并没有在作用域对象中定义。

默认情况下,作用域对象包含另一个名为“构造器”的对象,该对象包含一个也被称为“构造器”的函数。此函数可用于动态生成和执行代码。而这正是我们执行XSS的payload所需要的,如下图所示:{{constructor.constructor('alert(1)')()}}

请注意这个payload不包含任何特殊字符。因此编码函数无法对此进行防御(编码也是大多数XSS的防御手段)。

正如你在上面看到的,我们的恶意Angular表达式被注入到页面中,导致应用程序动态地生成和执行我们的payload。

为了防御这种类型的攻击,Angular 1.2-1.5版本包含了一个沙箱。但在1.6版以上版本中被删除了,因为沙箱没有提供真正的安全性,存在很多绕过。如果你所测试的应用的Angular版本在1.2 - 1.5之间,那么就需要查找对应该版本的沙箱绕过,这样才能使XSS有效执行。

结论

新技术往往会带来新漏洞。任何接受用户输入的客户端模板框架都可能受到客户端模板注入的攻击。由于Angular使用了“表达式”,所以我们可以借此绕过传统的XSS防护。大多数开发人员严重依赖过去的安全防护方法,忽视了新技术可能带来的新风险。本文由白帽汇整理并翻译,不代表白帽汇任何观点和立场

来源:http://ghostlulz.com/angularjs-client-side-template-injection-xss/

html用戶訊息展示模板,AngularJS客户端模板注入(XSS)相关推荐

  1. 如何強迫 .Net 應用程式輸出英文的例外訊息

    转自:http://feeds.feedburner.com/~r/TheWillWillWeb/~3/358986630/post.aspx 因為常常需要跟國外 Blogger 交流,甚至回報某些國 ...

  2. (原創) 如何解決移除DSP Builder後,在Matlab殘留錯誤訊息的問題? (SOC) (DSP Builder) (Matlab)...

    Abstract若在Matlab安裝過DSP Builder,日後將DSP Builder移除後,只要一起動Matlab就有錯誤訊息,該如何解決呢? Introduction 使用環境:Matlab ...

  3. 「MTA」的「錯誤訊息代碼」

    1. 什麼是 MTA? MTA(Mail Transfer Agent ):郵件傳送代理,由「郵件伺服器」扮演 MTA 角色,負責完成 MUA (郵件使用代理,即 Outlook Express 等郵 ...

  4. (原創) 如何讓Linux開機時,不要在圖形介面顯示開機訊息? (OS) (Linux) (CentOS)

    Abstract 玩Linux的成就感之一,就是開機時看到每個硬體裝置和服務一個一個顯示[OK],但進入X Window後,一些開機訊息會顯示在圖形介面中,有沒有辦法使用文字模式完整的顯示開機訊息呢? ...

  5. 開啟 Excel 檔案出現錯誤訊息【Windows 找不到檔案路徑

    http://support.microsoft.com/kb/2436325/zh-tw 爲什麽當我開啟 Excel 檔案時,會出現下列訊息[Windows 找不到檔案路徑\檔案名稱,請確定您輸入正 ...

  6. HTML5 APP项目展示响应式网页模板

    简介: 国外的一款APP项目展示HTML单页模板 1.该模板代码干净整洁: 2.效果相当的炫酷,相当简洁大气高端,模板简单,全部已数据调用 3.网站手工DIV+css,代码精简,首页排版整洁大方.布局 ...

  7. foundApp宣传展示页企业网站模板

    简介: foundApp宣传展示页企业网站模板 网盘下载地址: http://kekewl.cc/UUALmAsYR9y0 图片:

  8. 擴展 CommandField 類別 - 刪除提示訊息

    GridView 中 CommandField 的刪除鈕預設是沒有刪除提示訊息,一般的作法是在 GridView 的 RowDataBound 事件中找到 CommandField 中的按鈕來設定它的 ...

  9. 移动端通用元件库+app通用元件库+数据展示+操作反馈+通用模板+数据录入+列表页+表单页+详情页+通用版布局+移动端手机模板+业务组件+反馈组件+展示组件+表单组件+导航组件

    移动端通用元件库+app通用元件库+数据展示+操作反馈+通用模板+数据录入+列表页+表单页+详情页+通用版布局+移动端手机模板+业务组件+反馈组件+展示组件+表单组件+导航组件 原型展示及下载地址:h ...

最新文章

  1. python print怎么用_python print用法是什么
  2. 本地生活JAVA版本_赶集生活java版
  3. 20165305 苏振龙 《Java 程序设计》第一次测试总结
  4. Linux下的signal信号机制
  5. 盛严谨,严谨,再严谨。_评估员工调查的统计严谨性
  6. java时间方法_JAVA处理日期时间常用方法
  7. 消息队列面试 - 为什么使用消息队列,消息队列有什么优点和缺点?
  8. Java里面长什么样,Java对象在JVM中长啥样
  9. Vss2005局域网开发权限设置指南
  10. getconf 取系统配制 --CPU
  11. python def函数报错详解_JSer 快速入门 Python 之函数详解
  12. python函数中的关键字参数
  13. 这些超好用的 Mac 系统自带软件,来试试
  14. mysql 求和_mysql分组求和
  15. GO语言中文字符串编码转换
  16. 模拟MP-BGP建立全过程(BGP MPLS vpn)
  17. 架构师之路(七)之五视图方法论
  18. 【误判心理学】查理芒格的25种误判心理倾向
  19. java弹窗设置为不可关闭_javascript实现无法关闭的弹框
  20. 忽视警告_不要忽视下雨的风险2

热门文章

  1. 如何获取当前设备的机型(更新到iPhoneX)?判断机型是否为iPhone X?
  2. 【Bzoj3531】旅行
  3. 《软件安装》VMware Workstation 不注册 下载
  4. 手机杀应用后台解决方法
  5. 做知识图谱遇到的环境问题合集【spacy、gensim、keras_contrib等】
  6. 【干货Tips】最全的机器学习竞赛平台网址及赛事汇总~
  7. fluentd mysql_ELK系列~Fluentd对大日志的处理过程~16K
  8. R语言使用c函数将两个向量数据合并起来形成一个新的向量(to one long vector)
  9. 解决smplayer中文字幕乱码
  10. 若依框架-------弹层表格