meta标签注入

概述

<meta> 标签表示不能由其他HTML相关元素表示的元数据。一些 <meta> 标签是信息性的,例如:

<meta name="name" content="content">

然而,其中一些会以某种方式影响页面,例如:

<meta http-equiv="content-security-policy" content="default-src 'none'; base-uri 'self'">

内容安全策略(Content Security Policy)不 regulating <meta> 元素。

<meta http-equiv=...> 是页面上的一个标签,可以模拟通常为页面头保留的功能子集。<meta http-equiv=...> 可以执行的危险功能包括:

  • set-cookie

    • set-cookie 指令已从标准中移除,在 Firefox 68 和 Chrome 65 中不再支持。

  • refresh

    • 重定向到任何常规URL。

    • 重定向到任何 data: URL。

使用 data: 方案执行任意JavaScript

带有 content = "0; data: " URI 的 <meta> 标签可用于执行任意JavaScript代码,例如:

<meta name="language" content="0;data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==" http-equiv="refresh"/>

这仅在Safari上有效。Firefox和Chrome会阻止这个操作:

  • Firefox不允许将顶层框架导航到data URL。

  • Chrome不允许导航到顶层 data: URI。

开放重定向

可以使用以下payload将用户重定向到任意页面:

<meta name="language" content="5;http://malicious-website.com" http-equiv="refresh"/>

参考资料

最后更新于