前言

序列化是将变量或对象转换成字符串的过程

反序列化就是把一个对象变成可以传输的字符串,目的就是为了方便传输

而反序列化漏洞就是,假设,我们写了一个class,这个class里面存有一些变量。当这个class被实例化了之后,在使用过程中里面的一些变量值发生了改变,之所以会产生反序列化漏洞是因为应用程序在处理对象、魔术函数以及序列化相关问题的时候导致的,那么用户就可以注入精心构造的 payload。当进行反序列化的时候就有可能会触发对象中的一些魔术方法,造成意想不到的危害。

靶场环境

需要java 15以及java 8

WebGoat-8.2.2靶场

环境搭建

java -version //查看java版本
java15 //切换java15环境 //不懂切换的老铁可以参考以下链接
https://www.cnblogs.com/BlogVice-2203/p/17037847.html java -jar webgoat-server-8.2.2.jar --server.port=8080 --server.addres=0.0.0.0 //启动靶场,且靶场的端口为8080
如果不写--server.port=8080 --server.addres=0.0.0.0 会默认使用靶场的9001端口

浏览器访问localhost:8080/WebGoat

注册一个账号密码均为admin123的账号

注册成功后就会自动弹出以下界面,然后点击不安全序列化

java反序列化漏洞复现

java的序列化是由java.io.ObjectOutputStream类中的writeObject()函数实现的,而反序列化是由于java.io.ObjectInputStream类中的readObject()函数实现的页面提示让我们将要执行的代码进行序列化,然后base64编码,这里有个rO0AB开头的字符串编码,这个是java序列化的base64编码,也就是说他要我们进行序列化后还要再编码一次

并且这里还有一个可以执行系统命令的函数exec,我们可以在构造payload中写入命令执行代码,这里由于是windows系统,我就直接执行calc.exe开启计算器

开始构造payload,这里用到java8来运行程序

java -Dhibernate5 -cp hibernate-core-5.4.28.Final.jar;ysoserial-0.0.6-SNAPSHOT-all.jar ysoserial.GeneratePayload Hibernate1 calc.exe >payload1.bin
注:-Dhibernate5对应我们要使用的hibernate-core-5.4.28.Final.jar主键,ysoserial-0.0.6-SNAPSHOT-all.jar ysoserial.GeneratePayload是用来生成payload,Hibernate1是ysoserial程序的一个加密模块,calc.exe >payload1.bin是将calc.exe执行程序写入到payload1.bin文件 python java_base64.py //将payload1.bin进行base64编码

生成成功后查看payload1.txt,将里面的编码复制到页面执行框里进行执行,执行完成后自己电脑会出现计算器界面

最新文章

  1. Centos 使用YUM安装MariaDB
  2. [Linux] 结构化命令 if
  3. nginx: [warn] conflicting server name "localhost" on 0.0.0.0:80, ignored
  4. Struts2复习笔记
  5. 转自知乎:GitHub基本功能
  6. IOS 实现自定义的导航栏背景以及自定义颜色的状态栏(支持7.0以及低版本)
  7. mysql之select(一)
  8. web性能瓶颈
  9. Delphi使用NativeXml访问XML文件
  10. Disruptor的应用示例——大文件拆分
  11. Windows权限提升基础知识和命令
  12. C语言第九次作业
  13. Python爬取谷歌街景图片
  14. AIX 7.1 RAC 11.2.0.4.0升级至11.2.0.4.6(一个patch跑了3个小时)
  15. 模块四-shutil模块
  16. Java中运行时异常和非运行时异常什么鬼?
  17. elk收集windows日志
  18. 关于oracle的缓冲区机制与HDFS中的edit logs的某些关联性的思考
  19. 《网络对抗》Exp5 MSF基础应用
  20. 用org.mybatis.generator 生成代码

热门文章

  1. Go 互斥锁Mutex
  2. golang中的几种并发模式
  3. go-zero docker-compose 搭建课件服务(一):编写服务api和proto
  4. Elasticsearch rest-high-level-client 基本操作
  5. Java安全之Tomcat6 Filter内存马
  6. 通过tkinter列出全部字体名称
  7. 永久解决Ubuntu下adb权限问题
  8. 关于.Net和Java的看法-一个小实习生经历
  9. JUC学习笔记——共享模型之管程
  10. Terminal(oh-my-zsh) 美化