news 2026/7/8 20:21:34

bWAPP 靶场 XSS 与 HTML 注入 4 种绕过手法:从编码到 DOM,实战对比 3 种过滤函数

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
bWAPP 靶场 XSS 与 HTML 注入 4 种绕过手法:从编码到 DOM,实战对比 3 种过滤函数

bWAPP 靶场 XSS 与 HTML 注入 4 种绕过手法:从编码到 DOM,实战对比 3 种过滤函数

1. 靶场环境与漏洞基础

bWAPP(Buggy Web Application)是一个专为 Web 安全测试设计的开源漏洞演练平台,包含 100 多种常见 Web 漏洞场景。作为安全研究的标准沙盒环境,其核心价值在于:

  • 多层级防护模拟:每个漏洞提供 Low/Medium/High 三种安全级别
  • 真实漏洞复现:覆盖 OWASP Top 10 所有风险项
  • 教学友好性:内置详细漏洞说明和修复建议

在 XSS 与 HTML 注入场景中,bWAPP 主要模拟了以下攻击面:

漏洞类型注入点位置危害等级
反射型 XSS (GET)URL 参数★★★★
存储型 XSS博客评论表单★★★★★
DOM 型 XSS客户端脚本解析★★★☆
iFrame 注入第三方资源嵌入参数★★★★

提示:实际测试时建议使用 Firefox 或旧版 IE 浏览器,Chrome 的 XSS Auditor 可能干扰部分攻击效果

2. 四种经典绕过手法解析

2.1 URL 编码双重转换

适用场景:当服务端对输入进行 HTML 实体编码但存在解码逻辑时

攻击步骤

  1. 构造基础 payload:<script>alert(1)</script>
  2. 进行第一次 URL 编码:
    %3Cscript%3Ealert%281%29%3C%2Fscript%3E
  3. 对编码结果再次 URL 编码:
    %253Cscript%253Ealert%25281%2529%253C%252Fscript%253E

原理分析

// 伪代码展示服务端处理流程 $input = urldecode($_GET['param']); // 第一次解码 → 得到单次编码字符串 $input = htmlspecialchars($input); // 转义特殊字符 echo urldecode($input); // 第二次解码 → 还原原始HTML标签

实战对比

  • Low 级别:直接执行
  • Medium 级别:需双重编码
  • High 级别:htmlspecialchars($data, ENT_QUOTES)完全防御

2.2 DOM 碎片注入

适用场景:当输入被插入到 JavaScript 字符串中时

payload 构造

';alert(1);// </script><script>alert(2)</script>

案例演示

<script> var userInput = '[攻击者输入]'; // 注入点 document.write('<div>' + userInput + '</div>'); </script>

防御突破点

  • 闭合前一个 script 标签
  • 使用 HTML 实体编码绕过字符串检测
  • 利用 SVG/MathML 等特殊上下文

2.3 iframe 参数污染

攻击流程

  1. 识别未过滤的 iframe 属性(如 width/height)
  2. 在最后参数追加 payload:
    &width=500 onload="alert(1)"
  3. 利用属性解析特性执行脚本

防御对比表

防护级别过滤函数是否可绕过
Low无过滤
Mediumaddslashes()
Highhtmlspecialchars

2.4 事件处理器注入

创新手法

<img src=x onerror=alert(1)> <svg/onload=alert(2)> <body onpageshow=alert(3)>

特殊场景突破

  • 利用 autofocus 属性:
    <input autofocus onfocus=alert(1)>
  • 使用伪协议:
    <a href="javascript:alert(1)">点击</a>

3. 三种过滤函数实战评测

3.1 htmlspecialchars() 防御体系

安全配置

// 最安全用法 htmlspecialchars($input, ENT_QUOTES | ENT_HTML5, 'UTF-8');

转义范围

字符转义结果
<<
>>
""
''
&&

绕过尝试记录

  1. 尝试 UTF-7 编码:失败
  2. 使用 JavaScript 伪协议:失败
  3. 测试 CSS 表达式:失败

3.2 addslashes() 的局限性

典型漏洞代码

echo "<input value='" . addslashes($input) . "'>";

突破方案

  • 提前闭合属性:
    ' onclick=alert(1) //
  • 利用 JSON 上下文:
    {"data":"</script><script>alert(1)</script>"}

3.3 自定义过滤的盲点

常见缺陷模式

function custom_filter($input) { $filtered = str_replace(['<script>', 'onload'], '', $input); return $filtered; }

