ysoserial源码结构分析
1.前言
之前也花了几天晚上熟悉了一下commonscollections系列的构造,那么学习一下这个项目是如何设计的也挺重要,多学习大佬如何写代码应该也能对自己的代码能力有提升吧~2333
2.项目结构:

首先代码结构如上图所示

exploit文件夹下主要是放一些主要的利用模块,比如如下两个例子

这里用java -cp指定在包ysoserial/exploit的JRMPClinent中寻找主类来执行,那么其中的payload位于payloads文件夹下

比如就如RMIRegistryExploit.java举例:

首先main函数从命令行接收一些初始化参数,比如目标主机的地址和端口以及要执行的命令,接着访问远程注册表服务

初始化结束后,此时要初始化gadget,这里直接通过包名和payload的值确定我们要利用的类完整路径,比如这里payload用commonscollections1为例

这里将通过class.forname加载所需要的payload类,接着判断是否远程是否为ssl链接,如果不是默认非ssl的rmi请求,则upgrade为ssl的rmi请求

接着调用exploit进行payload发送,在exploit函数中这种调用方式还有点意思,封装了一个call方法

这里首先checkingSecurityManager初始化抛出异常

看看callWrapped函数,,这里如何就是个Clallable类的实例,可以看到这里调用call方法

而call是定义callable类时就定义好的,因此这里进入call方法内部,主要就是①根据之前的payload调用其getobject方法,来返回对应gadget的实例

然后②这处用了个releasePayload方法,传入了上文拿到的objectpayload和object,然后感觉这样设计只是为了代码的健壮性,这里最后验证通过class.forname加载的类调用newinstance后是否是releaseableObjectPayload的实例或其父类接口的实例,它父类接口就是ObjectPayload,如果if条件满足则调用releasese方法

暂时没体会到这么体会到这么设计的妙处在哪

payloads文件夹中主要包括注解和一些工具类,包括找class文件,以及生成gadget,判断java版本的,以及paloadrunner里本地测试gadget,以及也直接封装了一些反射的方法 

比如payloadrun就可以直接调试gadget,默认也存储了一些命令

最后几个类封装的序列化和反序列化的类,以及封装的字符串操作的类,以及命令行下根据输入参数生成payload的generatePayload类

以cc1链为例,payloadRunner.run来测试gadget

那么添加自己的链也很容易,只需要实现ObjectPayload接口即可,只需要定义好getObject的返回类型即可

所以整个项目而言,主要包括:
1.exploit类,用于远程attack
2.payload生成类,用于根据gadget生成序列化字节码
3.辅助类,序列化、反序列化、字符串处理、反射等重复性操作封装为辅助类
4.gadget,主要定义为定义好的利用链
这里面也用到了泛型,这块还不太熟悉,下一步学习学习 ==
ysoserial源码结构分析的更多相关文章
- kettle系列-2.kettle源码结构分析
kettle是一个开源产品,产品本身设计是很优秀的,代码应该是很多开源爱好者用业余时间贡献的,代码整体结构还是比较容易理解的,但具体到每一个控件内部就因人而异了,感觉还是挺复杂的,肯定别人考虑得比较全 ...
- Android2.3.7源码结构分析
对Andorid系统进行分析或者系统功能定制的时候,我们经常需要在众多文件中花费大量时间定位所需关注的部分.为了减轻这部分枯燥而不可避免的工作,本文对2.3.7版本的源码结构进行了简单分析.希望对刚加 ...
- android应用程序源码结构分析
工程; 1. src文件夹存放源码. 2. gen下有跟src中一样的包文件,内部有一个名为R.java类,它是自动生成的一个类:该目录不用我们开发人员维护, 但又非常重要的目录 . 该目录用来存放由 ...
- Android 源码结构分析
源码版本:AOSP_7.1.1 硬件平台:Rockchip 由于工作要求,需要对rockchip平台的安卓系统进行剪裁.安卓源码比较庞大,会让人感到无从下手,对此,有必要了解一下源码的大致目录结构以及 ...
- jemalloc源码结构分析(三):arena_malloc_small内存分布
在arena_s结构中,由NBINS数组将bin按照不同规模等级分别存储,每一个等级对应一颗run树,即一颗以chunk_map_t为节点的红黑树,而这些chunk_map_t节点实际分布于各个chu ...
- jemalloc源码结构分析(二):CPU字节对齐算法
在调用arena_malloc_small过程中,要根据申请内存大小,进行对齐计算,然后分配一个整块儿.算法如下: 1)定义一个SIZE_CLASSES宏,它主要用于生成后面两个表,small_siz ...
- jemalloc源码结构分析(一):内存申请处理过程
一.5种malloc方法 1)tcache_alloc_small 2)arena_malloc_small 3)tcache_alloc_large 4)arena_malloc_large 5)h ...
- Kibana6.x.x源码结构分析笔记
- 想要看懂鸿蒙OS源码?朱老师带你从框架分析开始
HarmonyOS V2.0是面向轻量级设备的鸿蒙L0/L1级设备端操作系统,于2020.9开源至今已有2个多月,但是很多同学在学习鸿蒙源码时仍然感觉难以下手,找不到突破口. 2020.11.25(本 ...
随机推荐
- Descriptive Measures for Populations|Parameter|Statistic|standardized variable|z-score
3.4 Descriptive Measures for Populations; Use of Samples For a particular variable on a particular p ...
- Windows CMD 终端使用代理
Windows 终端使用代理 # 使用 http 类型代理 set http_proxy=http://127.0.0.1:8484 set https_proxy=http://127.0.0.1: ...
- sql常见面试(2)
1.sql 删除表中重复数据保留一条 1)删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录 delete from people where p ...
- A 小石的签到题
题目链接:https://ac.nowcoder.com/acm/contest/949/A 思路: 这题明确的说了是个签到题,但是一直怀疑不是签到题,是唬我的,结果仔细想了想真是这么回事. 每个人必 ...
- maven 多bundle项目
1 环境 eclipse maven jdk1.8 多bundle项目需要一个父项目(聚合模块),起到聚合其他模块的作用,其他模块的管理工具,不包含实际的代码. 新建maven项目-->Crea ...
- Klotski's Blog
教材: 唐朔飞 编著 "计算机组成原理(第2版)"高等教育出版社 2008年1月 习题指导教材: 唐朔飞 编著 "计算机组成原理–学习指导与习题解答(第2版)" ...
- VM Storage Policies深度解析
- mybatis generator 使用教程(生成带注释的实体类)
引言: 最近的一个项目,由于数据库表巨多,导致需要创建N多个java实体.dao.mapper.xml映射文件,如果均使用纯手工编写,无疑需要耗费大量时间和精力.于是上网学习了mybatis gene ...
- HDU1233 还是畅通工程
题目: Problem Description 某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离.省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连 ...
- $random 函数用法
$random函数调用时,返回一个32位的随机数,它是一个带符号的整形数.如下例: reg[23:0] rand; rand = $random % 60; //产生一个在 -59~59 范围的随机数 ...