文章总结: 本文解析Fastjson不出网利用技术,涵盖延时探测及三条主流Gadget链:BCEL链加载字节码、TemplatesImpl链执行代码、C3P0链二次反序列化。文章给出具体Payload与条件,为受限网络下的渗透测试提供了极具实操价值的指导。 综合评分: 90 文章分类: 渗透测试,内网渗透,WEB安全,漏洞分析,实战经验
第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调用其setDriverClassLoader和setDriverClassName方法。我们将ClassLoader设置为BCEL的ClassLoader,然后将ClassName设置为一个特殊的、由BCEL编码的恶意Java字节码。当BasicDataSource尝试加载这个“特殊”的驱动类时,BCEL的ClassLoader会解码并执行我们的恶意字节码。 -
什么是BCEL?
BCEL (Byte Code Engineering Library) 是一个用于分析、创建和修改Java类文件的库。它允许我们用编程方式直接操作Java字节码。
$$BCEL$$前缀是BCELClassLoader识别和解码字节码的特殊标记。
- 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对象),然后将其转换为十六进制字符串。
🧠 总结:核心要点回顾
让我们快速回顾一下今天学到的知识点:
-
不出网思路:核心是利用目标自身环境中的类来构造Gadget链,避免依赖外部网络请求。
-
延时判断:通过请求一个不存在的本地JNDI服务,根据响应时间判断漏洞是否存在。
-
BCEL链:利用Tomcat连接池加载BCEL编码的恶意字节码,实现代码执行。
-
TemplatesImpl链:利用JDK自带的类加载恶意字节码,通用性强,但需要开启
SupportNonPublicField。 -
C3P0链:通过C3P0连接池的“二次反序列化”特性执行代码,前提是目标存在相应依赖。
🤔 结尾互动
掌握了这些不出网的“黑魔法”,你对Fastjson漏洞的理解是否又加深了一层呢?在真实的攻防场景中,信息收集(例如判断目标依赖库)显得尤为重要。
思考一下:除了这三条链,你还知道哪些其他的不出网利用方式吗?欢迎在评论区留言,分享你的知识和见解,让我们一起成长!
如果觉得这篇文章对你有帮助,别忘了点赞、在看和分享哦!我们下期再见!🚀
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:AlphaNet Сяо Яо Сяо Яо《第105天-Java安全 | Fastjson 不出网利用?三大利器在手,内网横行无忧!》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论