从业者-反射型DOM XSS
# 实验室:反射型DOM XSS
# 题目
此实验室包含一个反射型的 DOM 漏洞。当服务器端应用程序处理来自请求的数据,并在响应中回显数据时,会发生反射型 DOM 漏洞。网页上的脚本会以不安全的方式处理反射的数据,最终将其写入危险的接收器。
若要解决实验室问题,请创建一个调用alert()
函数的注入。
- name: 实验室-从业者
desc: 反射型DOM XSS >>
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-dom-xss-reflected
bgColor: '#001350'
textColor: '#4cc1ff'
1
2
3
4
5
6
2
3
4
5
6
# 实操
点击 “ACCESS THE LAB” 进入实验室。
在首页可以看到一个搜索功能,尝试输入任意字符并点击 “Search”。
搜索之后,启用浏览器开发者工具,查看网页源代码,发现一处 JavaScript 定义了函数search
,函数中有一段关键代码:
eval('var searchResultsObj = ' + this.responseText);
1
以上代码会获取search
参数值 并拼接到字符串中,然后传递给eval
函数。
在搜索时捕获请求数据包,发现有 2 次请求。
第一个请求,用于调用search
函数。
第二个请求,由search
函数发起,搜索实际的博客内容。
由于搜索的内容不存在,所以返回值results
为空,但该参数并不是我们的目标,值得注意的是searchTerm
。
尝试在 GET 的search
参数中添加一个双引号"
,发现其被反斜杠转义。
?search=carsaid"
1
但,应用程序经常会犯一个错误——未转义反斜杠字符本身。此时,我们可以使用自己的反斜杠字符,来抵消应用程序所添加的反斜杠。
说干就干,在原有的引号前面添加一个反斜杠,然后发送数据包:
?search=carsaid\"
1
我们的反斜杠成功吃掉了 应用程序后来添加的反斜杠。
根据上下文构造攻击载荷
- 使用
\
吃掉应用程序的反斜杠 - 使用
"
脱离字符串 - 使用
}
闭合 JSON 数据 - 使用
;
结束前面的代码 - 使用
//
注释掉后面的代码
alert 函数则被包含在中间:
?search=\"};alert(1)//
1
虽然看起来成功了,但在 BurpSuite 中无法直观地看到 XSS 的攻击结果。
改为使用浏览器访问,成功调用 alert 函数。
实验完成。
编辑 (opens new window)