ysoserial exploit/JRMPClient

ysoserial exploit/JRMPClient

上一篇文章讲到,当服务器反序列化payloads/JRMPListener,即会开启端口监听。再使用exploit/JRMPClient模块发送payload,服务器就会把payload进行反序列化,从而完成进行攻击。

调用链分析

设置payloads/JRMPListener参数,端口号为1299,debug模式启动payloads/JRMPListener模块。

image-20210724215211737

设置exploit/JRMPClient模块设置参数为127.0.0.1 1299 CommonsCollections7 “calc”

image-20210724222429002

启动exploit/JRMPClient模块后,服务端的接收到请求,会用TCPTransport的handleMessages来处理请求

image-20210724220348066

往下看,第277行,把连接对象传入了StreamRemoteCall对象中。

image-20210724220451097

第278行把StreamRemoteCall对象传入了serviceCall方法中

image-20210724220757377

跟进this.serviceCall方法

image-20210724220842364

前面获取了ObjID对象,生成Target对象等操作,直接看到101行

image-20210724221139854

此时的var6是UnicastServerRef,把Target对象(此时的Target对象是DGCImpl类型)和远程连接对象传入了dispatch方法

image-20210724221235996

跟进UnicastServerRef的dispatch

image-20210724221636874

继续跟进this.oldDispatch

image-20210724221850583

此时的this.skel是DGCImpl_Skel类型

跟进DGCImpl_Skel的dispatch

image-20210724222020532

对var3的值做了一个switch判断,而在case0或者1中都会进行反序列化,从而触发漏洞调用链

image-20210724222714149

解读exploit

main方法中拿到传入的参数,构造出payload,并且传入了makeDGCCall方法中

image-20210724222910062

makeDGCCall方法中,objOut.writeInt写入的值就是前面的var3的值,0或1都行

image-20210724223144438

最后进行了writeObject序列化,flush发送数据到服务端

其实这个payload是在构造DGC请求,然后让服务端的DGCImpl_Skel处理请求,导致的反序列化

详细可以看看这个师傅写的文章:

https://www.anquanke.com/post/id/225137#h3-3

此篇参考:

https://blog.csdn.net/whatday/article/details/106971531

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值