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: helloLast 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等工具修改原始字符
- 构造URL:
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应用程序,安全测试人员也能更有效地识别和报告此类漏洞。