Agent Skills
返回列表
🤖

悬空标记注入

AI Agent 更新于 2026.08.30

将以下提示词粘贴到你的 AI 对话框中:

请根据 https://skillhub.cn/install/skillhub.md,安装 @user_3c6cb52e/dangling-markup-injection-if7r。

技能介绍

要解决什么问题

当你拿到一个 HTML 注入点(反射型或存储型),却发现 JavaScript 执行被层层堵死:CSP 禁止内联脚本与事件处理器,消毒器剥掉 onerror、onload 等属性,WAF 拦下已知 XSS 模式。很多模型会直接判定「不可利用」,转而寻找别的出路——但页面里 CSRF token、预填的邮箱和用户名、API Key、隐藏字段里的会话标识往往就排在注入点之后。

这个技能回答的问题是:不执行 JS,能不能把数据带出去?答案是让浏览器自己发起一次请求,并把敏感内容拼进 URL 里。

技能如何工作

核心机制是注入一个未闭合的 HTML 标签,其 src、href、action 等属性指向攻击者服务器。未闭合的引号会「吞掉」后续所有页面内容,直到浏览器找到匹配的下一个引号——这段内容便成为发往攻击者域名的 URL 查询串。

主要利用向量:

  • <img> 标签(最常见):浏览器发起 GET,吞下的内容作为查询参数外传;被 img-src 限制。
  • <form action> 劫持:注入点之后的 </form> 闭合攻击者表单,中间所有 input 在用户交互(甚至自动提交)时被发往攻击者;被 form-action 限制。
  • <base> 标签:页面后续所有相对 URL 都解析到攻击者服务器,可顺带劫持脚本与表单提交;被 base-uri 限制。
  • <meta http-equiv="refresh">:整页跳转,吞下的内容进入 URL;被 navigate-to 限制(很少设置)。
  • <link> / <style>:浏览器把 URL 当作 CSS 资源请求;被 style-src 限制。
  • <textarea> + 表单组合:未闭合的 textarea 把后续 HTML 全部当作纯文本吞下,配合表单劫持是最可靠的备选方案。
  • <video poster>、旧式 <table background>:适用于老浏览器。

适用边界与注意点

  • 引号类型决定成败:页面属性用 ",就用 ' 注入,反之亦然。引号不匹配只会吞下无用内容甚至什么都不吞。
  • 注入点必须在目标数据之前:CSRF token 若位于注入点上方,悬空标记吃不到它。
  • 浏览器行为有差异:Chrome/Edge 会拦截属性值中含 <、>、` `` 的悬空标记,Firefox 更宽松且允许属性值换行,Safari 接近 Chrome。
  • CSP 不是万能答案:每个向量对应不同的指令限制,img-src 拦不住 DNS prefetch,style-src 拦不住 form-action。
  • window.name 跨源持久:若能注入 iframe,name 属性配合跳转是罕见的跨源数据通道。
  • <meta http-equiv="Content-Security-Policy"> 不可注入,但 <base> 可以。

使用场景

  • 在 CSP 禁止内联脚本、事件处理器被消毒器剥掉的注入点上,判断页面后方的 CSRF token 是否仍可外泄。
  • 评估 form action 劫持能否在用户提交表单前,把预填的邮箱、API Key 等字段带往攻击者服务器。
  • 测试页面中注入 <base> 标签后,后续相对 URL 的脚本加载与表单提交是否会被重定向到攻击者域名。
  • 在 WAF 拦截已知 XSS 特征的情况下,验证 DNS prefetch 或 textarea 组合能否绕过限制带走 token。

适合人员

  • 负责 Web 应用安全的渗透测试工程师,需要在 CSP 封锁脚本的场景里寻找仍能窃取数据的真实路径。
  • 编写 AI 安全评估用例的研究员,想验证大模型在「不可利用」判断上是否会漏掉悬空标记注入。
  • 制定前端加固规范的工程师,要确认 img-src、form-action、base-uri 等指令分别挡住哪些利用向量。
  • 接手遗留系统的安全工程师,页面残留大量未闭合表格与老式属性,想评估旧浏览器上的注入风险。