WebGoat-8.2.2靶场之不安全的反序列化漏洞

时间:2023-01-09 19:08:33

前言

序列化是将变量或对象转换成字符串的过程
反序列化就是把一个对象变成可以传输的字符串,目的就是为了方便传输
而反序列化漏洞就是,假设,我们写了一个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端口

WebGoat-8.2.2靶场之不安全的反序列化漏洞

WebGoat-8.2.2靶场之不安全的反序列化漏洞

浏览器访问localhost:8080/WebGoat

WebGoat-8.2.2靶场之不安全的反序列化漏洞

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

WebGoat-8.2.2靶场之不安全的反序列化漏洞

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

WebGoat-8.2.2靶场之不安全的反序列化漏洞

WebGoat-8.2.2靶场之不安全的反序列化漏洞

java反序列化漏洞复现

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

WebGoat-8.2.2靶场之不安全的反序列化漏洞

WebGoat-8.2.2靶场之不安全的反序列化漏洞

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

WebGoat-8.2.2靶场之不安全的反序列化漏洞

开始构造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编码

WebGoat-8.2.2靶场之不安全的反序列化漏洞

WebGoat-8.2.2靶场之不安全的反序列化漏洞

WebGoat-8.2.2靶场之不安全的反序列化漏洞

WebGoat-8.2.2靶场之不安全的反序列化漏洞

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

WebGoat-8.2.2靶场之不安全的反序列化漏洞

WebGoat-8.2.2靶场之不安全的反序列化漏洞