1.2.24-RCE
我们先举一个最开始的漏洞来理解这个漏洞,之后的漏洞无非是在这个上面将一些恶意类或其他字符加入黑名单 我们使用vulhub来演示
首先先编译一下执行的代码
将poc.class上传至服务器。
然后我们还需使用marshalsec-0.0.3-SNAPSHOT-all.jar
启动一个RMI服务器
RMI,用官方的话来说:RMI 应用程序通常包括两个独立的程序,一个服务器和一个客户端。典型的服务器程序创建一些远程对象,使这些对象的引用可访问,并等待客户端调用这些对象上的方法。典型的客户端程序获取对服务器上一个或多个远程对象的远程引用,然后调用它们的方法。RMI 提供了服务器和客户端通信和来回传递信息的机制。这种应用程序有时被称为分布式对象应用程序。
通俗易懂的来说,RMI就是
一个机器 执行 另一个机器 给的命令,但是执行的命令是不会显的
首先我们使用python搭建一个简易的服务器:(默认开启8000端口)
所以我们这里需要启动一个RMI服务器让靶机来访问RMI来执行命令
注意这里使用的是
java -cp
而不是Java -jar。我们解压jar包,META-INF文件夹下都有MANIFEST.MF,在MANIFEST.MF中会有一个Main-Class,他是指定入口。如果你的MANIFEST.MF文件中没有Main-Class,就会提示Cant load main-class之类的错误。
所以这里使用
-cp
执行,指定marshalsec.jndi.RMIRefServer
向靶场服务器发送Payload,带上RMI的地址:
这里解释一下:
前面说过,fastjson序列化的时候,把原始类型记录下来
序列化后的字符串中添加@type属性,存放对象类型
首先我们找到需要调用的类
com.sun.rowset.JdbcRowSetImpl
,这个类一定会被加载被攻击的服务器拿到这个恶意的数据就找rmi服务器去执行命令
这个rmi服务器相当于请求8000端口服务器中的poc.class
从rmi请求中得到命令
ping 88s1yo.dnslog.wiki
然后被攻击的服务器就回去执行命令
整个过程可以用以下流程图表示
所以说fastjson的漏洞核心就是可以加载任意类,所以在之后的版本中就是一直在完善黑名单
从1.2.45开始,fastjson默认关闭了autotype,并且加入了checkAutotype检测机制
设置了黑名单,如果ClassName命中黑名单,程序则直接抛出异常: autoType is not support.
Last updated
Was this helpful?