fastjson漏洞复现
环境搭建
以下漏洞都可以从vulhub下载
https://github.com/vulhub/vulhub/tree/master/fastjson
漏洞原理
fastjson为了读取并判断传入的值是什么类型,增加了autotype机制导致了漏洞产生。
由于要获取json数据详细类型,每次都需要读取@type,而@type可以指定反序列化任意类调用其set,get,is方法,并且由于反序列化的特性,我们可以通过目标类的set方法自由的设置类的属性值。
那么供给制只要准备rmi服务器和web服务器,将rmi绝对路径注入到lookup方法中,受害者jndi接口会指向攻击者控制rmi服务器,jndi接口从攻击者控制的web服务器远程加载恶意代码并执行,形成RCE
漏洞利用详解
- 攻击者访问目标网站,抓包修改请求体,将构造的恶意类信息发送给目标机
- 目标对json反序列化时会加载执行我们的恶意信息,向rmi服务器请求待执行的命令
- rmi服务器请求远程机器的class,得到我们要执行的命令
- rmi将远程加载的class作为响应返回给靶机服务器
- 靶机执行恶意代码
附上大佬图解
1.2.24-RCE
docker启动
1 |
|
访问ip:8090
yakit梭哈
在yakit开启反连服务器并配置payload
(将java版本修改为8)
yakit抓包,根据给的poc修改json数据
payload:
1 |
|
将rmi地址改为我们的地址
可以看到反连服务器已经有了连接
在docker容器中也可以看到命令已经执行
反弹shell
将命令修改为反弹shell,并在yakit监听端口
1 |
|
反弹shell成功
使用dnslog外带命令回显
首先在yakit申请一个dnslog域名
然后在反连服务器中将命令修改为
1 |
|
在Shell中,反引号用于命令替换,即先执行内部的命令,然后将结果嵌入到外部命令中。
随后重新发包,在dnslog处看到命令执行结果
1.2.47-RCE
Fastjson 是阿里巴巴公司开源的一款 JSON 解析器,其性能优越,被广泛应用于各大厂商的 Java 项目中。Fastjson 于 1.2.24 版本后增加了反序列化白名单,而在 1.2.48 以前的版本中,攻击者可以利用特殊构造的 JSON 字符串绕过白名单检测,成功执行任意命令。
可以根据漏洞页面手工搭建环境利用,注意java的版本就行。我这里使用yakit一把梭哈
docker启动
1 |
|
访问ip:8090
yakit梭哈
在yakit开启反连服务器并配置payload,同时开启dnslog并随机注册域名
恶意类选runtimeexec,java版本设置为8
执行命令
1 |
|
yakit抓包发送到web fuzz,根据payload修改rmi地址
1 |
|
返回400没关系,查看反连服务器发现有了请求,再看dnslog,等待一段时间之后有了回显(yakit的dnslog有些是国外的,需要等一段时间,可以多发几次包)
反弹shell
在端口监听出监听一个端口,同时生成一个反弹shell的命令,在反连服务器处重新生成恶意类
webfuzz发包后收到shell