Yso-JRMPListener模块学习

2023-11-09 10:30
文章标签 模块 学习 yso jrmplistener

本文主要是介绍Yso-JRMPListener模块学习,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

JRMP 服务端

ysoserial 中的 exploit/JRMPListener 会在指定端口开启一个 JRMP Server,其实现了对任意 RMI Client 的应答请求,会向任何连接其的客户端发送反序列化 payload。

注意:区别这里的 JRMP Client 指的是发起 JRMP 请求的一方(下文以 Client 或者 客户端 称呼),既可能是 RMI Server,也可能是 RMI Client(两者都可以向 RMI Registry 发起 JRMP 请求)。


先来看入口的 main 方法:

获取用户的输入,生成对应的 payload,然后和指定的端口传入构造方法,接着调用 run 方法。

生成 payloadObject 的过程省略,看 JRMPListener 的构造方法:

构造方法中还额外创建了一个 ServerSocket 接收来自 JRMPClient 的连接。

run 方法中会对接收的请求进行协议的限制,如果是 JRMP 协议就进入 doMessage 方法:

deMessage 里会根据读取到的 op 进行不同的操作:

TransportConstants.Call 的值是 80,对应着客户端发送的 headerStreamRemoteCall#<init>):

doCall 方法里会生成一个 BadAttributeValueExpException 对象,然后通过反射把其 val 变量设置为 payload,最后序列化向客户端发送:

JRMP 客户端

再来看客户端,以 list 方法为例,客户端执行这个方法的时候会来到 UnicastRef#invoke 方法里,调用栈如下:

invoke:379, UnicastRef (sun.rmi.server)list:-1, RegistryImpl_Stub (sun.rmi.registry)main:9, RMIClient (RAC2S)

"UnicastRef#invoke",向 JRMP 服务端发起连接请求,重点是 StreamRemoteCall#executeCall 方法:

在这个方法里客户端会将服务端发送的异常进行序列化读取,然后抛出,导致了自身被 RCE。

因为 JRMPListener 中向客户端发送的就是 2,所以一定会进入 case 2 中:

这篇关于Yso-JRMPListener模块学习的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/375565

相关文章

Python标准库datetime模块日期和时间数据类型解读

《Python标准库datetime模块日期和时间数据类型解读》文章介绍Python中datetime模块的date、time、datetime类,用于处理日期、时间及日期时间结合体,通过属性获取时间... 目录Datetime常用类日期date类型使用时间 time 类型使用日期和时间的结合体–日期时间(

Python通用唯一标识符模块uuid使用案例详解

《Python通用唯一标识符模块uuid使用案例详解》Pythonuuid模块用于生成128位全局唯一标识符,支持UUID1-5版本,适用于分布式系统、数据库主键等场景,需注意隐私、碰撞概率及存储优... 目录简介核心功能1. UUID版本2. UUID属性3. 命名空间使用场景1. 生成唯一标识符2. 数

Python中re模块结合正则表达式的实际应用案例

《Python中re模块结合正则表达式的实际应用案例》Python中的re模块是用于处理正则表达式的强大工具,正则表达式是一种用来匹配字符串的模式,它可以在文本中搜索和匹配特定的字符串模式,这篇文章主... 目录前言re模块常用函数一、查看文本中是否包含 A 或 B 字符串二、替换多个关键词为统一格式三、提

一文深入详解Python的secrets模块

《一文深入详解Python的secrets模块》在构建涉及用户身份认证、权限管理、加密通信等系统时,开发者最不能忽视的一个问题就是“安全性”,Python在3.6版本中引入了专门面向安全用途的secr... 目录引言一、背景与动机:为什么需要 secrets 模块?二、secrets 模块的核心功能1. 基

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

Python logging模块使用示例详解

《Pythonlogging模块使用示例详解》Python的logging模块是一个灵活且强大的日志记录工具,广泛应用于应用程序的调试、运行监控和问题排查,下面给大家介绍Pythonlogging模... 目录一、为什么使用 logging 模块?二、核心组件三、日志级别四、基本使用步骤五、快速配置(bas

重新对Java的类加载器的学习方式

《重新对Java的类加载器的学习方式》:本文主要介绍重新对Java的类加载器的学习方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍1.1、简介1.2、符号引用和直接引用1、符号引用2、直接引用3、符号转直接的过程2、加载流程3、类加载的分类3.1、显示

Python datetime 模块概述及应用场景

《Pythondatetime模块概述及应用场景》Python的datetime模块是标准库中用于处理日期和时间的核心模块,本文给大家介绍Pythondatetime模块概述及应用场景,感兴趣的朋... 目录一、python datetime 模块概述二、datetime 模块核心类解析三、日期时间格式化与

Python如何调用指定路径的模块

《Python如何调用指定路径的模块》要在Python中调用指定路径的模块,可以使用sys.path.append,importlib.util.spec_from_file_location和exe... 目录一、sys.path.append() 方法1. 方法简介2. 使用示例3. 注意事项二、imp