技术社区
安全培训
技术社群
积分商城
先知平台
漏洞库
历史记录
清空历史记录
相关的动态
相关的文章
相关的用户
相关的圈子
相关的话题
注册
登录
从WMCTF2023_ez_java_again开始的RMIConnector二次反序列化学习
follycat
发表于 湖南
WEB安全
329浏览 · 2025-05-31 07:34
返回文档
环境搭建
这里用的是
CTF复现计划
里的docker进行搭建的。
docker命令
访问12345端口即可
解题
首先看到题目中有一个按钮,点击后没啥反应,随后进行查看源代码以及抓包。
抓包到了url参数,并且源码中有url1这个参数,并说明了有安全问题已经被废弃掉了。
因此使用url1这个参数来进行文件读取。
将这俩个文件夹里的文件都读取出来,这个环境里面的.class文件都可以直接读取然后直接放到idea里面查看源码。
直接看他造成反序列化的CmdServlet.class这个类
其中过滤在
/WEB-INF/classes/config/serialkiller.xml
中
根据批注以及xml文件可以发现其中过滤了
ChainedTransformer,TrAXFilter
等类,将cc1-6基本上全ban了,但是他没有禁用
InvokeTransformer
这一关键类以及cc7这条链的入口点函数,说明这个类以及cc7的入口点应该是解题必备的。
根据上面的思路进行构造,将cc7的入口点直接和
InvokeTransformer
进行组合操作,中间不调用
ChainedTransformer
,但是现在是有一个问题的,就是runtime是无法序列化的,又不能调用
ChainedTransformer
,所以这里需要一个新的可以执行命令的方法,又或者可以进行二次反序列化,因此这里使用RMI二次反序列化进行绕过。
RMIConnector二次反序列化
原理
RMIConnector是RMI中负责远程连接的类,位于
javax.management.remote.rmi.RMIConnector
。
首先看到其
findRMIServerJRMP
方法
可以发现其接受一个base64的字符串并将其解密并进行了反序列化操作,也就是
oin.readObject();
继续向上找谁调用了
findRMIServerJRMP
,并且传入的base64是可控的,找到
findRMIServer
这个方法。
可以发现,当path开头为/stub/时将会调用
findRMIServerJRMP
,并且将传入截取之后的path,继续向上寻找,找到connct中调用了该方法。
当然调用条件为rmiServer=null,寻找可以让rmiServer为null的构造方法,找到RMIConnector
其只构造
JMXServiceURL
和
environment
完美符合条件。
所以只需要构造成这样,然后可以使用cc链对rmiConnector的connct方法进行调用即可触发二次反序列化。
因为不需要多次调用invokerTransformer,所以无需使用chainedTransformer,那就会又有一个问题,就是transform的key(input)应该如何传入。
如果可以使用TiedMapEntry的话可以直接将需要的类传给他的第二个参数,由于没有
ConstantTransformer
,这将会直接改变key的值(cc1中ConstantTransformer的作用)。
payload
cc6调用RMIConnector:
绕过黑名单
当然在这个题中TiedMapEntry是被禁用了的,同之前的思路还是使用cc7的入口点来调用RMIConnector。
这里需要注意一点的就是key的设置,由于这里没有TiedMapEntry,所以key是无法直接反射进行传参的,并且LazyMap是基于hashMap1和hashMap2进行懒加载的,所以在实际储存和访问key时需要先反射来访问hashMap1中的table数组,从中获取到我们需要修改的key的Node对象(这个对象中包含了key和value),对该node对象进行反射修改key。
因此应该这样修改key的值
通过调试可以看到值的改变,首先可以看到table数组中的值为node对象
然后看到其中的key和value
继续调试,发现key从1被替换为rmiConnector
cc7调用RMIConnector:
当然二次反序列化也可以调用其他的链子并不一定要是cc6,也可以直接加载字节码。
参考文章
https://tttang.com/archive/1701/#toc_rmiconnector
https://www.freebuf.com/articles/web/372573.html#/
https://www.yuque.com/dat0u/ctf/en3rym0131fuby60#
0
人收藏
0
人喜欢
转载
分享
0
条评论
某人
表情
可输入
255
字
评论
发布投稿
热门文章
1
从零掌握java内存马大全(基于LearnJavaMemshellFromZero复现重组)
2
突破网络限制,Merlin Agent助你轻松搭建跳板网络!
3
从白帽角度浅谈SRC业务威胁情报挖掘与实战
4
基于规则的流量加解密工具-CloudX
5
从0到1大模型MCP自动化漏洞挖掘实践
近期热点
一周
月份
季度
1
从零掌握java内存马大全(基于LearnJavaMemshellFromZero复现重组)
2
突破网络限制,Merlin Agent助你轻松搭建跳板网络!
3
从白帽角度浅谈SRC业务威胁情报挖掘与实战
4
基于规则的流量加解密工具-CloudX
5
从0到1大模型MCP自动化漏洞挖掘实践
暂无相关信息
暂无相关信息
优秀作者
1
T0daySeeker
贡献值:38700
2
一天
贡献值:24800
3
Yale
贡献值:21000
4
1674701160110592
贡献值:18000
5
1174735059082055
贡献值:16000
6
Loora1N
贡献值:13000
7
bkbqwq
贡献值:12800
8
手术刀
贡献值:11000
9
lufei
贡献值:11000
10
xsran
贡献值:10600
目录
环境搭建
解题
RMIConnector二次反序列化
原理
payload
绕过黑名单
参考文章
转载
标题
作者:
你好
http://www.a.com/asdsabdas
文章
转载
自
复制到剪贴板