1.bWAPP HTML Injection (HTML注入)
字数 2540 2025-08-24 16:48:07

bWAPP HTML注入漏洞全面解析与防御指南

1. HTML注入基础概念

HTML注入是一种Web安全漏洞,攻击者能够将恶意HTML代码注入到网页中,当其他用户访问该页面时,这些代码会被浏览器执行。这种攻击可能导致会话劫持、钓鱼攻击、页面篡改等安全问题。

2. bWAPP中的HTML注入漏洞类型

2.1 Reflected (GET) 型HTML注入

漏洞URL: http://range.anhunsec.cn:82/htmli_get.php

Low级别漏洞

  • 特点: 输入数据未经任何校验和处理
  • 测试payload:
    • 基本测试: First name: hello Last name: test
    • 链接注入: <a href="https://www.baidu.com">baidu</a>
    • URL显示: <script>document.write(document.URL)</script>
    • Cookie窃取: <script>alert(document.cookie)</script>
    • XSS测试: <script>alert(/xss/)</script>

Medium级别漏洞

  • 防御机制: 黑名单机制,转义部分危险字符
  • 绕过方法: 使用URL编码
    • 标题注入: %3Ch1%3Ehello%3C/h1%3E%3Ch1%3Eworld%3C/h1%3E
    • 链接注入: %3ca+href%3d%27https%3a%2f%2fwww.baidu.com%27%3ebaidu%3c%2fa%3e

