从业者-XSS上下文-JavaScript字符串中-反射型XSS-尖括号双引号HTML编码和单引号转义
# 实验室:XSS上下文-JavaScript字符串中的反射型XSS-尖括号双引号HTML编码和单引号转义
# 题目
此实验室在 搜索查询跟踪功能 中包含一个反射型跨站脚本漏洞,其中尖括号和双引号进行了 HTML 编码,单引号被转义。
若要解决实验室问题,请执行跨站脚本攻击,该攻击脱离 JavaScript 字符串并调用alert
函数。
- name: 实验室-从业者
desc: XSS上下文-JavaScript字符串中的反射型XSS-尖括号双引号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/contexts/lab-javascript-string-angle-brackets-double-quotes-encoded-single-quotes-escaped
bgColor: '#001350'
textColor: '#4cc1ff'
1
2
3
4
5
6
2
3
4
5
6
# 实操
点击 “ACCESS THE LAB” 进入实验室。
映入眼帘的是一个令人熟悉的搜索功能。
被搜索的字符存在两个出口点,一个位于img
标签的src
属性中,另一个位于script
标签的 JavaScript 代码中。
尝试闭合原有 script 标签,失败,尖括号被过滤。
直接在原有script
标签中执行 JavaScript,失败,单引号被转义。
一些应用程序经常会犯错误——未转义反斜杠字符本身。
我们可以使用自己的反斜杠,抵消应用程序所添加的反斜杠:
\'-alert(1)-\'
1
成功抵消反斜杠,但 alert 函数依然没有被调用。
打开控制台,发现错误信息 “转义序列无效”。
注入之后的代码为:
var searchTerms = 'carsaid\'-alert(1)-\'';
1
前面的反斜杠位于字符串内,不会产生任何问题。
但后面的反斜杠位于实际的代码中,会导致整个 JavaScript 的运行出错。
这个问题很好解决。
将载荷后面的-\'
替换为注释符号//
,构造新载荷:
\';alert(5)//
1
注入之后,成功调用 alert 函数。
实验完成。
经过测试,以下载荷可以实现相同的效果:
\'-alert(5)//
1
编辑 (opens new window)