第105天-Java安全|Fastjson不出网利用?三大利器在手,内网横行无忧!

admin 2026-03-25 14:05:14 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文解析Fastjson不出网利用技术,涵盖延时探测及三条主流Gadget链:BCEL链加载字节码、TemplatesImpl链执行代码、C3P0链二次反序列化。文章给出具体Payload与条件,为受限网络下的渗透测试提供了极具实操价值的指导。 综合评分: 90 文章分类: 渗透测试,内网渗透,WEB安全,漏洞分析,实战经验


cover_image

第105天-Java安全 | Fastjson 不出网利用?三大利器在手,内网横行无忧!

原创

Сяо Яо Сяо Яо

AlphaNet

2026年3月24日 11:52 韩国

Java攻防 Fastjson 安全研究


🚀 引言:当Fastjson无法出网,我们该何去何从?

嗨,各位安全圈的朋友们!👋 在Java漏洞的江湖中,Fastjson绝对是“名声显赫”的存在。我们熟知的JNDI注入等利用方式,大多依赖于目标服务器能够访问外部网络(出网)。但如果目标身处内网,或者由于严格的防火墙策略导致无法出网,我们手中的“神兵利器”是不是就失效了呢?

当然不!真正的黑客,敢于直面没有网络的环境。😉

今天,我们就来深入探讨Fastjson在不出网场景下的几种主流Gadget(利用链),揭示如何在信息孤岛中撕开一个口子。本文将遵循“是什么-为什么-怎么做”的结构,带你一步步掌握这些高级技巧。

准备好了吗?让我们开始这场“内网渗透”的头脑风暴吧!

🧐 是什么:Fastjson不出网利用的核心思想

首先,我们来搞清楚一个基本问题:什么叫“不出网利用”?

简单来说,不出网利用指的是在漏洞利用(Exploitation)过程中,不依赖目标服务器向攻击者控制的恶意服务器发起网络请求。传统的JNDI注入,需要目标去请求恶意的RMI/LDAP服务来加载远程代码,这属于“出网”利用。

而在不出网场景下,我们的核心思路是:利用目标应用自身环境中已有的类和方法,通过Fastjson的反序列化机制,巧妙地组合它们(即构造Gadget链),最终在目标服务器上直接执行代码或造成其他危害。

这种方式更隐蔽,也更能考验攻击者对Java底层运行机制的理解深度。

🔍 为什么:不出网Gadget为何能奏效?

Fastjson强大的反序列化功能是这一切的根源。当它解析JSON字符串时,会通过@type字段来指定要实例化的类。如果这个类中存在某些特殊的方法(如构造函数、getter/setter),并且这些方法在执行过程中又能触发其他类的危险操作,一条完整的攻击链就形成了。

我们接下来要分析的三条Gadget链,正是利用了Java生态中一些常用库(如Tomcat连接池、BCEL、TemplatesImpl等)的特性,它们就像是沉睡在目标应用中的“内鬼”,等待着被Fastjson唤醒。

🛠️ 怎么做:三条主流不出网Gadget链实战解析

接下来是干货环节!我们将逐一分析三条经典的不出网利用链。


0️⃣ 第一步:利用延时判断漏洞是否存在

在正式攻击前,我们通常需要确认目标是否真的存在Fastjson反序列化漏洞。在不出网的环境下,一个巧妙的方法是利用JNDI加载本地不存在的地址来制造延时

如果目标尝试连接一个无法访问的地址,会花费一定时间等待响应超时,从而产生肉眼可见的延时。

Payload示例:

// 尝试连接本地一个不存在的RMI服务
{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"rmi://127.0.0.1:9999/badClassName", "autoCommit":true}

如果发送上述Payload后,服务器响应时间明显变长,那么恭喜你,目标很可能存在漏洞!


1️⃣ BCEL-Tomcat & Spring 链:字节码的魔法

这是最经典也最广为人知的一条不出网利用链。

  • 核心原理:利用org.apache.tomcat.dbcp.dbcp2.BasicDataSource类,通过Fastjson调用其setDriverClassLoadersetDriverClassName方法。我们将ClassLoader设置为BCEL的ClassLoader,然后将ClassName设置为一个特殊的、由BCEL编码的恶意Java字节码。当BasicDataSource尝试加载这个“特殊”的驱动类时,BCEL的ClassLoader会解码并执行我们的恶意字节码。

  • 什么是BCEL?

