从业者-DOM型XSS-AngularJS表达式-尖括号与双引号HTML编码
# 实验室:DOM型XSS-AngularJS表达式-尖括号与双引号HTML编码
# 题目
此实验室在 搜索功能 的AngularJS (opens new window)表达式中包含一个基于 DOM 的跨站脚本漏洞。
AngularJS 是一个流行的 JavaScript 库,它扫描包含ng-app
属性(也称为AngularJS指令)的 HTML 节点内容。当一个指令被添加到 HTML 代码中时,可以在双花括号内执行 JavaScript 表达式。当尖括号被过滤并编码时,则花括号技术非常有用。
若要解决实验室问题,请执行跨站脚本攻击,该攻击执行 AngularJS 表达式并调用alert
函数。
- name: 实验室-从业者
desc: DOM型XSS-AngularJS表达式-尖括号与双引号HTML编码 >>
avatar: https://fastly.statically.io/gh/clincat/blog-imgs@main/vuepress/static/imgs/docs/burpsuite-learn/public/lab-logo.png
link: https://portswigger.net/web-security/cross-site-scripting/dom-based/lab-angularjs-expression
bgColor: '#001350'
textColor: '#4cc1ff'
1
2
3
4
5
6
2
3
4
5
6
# 实操
点击 “ACCESS THE LAB” 进入实验室。
在首页可以看到一个搜索功能,尝试输入任意字符并点击 “Search”。
网页以 GET 方式提交了这些字符,参数名为search
,这些字符被包含在了即时响应中。
但响应中的尖括号<
与>
都被编码,经典的script
载荷未能被解析和执行。
根据题意,尝试注入 AngularJS 表达式,提交两个花括号并做数学运算:
?search=carsaid{{5 * 5}}
1
提交之后,所做的数学运算5*5
被成功解析了,响应中返回了运算结果25
。
尝试在花括号中调用 alert 函数,失败。
因为在 AngularJS 中,函数的调用方式不太一样。
我们可以使用官方提供的现成载荷。
在那之前,先启用浏览器开发者工具,确认一下网站所使用的 AngularJS 版本,此处为1.7.7
。
访问官方教程中提供的XSS备忘单 (opens new window),在其中找到适用于1.7.7
版本的 AngularJS 攻击载荷。
{{$on.constructor('alert(1)')()}}
1
回到实验室页面,注入刚刚找到的攻击载荷,成功调用 alert 函数。
{{$on.constructor('alert(1)')()}}
1
实验完成。
编辑 (opens new window)