绕过技巧

  • 大小写变形:<ScRiPt>
  • 嵌套标签:<scr<script>ipt>
  • 利用换行符:<img src=x\nalt=1\nonerror=alert(1)>

4. 防御方案与最佳实践

4.1 安全编码策略

上下文相关防御矩阵

输出位置推荐方案示例代码
HTML 正文htmlspecialchars + ENT_QUOTESecho htmlspecialchars($data)
HTML 属性额外引号过滤filter_var($data, FILTER_SANITIZE_STRING)
JavaScript 块JSON_HEX_TAGjson_encode($data, JSON_HEX_TAG)
URL 参数urlencodeecho urlencode($data)

4.2 深度防御措施

  1. CSP 策略示例

    Content-Security-Policy: default-src 'self'; script-src 'unsafe-inline'
  2. 输入验证正则

    // 允许的HTML标签白名单 $clean = preg_replace('/<(?!b|i|p|br)[^>]+>/i', '', $input);
  3. 浏览器安全头

    add_header X-XSS-Protection "1; mode=block"; add_header X-Content-Type-Options "nosniff";

4.3 自动化检测方案

OWASP ZAP 测试脚本

def test_xss(url): payloads = ['<script>alert(1)</script>', 'javascript:alert(1)'] for payload in payloads: res = requests.get(url + '?param=' + payload) if payload in res.text: print(f"Vulnerable to {payload}")

Burp Suite 扫描配置

  1. 安装 "XSS Validator" 插件
  2. 配置攻击载荷生成规则
  3. 设置反射检测正则表达式
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/8 20:21:28

YOLOv5 7.0 部署实战:PyTorch Hub 与 detect.py 的 5 种推理场景对比

YOLOv5 7.0 部署实战&#xff1a;PyTorch Hub 与 detect.py 的 5 种推理场景对比目标检测作为计算机视觉领域的核心任务之一&#xff0c;其应用场景从工业质检到自动驾驶无处不在。而YOLOv5凭借其出色的速度和精度平衡&#xff0c;成为众多开发者的首选框架。本文将深入探讨YOL…

作者头像 李华
网站建设 2026/7/8 20:19:38

AD7490与PIC18F47Q10构建高精度数据采集系统

1. 项目背景与核心需求在工业测量、医疗设备和消费电子等领域&#xff0c;模拟信号到数字信号的转换&#xff08;ADC&#xff09;是嵌入式系统设计中最基础也最关键的环节之一。AD7490作为一款16位高精度ADC芯片&#xff0c;配合PIC18F47Q10这类中端微控制器&#xff0c;能够构…

作者头像 李华
网站建设 2026/7/8 20:17:45

ASP Request 对象 Cookie 注入:5步手工检测与自动化工具对比

ASP Request对象Cookie注入&#xff1a;手工检测与自动化工具实战指南1. 理解Cookie注入的本质与ASP Request对象机制Cookie注入是一种特殊形式的SQL注入攻击&#xff0c;它利用了Web应用程序对Cookie数据处理不当的漏洞。与传统的GET/POST注入不同&#xff0c;这种攻击方式通过…

作者头像 李华
网站建设 2026/7/8 20:14:59

D3KeyHelper:基于事件驱动架构的暗黑破坏神3智能按键调度系统

D3KeyHelper&#xff1a;基于事件驱动架构的暗黑破坏神3智能按键调度系统 【免费下载链接】D3keyHelper D3KeyHelper是一个有图形界面&#xff0c;可自定义配置的暗黑3鼠标宏工具。 项目地址: https://gitcode.com/gh_mirrors/d3/D3keyHelper D3KeyHelper是一款针对《暗…

作者头像 李华
网站建设 2026/7/8 20:14:11

401 错误处理 3 种方案对比:响应拦截器 vs 请求队列 vs 中间件

401错误处理的三种高阶方案&#xff1a;从拦截器到中间件的架构演进现代前端应用的身份认证体系离不开对401错误的优雅处理。当用户凭证过期或无效时&#xff0c;如何实现无感知刷新&#xff1f;不同规模的系统该如何选择技术方案&#xff1f;本文将深入剖析三种主流方案的实现…

作者头像 李华
网站建设 2026/7/8 20:12:06

BetterJoy终极配置指南:让Switch控制器在PC上完美工作

BetterJoy终极配置指南&#xff1a;让Switch控制器在PC上完美工作 【免费下载链接】BetterJoy Allows the Nintendo Switch Pro Controller, Joycons and SNES controller to be used with CEMU, Citra, Dolphin, Yuzu and as generic XInput 项目地址: https://gitcode.com/…

作者头像 李华