Java反序列化

写在前面:java的反序列化,听一节课是不足以了解的,下面提供一些关于此方面知识的链接,供大家学习。
https://zhuanlan.zhihu.com/p/637077178
https://blog.csdn.net/qq_21484461/article/details/131406185
图一
java中调用api实现序列化/反序列化
图二
1、序列化和反序列化–前面已经明确地区分过
序列化(Serialization): 将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区–将程序对象(内存中的数据)转为方便存储的格式存储在文件(磁盘中),也就是内存->磁盘。
反序列化:从存储区中读取该数据,并将其还原为对象的过程,成为反序列化–磁盘取出,读到内存。
2、java反序列化常用的工具/脚本(生成payload):ysoserial
https://blog.csdn.net/weixin_34275734/article/details/92243836

具体分析

Java 反序列化及命令执行代码测试:5:50
WebGoat_Javaweb 靶场反序列化测试:14:00
思路:
图三
1、序列化-》base64-》base64解密-》反序列化
2、这里进行对象读取时,会将读取的东西执行
!攻击–解码+反序列化+构造自己想要的command(payload)+序列化+base64
3、下方的特征可以作为序列化的标志参考:
一段数据以rO0AB开头,你基本可以确定这串就是JAVA序列化base64加密的数据。
或者如果以aced开头,那么他就是这一段java序列化的16进制。
4、利用反序列化时,要反弹shell(解决回显问题)–nc -lvvp 端口号 –监听命令反弹shell接收数据。
网鼎杯javaweb-java反序列化(难-重点):50:00
思路:
![图四](https://pic.imgdb.cn/item/653633ebc458853aef2c5cd9.jpg “解析–根据数据包判断”注入点”)
1、登录后,常见的数据包会返回cookie、用户信息、但是这道题的回显是一段序列化的数据,而上述说的用户信息就包含在里面。
2、把获得的那一串先base64 decode,再用工具解析成(还原)数据;然后生成payload(序列化、bin文件),再base64 code,发送过去。
3、nc -lvvp 端口号 –监听命令(反弹shell接收数据)。

总结

网鼎杯javaweb-java反序列化(难-重点)-总结:1:19:00
1、白盒看代码判断有无java反序列化漏洞,而黑盒看数据包?。
2、此篇文章只是从代码分析java反序列化,但实际仍有很多类型。

java反序列化与php反序列化区别

1、php的反序列化是依靠在不同时期自动调用的魔术方法(有类)以及代码相关函数(无类)有关;java反序列化是以代码中序列化与反序列化的转变过程中的代码执行相关。
2、序列化和反序列化本身没有漏洞点,只是为了实现数据的完整高效的传输。
PHP反序列漏洞是由于类里面的魔术方法调用了某个函数,该危险函数又调用了别的函数,最终执行到了危险函数的位置。
JAVA反序列化漏洞是由于开发者重写了readObject方法,该readObject方法方法调用了别的方法,最终执行到了例如Transfrom方法的危险方法(链式调用)。
3、Java的反序列化主要用于在分布式系统中进行对象的远程传输和存储,而PHP的反序列化主要用于在Web应用中进行数据的传输和存储。因此,在实际应用中,Java的反序列化更加复杂和灵活,而PHP的反序列化更加简单和直观。
参考:https://blog.csdn.net/weixin_58783105/article/details/132975714