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源码结构分析的更多相关文章

  1. kettle系列-2.kettle源码结构分析

    kettle是一个开源产品,产品本身设计是很优秀的,代码应该是很多开源爱好者用业余时间贡献的,代码整体结构还是比较容易理解的,但具体到每一个控件内部就因人而异了,感觉还是挺复杂的,肯定别人考虑得比较全 ...

  2. Android2.3.7源码结构分析

    对Andorid系统进行分析或者系统功能定制的时候,我们经常需要在众多文件中花费大量时间定位所需关注的部分.为了减轻这部分枯燥而不可避免的工作,本文对2.3.7版本的源码结构进行了简单分析.希望对刚加 ...

  3. android应用程序源码结构分析

    工程; 1. src文件夹存放源码. 2. gen下有跟src中一样的包文件,内部有一个名为R.java类,它是自动生成的一个类:该目录不用我们开发人员维护, 但又非常重要的目录 . 该目录用来存放由 ...

  4. Android 源码结构分析

    源码版本:AOSP_7.1.1 硬件平台:Rockchip 由于工作要求,需要对rockchip平台的安卓系统进行剪裁.安卓源码比较庞大,会让人感到无从下手,对此,有必要了解一下源码的大致目录结构以及 ...

  5. jemalloc源码结构分析(三):arena_malloc_small内存分布

    在arena_s结构中,由NBINS数组将bin按照不同规模等级分别存储,每一个等级对应一颗run树,即一颗以chunk_map_t为节点的红黑树,而这些chunk_map_t节点实际分布于各个chu ...

  6. jemalloc源码结构分析(二):CPU字节对齐算法

    在调用arena_malloc_small过程中,要根据申请内存大小,进行对齐计算,然后分配一个整块儿.算法如下: 1)定义一个SIZE_CLASSES宏,它主要用于生成后面两个表,small_siz ...

  7. jemalloc源码结构分析(一):内存申请处理过程

    一.5种malloc方法 1)tcache_alloc_small 2)arena_malloc_small 3)tcache_alloc_large 4)arena_malloc_large 5)h ...

  8. Kibana6.x.x源码结构分析笔记

  9. 想要看懂鸿蒙OS源码?朱老师带你从框架分析开始

    HarmonyOS V2.0是面向轻量级设备的鸿蒙L0/L1级设备端操作系统,于2020.9开源至今已有2个多月,但是很多同学在学习鸿蒙源码时仍然感觉难以下手,找不到突破口. 2020.11.25(本 ...

随机推荐

  1. windows下使用apache相关资料汇总

    1.Apache httpd.conf配置详解 https://www.cnblogs.com/langren1992/p/5160912.html 2.windows下使用apache经验总结 ht ...

  2. jsp 页面内容导出到Excel中

    日常使用网络资源时经常需要把网页中的内容下载到本地,并且导出到Excel中,现在介绍一种非常简单的方式实现网络资源的下载.只需要讲jsp的最上面加上一句话 <% response.reset() ...

  3. T-shirt

    题目描述 JSZKC is going to spend his vacation!  His vacation has N days. Each day, he can choose a T-shi ...

  4. python实现使用代码进行代理配置

    #!/usr/local/bin/python3.7 import urllib.request import urllib.parse # 创建handler handler = urllib.re ...

  5. StartDT AI Lab | 视觉智能引擎+数据决策引擎——打造商业“智能沙盘”

    众所周知,线上商家可以通过淘宝平台的大量前端“埋点”轻松获取商品的加购率.收藏率.转化率.成交额等大量基础信息,甚至商家能够在更精细的层面,获取商品关键字变化或者上新/爆款带来的流量变化数据,更甚者商 ...

  6. idea,2018版破解方法

    1.准备安装文件 2.安装 ideaIU-2018.3.5.exe ,如这里是安装到IDEA这个文件夹: 3.复制JetbrainsIdesCrack-4.2-releasexxx.jar放到IDEA ...

  7. vue表格业务

    https://www.jianshu.com/p/79f39f2c1382 https://blog.csdn.net/zhongshijun521/article/details/78390614 ...

  8. python学习笔记(11)文件操作

    一.读文件 读写文件是最常见的IO操作.Python内置了读写文件的函数,用法和C是兼容的. 读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直 ...

  9. FPGA浮点数定点数的处理

    http://blog.chinaaet.com/justlxy/p/5100053166大佬博客,讲的非常有条理的 1,基础知识 (1)定点数的基础认知: 首先例如一个16位的数表示的定点数的范围是 ...

  10. FPGA模N计数器的实现

    module ModuloN_Cntr(Clock, Clear, Q, QBAR); , UPTO = ;//计数器位数以及模数 input Clock, Clear; :]Q, QBAR; :]C ...