BCEL (Byte Code Engineering Library) 是一个用于分析、创建和修改Java类文件的库。它允许我们用编程方式直接操作Java字节码。$$BCEL$$前缀是BCEL ClassLoader识别和解码字节码的特殊标记。

  • Gadget链 Payload
{
   "@type": "org.apache.tomcat.dbcp.dbcp2.BasicDataSource",
   "driverClassLoader": {
        "@type": "com.sun.org.apache.bcel.internal.util.ClassLoader"
   },
   "driverClassName": "$$BCEL$$[此处为BCEL编码后的恶意字节码]"
}

注意$$BCEL$$后面的内容是需要你将写好的恶意Java代码(例如命令执行)编译成.class文件,再通过BCEL工具进行编码后得到的字符串。


2️⃣ TemplatesImpl 链:JDK自带的“大杀器”

这条链利用了JDK自带的TemplatesImpl类,通用性极高。

  • 核心原理TemplatesImpl类是用于处理XSLT样式表的。它有一个名为_bytecodes的字段,可以存储一个或多个类的字节码。当这个TemplatesImpl对象的newTransformer()方法被调用时,它会实例化_bytecodes中存储的类。如果这个类是一个恶意类(例如,在静态代码块或构造函数中包含恶意代码),代码就会被执行。Fastjson在反序列化时,会通过调用getter/setter方法和满足特定条件来触发newTransformer(),从而形成攻击。

  • 利用条件

  • 需要服务端在解析时开启Feature.SupportNonPublicField选项,以便能够操作TemplatesImpl的私有字段(如_bytecodes)。

  • _name字段不能为空。

  • _tfactory字段必须是一个TransformerFactoryImpl对象。

  • Gadget链 Payload

{
    "@type": "com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl",
    "\_bytecodes": ["此处为Base64编码的恶意字节码"],
    "\_name": "any-string",
    "\_tfactory": {},
    "\_outputProperties": {}
}

注意_bytecodes字段中的字节码需要进行Base64编码。


3️⃣ C3P0 链:依赖库中的“隐藏彩蛋”

C3P0是一个广泛使用的开源JDBC连接池库,它也提供了一条有效的不出网利用链。

  • 核心原理:利用com.mchange.v2.c3p0.WrapperConnectionPoolDataSource类。该类有一个userOverridesAsString字段,可以接收一个十六进制编码的序列化对象。当Fastjson反序列化并设置这个字段时,C3P0内部会反序列化这个Hex编码的字符串,从而触发“二次反序列化”,达到代码执行的目的。

  • 利用条件

  • 目标应用环境中必须包含c3p0的相关依赖包。

  • Gadget链 Payload

{
    "a":{
        "@type": "java.lang.Class",
        "val": "com.mchange.v2.c3p0.WrapperConnectionPoolDataSource"
    },
    "b":{
        "@type": "com.mchange.v2.c3p0.WrapperConnectionPoolDataSource",
        "userOverridesAsString":"HexAsciiSerializedMap:[此处为Hex编码的序列化恶意对象]"
    }
}

注意:这里的HexAsciiSerializedMap后的内容,需要你先生成一个恶意的序列化对象(例如,一个TemplatesImpl对象),然后将其转换为十六进制字符串。


🧠 总结:核心要点回顾

让我们快速回顾一下今天学到的知识点:

  1. 不出网思路:核心是利用目标自身环境中的类来构造Gadget链,避免依赖外部网络请求。

  2. 延时判断:通过请求一个不存在的本地JNDI服务,根据响应时间判断漏洞是否存在。

  3. BCEL链:利用Tomcat连接池加载BCEL编码的恶意字节码,实现代码执行。

  4. TemplatesImpl链:利用JDK自带的类加载恶意字节码,通用性强,但需要开启SupportNonPublicField

  5. C3P0链:通过C3P0连接池的“二次反序列化”特性执行代码,前提是目标存在相应依赖。


🤔 结尾互动

掌握了这些不出网的“黑魔法”,你对Fastjson漏洞的理解是否又加深了一层呢?在真实的攻防场景中,信息收集(例如判断目标依赖库)显得尤为重要。

思考一下:除了这三条链,你还知道哪些其他的不出网利用方式吗?欢迎在评论区留言,分享你的知识和见解,让我们一起成长!

如果觉得这篇文章对你有帮助,别忘了点赞在看分享哦!我们下期再见!🚀


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:AlphaNet Сяо Яо Сяо Яо《第105天-Java安全 | Fastjson 不出网利用?三大利器在手,内网横行无忧!》

强烈推荐-mo清理工具 网络安全文章

强烈推荐-mo清理工具

文章总结: 文档推荐了一款名为Mole的macOS开源命令行清理工具,具备清理垃圾、彻底卸载应用、系统优化、磁盘分析及健康监测五大功能。作者分享了使用体验,指出
评论:0   参与:  0