1.bWAPP HTML Injection (HTML注入)
字数 2061 2025-08-11 17:40:08
HTML注入漏洞教学文档
1. HTML注入概述
HTML注入是一种Web安全漏洞,攻击者能够将恶意HTML代码注入到网页中,当其他用户访问该页面时,这些代码会被浏览器执行。这种漏洞通常发生在应用程序未对用户输入进行适当过滤和转义的情况下。
2. HTML注入类型
2.1 Reflected (GET) 反射型HTML注入(GET方式)
漏洞URL: http://range.anhunsec.cn:82/htmli_get.php
低级漏洞(Low Level)
- 输入数据没有做任何校验
- 直接接受用户输入并显示在页面上
Payload示例:
First name: <h1>hello</h1>
Last name: <h1>test</h1>
<a href="https://www.baidu.com">baidu</a>
<script>document.write(document.URL)</script>
<script>alert(document.cookie)</script>
<script>alert(/xss/)</script>
中级漏洞(Medium Level)
- 采用黑名单机制,转义部分危险数据
- 使用
urldecode函数对输入进行URL解码
绕过方法:
使用URL编码绕过过滤
Payload示例:
First name: %3Ch1%3Ehello%3C/h1%3E
Last name: %3Ch1%3Eworld%3C/h1%3E
%3ca+href%3d%27https%3a%2f%2fwww.baidu.com%27%3ebaidu%3c%2fa%3e
高级漏洞(High Level)
- 使用
htmlspecialchars()函数过滤 - 将预定义字符(&, ", ', <, >)转换为HTML实体
- 无法绕过
2.2 Reflected (POST) 反射型HTML注入(POST方式)
漏洞URL: http://range.anhunsec.cn:82/htmli_post.php
- 操作方式与GET类型相同,只是提交方式变为POST
- 同样存在低、中、高三个安全级别
2.3 Reflected (Current URL) 基于当前URL的反射型HTML注入
漏洞URL: http://range.anhunsec.cn:82/htmli_current_url.php
低级漏洞(Low Level)
- URL中的输入自动转义为URL编码
- 可在Burp Suite中还原原始字符进行攻击
Payload示例:
http://range.anhunsec.cn:82/htmli_current_url.php?a=<script>alert('xss')</script>
中高级漏洞(Medium & High Level)
- 中等级别使用
xss_check_3检测 - 高级别同样使用
htmlspecialchars()函数过滤
2.4 Stored (Blog) 存储型HTML注入
漏洞URL: http://range.anhunsec.cn:82/htmli_stored.php
低级漏洞(Low Level)
- 直接执行注入的脚本
Payload示例:
<script>alert(/xss/)</script>
中高级漏洞(Medium & High Level)
- 使用
sqli_check_3检测 - 通过
mysqli_real_escape_string()函数转义特殊字符
2.5 iFrame Injection iframe注入
漏洞URL: http://range.anhunsec.cn:82/iframei.php?ParamUrl=robots.txt&ParamWidth=250&ParamHeight=250
低级漏洞(Low Level)
- 可控制ParamUrl参数加载任意内容
Payload示例:
ParamUrl=../admin/phpinfo.php&ParamWidth=250&ParamHeight=250
ParamUrl=https://www.baidu.com&ParamWidth=250&ParamHeight=250
中级漏洞(Medium Level)
- 使用
addslashes()函数过滤 - 只能通过控制ParamHeight和ParamWidth实现注入
Payload示例:
ParamUrl=robots.txt&ParamWidth=250"></iframe><script>alert(/xss/)</script>&ParamHeight=250
高级漏洞(High Level)
- 使用
htmlspecialchars()函数过滤 - 将特殊字符转换为HTML实体
3. 防御措施
3.1 输入验证
- 对所有用户输入进行严格验证
- 使用白名单机制而非黑名单
3.2 输出编码
- 使用
htmlspecialchars()函数对输出进行编码 - 设置适当的编码参数(如
ENT_QUOTES)
3.3 安全函数
- 使用
mysqli_real_escape_string()防止SQL注入 - 使用
addslashes()进行基本转义(但不适用于XSS防御)
3.4 内容安全策略(CSP)
- 实施CSP限制可执行脚本的来源
4. 关键函数解析
4.1 htmlspecialchars()
htmlspecialchars($data, ENT_QUOTES, $encoding);
- 将特殊字符转换为HTML实体
ENT_QUOTES- 转换单引号和双引号- 支持的字符: &, ", ', <, >
4.2 urldecode()
- 对URL编码的字符串进行解码
- 可用于绕过简单的过滤机制
4.3 addslashes()
addslashes($data);
- 在需要引用的字符前添加反斜杠
- 处理的字符: ', ", , NULL
- 不适用于XSS防御
4.4 mysqli_real_escape_string()
mysqli_real_escape_string($link, $data);
- 转义SQL语句中的特殊字符
- 主要用于防止SQL注入
5. 测试方法
- 识别所有用户输入点
- 尝试注入简单HTML标签(如
<h1>) - 尝试注入JavaScript代码(如
<script>alert(1)</script>) - 尝试URL编码绕过
- 检查服务器响应
- 逐步升级攻击复杂度
6. 总结
HTML注入漏洞的核心问题是未对用户输入进行适当过滤和输出编码。防御的关键在于:
- 对所有用户输入进行验证
- 对所有输出进行编码
- 使用安全函数处理特殊字符
- 实施深度防御策略