Fastjson反序列化漏洞vulhub靶场复现
本文最后更新于:2023年7月1日 下午
¶Fastjson简介
Fastjson是java的一个库,可以将java对象转化为json格式的字符串,也可以将json格式的字符串转化为java对象 提供了 toJSONString() 和 parseObject() 方法来将 Java 对象与 JSON 相互转换。调用toJSONString方法即可将对象转换成 JSON 字符串,parseObject 方法则反过来将 JSON 字符串转换成对象。
¶反序列化漏洞原理
在反序列化的时候,会进入parseField方法,进入该方法后,就会调用setValue(object, value)方法,在这里,会执行构造的恶意代码,最后造成代码执行。 那么通过以上步骤,我们可以知道该漏洞的利用点有两个,第一是需要我们指定一个类,这个类的作用是为了让程序获取这个类来进行反序列化操作。第二是需要将需要执行的代码提供给程序,所以这里使用了rmi。 然后反序列化的时候会去请求rmi服务器,地址为: dnslog.cn/aaa。然后加载aaa这个恶意class文件从而造成代码执行。
¶利用条件
-
Fastjson提供了反序列化功能,允许用户在输入JSON串时通过“@type”键对应的value指定任意反序列化类名;
-
Fastjson自定义的反序列化机制会使用反射生成上述指定类的实例化对象,并自动调用该对象的setter方法及部分getter方法。
-
目标服务器存在fastjson。
-
没有对用户传输的数据进行严格过滤。
¶漏洞复现
Target machine:192.168.172.136 -->kali
Attack machine:192.168.3.126 -->windows
¶搭建靶场
进入vulhub相关目录下开启靶场并进行访问。
靶场搭建需要用到docker和docker-compose以及vulhub相关靶场文件有关docker的搭建和docker-compose 的下载参考网上相关文献,这里不写,就是单纯的懒┗( ▔, ▔ )┛
docker-compose链接:https://github.com/docker/compose/releases
vulhub链接:https://github.com/vulhub/vulhub
靶场目录:vulhub-master/fastjson/1.2.47-rce
在该目录下利用docker-compose启动靶场:
1 | |
访问地址:192.168.172.136:8090
¶打靶
利用Burpsuite抓包,修改请求方式、请求正文以及正文类型,判断是否为fastjson框架,如果是fastjson框架,请求包中应该有一个严格的格式才能解析,否则会报错!
准备一个恶意的java类Exploit.java并用javac编译rmi.java文件,生成一个类文件Exploit.class
1 | |
执行命令:
1 | |
从github上下载:marshalsec-jar
工具地址:https://github.com/RandomRobbieBF/marshalsec-jar
然后将以上三个文件放到同一个文件夹。
在当前文件夹下打开cmd利用python开启简易http服务器,浏览器访问验证。
1 | |
启动rmi服务器
1 | |
在哪台机器上编译的java恶意类就要在哪台机器上启动RMI服务器
在kali中开启nc监听
1 | |
访问漏洞网站并使用BP抓包且将GET请求修改为POST请求,反弹shell的POC如下(要记得Content-Type改为: application/json,否则不成功)发送请求。
1 | |
反弹成功,kali成功上线目标靶机!!
最终结果