工具运行如下
一、入口类App
====================
1.console.init()
调用Reflections反射库扫描包,初始化了exploits以及payloads,bullets全局变量。exploits以及payloads,bullets为三个Map
ObjectInputFilterManager.setup();
调用jep290反序列化防御机制 配置反序列化白名单 ObjectInputFilter.Config.setSerialFilter。这也是为什么工具需要在较高版本jdk(jep290)上运行原因。
2.console.run()
工具调用jline库提供了一个可交互式shell,run的一开始做了shell的一些初始化工作,通过while(true) 实现REPL (Read-Eval-Print Loop)。
ysomap.cli.Console#dispatch() 方法根据用户输入的命令分发到不同功能
二、Consol与Session类
==================================
Session继承于Console,两个类算是ysomap工具核心。
1.Console
Console类代表了整个工具运行时的终端,不仅实现了App入口类的init、run方法,工具运行时终端的任何输入输出不同命令的实现都由这个类来提供。ysomap.cli.Console#dispatch() 方法中的每一个case都对应着Console中的一个方法。具体的方法跟进留在后面功能中具体分析。
Console中的Field
//我的注释 所有可用的的exploit/payload/bullet
2.Session
因为工具不同于ysoserial,提供了一个可交的长连接终端,因此引入了Session的概念。当我们使用不同的payload或者exploite时,都会新建一个session,用户可以任意切换session.回到代码角度,一些简单的方法
==
Field
//当前session的uuid
三、ysomap.core.serializer
================================
首先是ysomap.core.serializer.DefaultSerializer,java ObjectOutputStream的序列化工具类,提供serialize、deserialize方法,提供序列化反序列化功能,OUTPUT 对应了序列化后的二进制数据默认以文件的方式存到工具当前运行目录。
然后时json相关的序列化工具类,通过调用组件自身的序列化以及放序列化方法实现了对Jackson以及FastJson的支持。
工具还支持hessian反序列化数据的生成,和上面一样,也是通过导入hessian.jar 实现此功能。
最后就是xml,支持XStream以及XMLDecode,同上。
ysomap.core.serializer.SerializerFactory 序列化工厂类,用于生产各类序列化器,如FastJson、JackJson等等。
四、Payloads & Bullets Exploit
====================================
payload 与 bullets 分开,还是很奈斯
ysomap的存在就是为了解决此类问题,采用模块化的思想,ysomap将具备动态组合利用链和利用效果的能力。对于遇到的不同环境,根据特定的组合来达成实际利用。
为此,我将原本的利用链切分成了两个部分payload和bullet:
payload:指代利用链的前序部分
bullet:指代最终利用链可达成的效果,如命令执行、jndi外链等效果
ysomap.payloads.Payload 接口提供如下方法
提供如下payload
接下来看bullet ysomap.bullets.Bullet,提供了多种利用效果
Exploit
五、一些工具类
1.ysomap.core.util *Helper
======================================================================
ysomap.core.util.CipherHelper Shiro反序列化漏洞利用时的加密工具类
ysomap.core.util.ClassFiles 通过javassist,实现动态修改class,根据不同bullet功能,实现序列化数据的构造
ysomap.core.util.FileHelper 文件内容读取,只有一个getFileContent方法
ysomap.core.util.HTTPHelper 通过okthhp库可开启http服务,发送get post请求
ysomap.core.util.PayloadHelper
ysomap.core.util.ReflectionHelper 反射相关工具类
ysomap.core.util.SocketHelper socket连接工具类,不过好像没地方用到
2.thirdparty
echo.SocketEchoPayload 为bullet提供一个小型socket连接shell
echo.TomcatEchoPayload 为bullet提供tomcat回显实现功能
loader.RemoteFileLoader 为bullet提供远程jar加载功能
org.apache.shiro shiro反序列化漏洞攻击相关依赖
六、Other
===============
反序列化攻击时,uid不匹配是个坑,希望作者后期更新可以加上
bullet还可以加上更多的攻击方式 不同框架的回显内存马之类
作者提供的script功能有很大的发挥空间,就拿shiro来说,有时我们不确定那条链能用,可以自己些script来进行初步fuzz
七、参考链接
==============
https://github.com/wh1t3p1g/ysomap
最后作者YYDS Respect