High级别漏洞

  • 防御机制: 使用htmlspecialchars()函数过滤
    • 将特殊字符(&, ", ', <, >)转换为HTML实体
    • 无法绕过,是安全的实现方式

2.2 Reflected (POST) 型HTML注入

漏洞URL: http://range.anhunsec.cn:82/htmli_post.php

  • 与GET型类似,只是提交方式变为POST
  • 测试payload相同

2.3 Reflected (Current URL) 型HTML注入

漏洞URL: http://range.anhunsec.cn:82/htmli_current_url.php

Low级别漏洞

  • 利用方法: 直接在URL参数中注入
    • 构造URL: http://range.anhunsec.cn:82/htmli_current_url.php?a=<script>alert('xss')</script>
    • 由于浏览器自动编码,需使用Burp Suite等工具修改原始字符

Medium & High级别

  • 查看源码发现使用了xss_check_3检测(同GET型的High级别)
  • 无法绕过

2.4 Stored (Blog) 型HTML注入

漏洞URL: http://range.anhunsec.cn:82/htmli_stored.php

Low级别

  • 直接在输入框中注入: <script>alert(/xss/)</script>

Medium级别

  • 防御机制: 使用sqli_check_3检测
    • 函数实现: mysqli_real_escape_string()转义SQL语句中的特殊字符
    • 主要防御SQL注入,对HTML注入防御有限

2.5 iFrame注入

漏洞URL: http://range.anhunsec.cn:82/iframei.php?ParamUrl=robots.txt&ParamWidth=250&ParamHeight=250

Low级别

  • 利用方法: 控制ParamUrl参数加载任意资源
    • 本地文件: ParamUrl=../admin/phpinfo.php
    • 外部网站: ParamUrl=https://www.baidu.com

Medium级别

  • 防御机制: 使用addslashes()函数处理输入
    • 转义单引号、双引号、反斜杠和NULL字节
  • 绕过方法: 通过控制其他参数注入
    • ParamUrl=robots.txt&ParamWidth=250"></iframe><script>alert(/xss/)</script>&ParamHeight=250

High级别

  • 防御机制: 使用htmlspecialchars()函数
    • 将特殊字符转换为HTML实体
    • 无法绕过

3. 关键防御函数解析

3.1 htmlspecialchars()

  • 将特殊字符转换为HTML实体
  • 参数:
    • ENT_QUOTES: 转换单双引号
    • 编码(如UTF-8)
  • 安全等级: 高

3.2 addslashes()

  • 在特定字符前添加反斜杠
  • 主要用于防御SQL注入
  • 对HTML注入防御有限

3.3 mysqli_real_escape_string()

  • 转义SQL语句中的特殊字符
  • 主要用于防御SQL注入

3.4 urldecode()

  • 对URL编码的字符串进行解码
  • 可能被用于绕过黑名单过滤

4. 防御建议

  1. 输入验证:

    • 对所有用户输入进行严格验证
    • 使用白名单而非黑名单
  2. 输出编码:

    • 使用htmlspecialchars()进行输出编码
    • 根据上下文选择适当的编码方式
  3. 内容安全策略(CSP):

    • 实施严格的CSP策略限制脚本执行
  4. 框架安全特性:

    • 使用现代框架的内置防护机制
  5. 安全编码实践:

    • 避免拼接HTML
    • 使用安全的API处理用户输入

5. 测试与验证方法

  1. 手动测试:

    • 尝试基本HTML标签注入
    • 测试事件处理属性(onclick, onload等)
    • 尝试JavaScript伪协议(javascript:)
  2. 编码绕过测试:

    • URL编码
    • HTML实体编码
    • Unicode编码
  3. 工具辅助:

    • 使用Burp Suite拦截和修改请求
    • 使用OWASP ZAP等工具自动化测试

通过全面理解这些HTML注入漏洞类型和防御机制,开发人员可以构建更安全的Web应用程序,安全测试人员也能更有效地识别和报告此类漏洞。

bWAPP HTML注入漏洞全面解析与防御指南 1. HTML注入基础概念 HTML注入是一种Web安全漏洞,攻击者能够将恶意HTML代码注入到网页中,当其他用户访问该页面时,这些代码会被浏览器执行。这种攻击可能导致会话劫持、钓鱼攻击、页面篡改等安全问题。 2. bWAPP中的HTML注入漏洞类型 2.1 Reflected (GET) 型HTML注入 漏洞URL : http://range.anhunsec.cn:82/htmli_get.php Low级别漏洞 特点 : 输入数据未经任何校验和处理 测试payload : 基本测试: First name: hello Last name: test 链接注入: <a href="https://www.baidu.com">baidu</a> URL显示: <script>document.write(document.URL)</script> Cookie窃取: <script>alert(document.cookie)</script> XSS测试: <script>alert(/xss/)</script> Medium级别漏洞 防御机制 : 黑名单机制,转义部分危险字符 绕过方法 : 使用URL编码 标题注入: %3Ch1%3Ehello%3C/h1%3E 和 %3Ch1%3Eworld%3C/h1%3E 链接注入: %3ca+href%3d%27https%3a%2f%2fwww.baidu.com%27%3ebaidu%3c%2fa%3e High级别漏洞 防御机制 : 使用 htmlspecialchars() 函数过滤 将特殊字符(&, ", ', <, >)转换为HTML实体 无法绕过 ,是安全的实现方式 2.2 Reflected (POST) 型HTML注入 漏洞URL : http://range.anhunsec.cn:82/htmli_post.php 与GET型类似,只是提交方式变为POST 测试payload相同 2.3 Reflected (Current URL) 型HTML注入 漏洞URL : http://range.anhunsec.cn:82/htmli_current_url.php Low级别漏洞 利用方法 : 直接在URL参数中注入 构造URL: http://range.anhunsec.cn:82/htmli_current_url.php?a=<script>alert('xss')</script> 由于浏览器自动编码,需使用Burp Suite等工具修改原始字符 Medium & High级别 查看源码发现使用了 xss_check_3 检测(同GET型的High级别) 无法绕过 2.4 Stored (Blog) 型HTML注入 漏洞URL : http://range.anhunsec.cn:82/htmli_stored.php Low级别 直接在输入框中注入: <script>alert(/xss/)</script> Medium级别 防御机制 : 使用 sqli_check_3 检测 函数实现: mysqli_real_escape_string() 转义SQL语句中的特殊字符 主要防御SQL注入,对HTML注入防御有限 2.5 iFrame注入 漏洞URL : http://range.anhunsec.cn:82/iframei.php?ParamUrl=robots.txt&ParamWidth=250&ParamHeight=250 Low级别 利用方法 : 控制ParamUrl参数加载任意资源 本地文件: ParamUrl=../admin/phpinfo.php 外部网站: ParamUrl=https://www.baidu.com Medium级别 防御机制 : 使用 addslashes() 函数处理输入 转义单引号、双引号、反斜杠和NULL字节 绕过方法 : 通过控制其他参数注入 ParamUrl=robots.txt&ParamWidth=250"></iframe><script>alert(/xss/)</script>&ParamHeight=250 High级别 防御机制 : 使用 htmlspecialchars() 函数 将特殊字符转换为HTML实体 无法绕过 3. 关键防御函数解析 3.1 htmlspecialchars() 将特殊字符转换为HTML实体 参数: ENT_QUOTES : 转换单双引号 编码(如UTF-8) 安全等级: 高 3.2 addslashes() 在特定字符前添加反斜杠 主要用于防御SQL注入 对HTML注入防御有限 3.3 mysqli_real_escape_string() 转义SQL语句中的特殊字符 主要用于防御SQL注入 3.4 urldecode() 对URL编码的字符串进行解码 可能被用于绕过黑名单过滤 4. 防御建议 输入验证 : 对所有用户输入进行严格验证 使用白名单而非黑名单 输出编码 : 使用 htmlspecialchars() 进行输出编码 根据上下文选择适当的编码方式 内容安全策略(CSP) : 实施严格的CSP策略限制脚本执行 框架安全特性 : 使用现代框架的内置防护机制 安全编码实践 : 避免拼接HTML 使用安全的API处理用户输入 5. 测试与验证方法 手动测试 : 尝试基本HTML标签注入 测试事件处理属性( onclick , onload 等) 尝试JavaScript伪协议( javascript: ) 编码绕过测试 : URL编码 HTML实体编码 Unicode编码 工具辅助 : 使用Burp Suite拦截和修改请求 使用OWASP ZAP等工具自动化测试 通过全面理解这些HTML注入漏洞类型和防御机制,开发人员可以构建更安全的Web应用程序,安全测试人员也能更有效地识别和报告此类漏洞。