代码审计-Java项目-反序列化漏洞

java序列化和反序列化的概念:

序列化:把Java对象转换为字节流的过程。

反序列化:把字节流恢复为Java对象的过程。

序列化函数接口:

Java: Serializable Externalizable接口、fastjson、jackson、gson、ObjectInputStream.read、

ObjectObjectInputStream.readUnshared、XMLDecoder.read、ObjectYaml.loadXStream.fromXML、

ObjectMapper.readValue、JSON.parseObject等

PHP: serialize()、 unserialize() 

Python:pickle

java序列化特征:

1、java序列化功能特性

反序列化操作一般应用在导入模板文件、网络通信、数据传输、日志格式化存储、对象数据落磁盘、或DB存储等业务场景。因此审计过程中重点关注这些功能板块。

2、java序列化数据特性

一段数据以rO0AB开头,你基本可以确定这串就是JAVA序列化base64加密的数据。

或者如果以aced开头,那么他就是这一段java序列化的16进制。

3、java反序列化使用场景

http参数,cookie,sesion,存储方式可能是base64(rO0),压缩后的base64,MII等

Servlets http,Sockets,Session管理器,包含的协议就包括:JMX,RMI,JMS,JND1等

xm lXstream,XmldEcoder等(http Body:Contenttype: application/xml)

json(jackson,fastjson)http请求中包含

4、利用类别

引用库包调用反射(如:ysoserial),自身框架组件特性(如:Fastjson

5、利用工具

jndi,ysoserial,marshalsec,FastjsonExploit

5.1、框架组件

fastjson,shiro,jackson,CommonsCollections

6、挖掘思路

原生态的关键函数搜索

框架组件的引用查看获取

案例:Java项目-jspxcms-shiro框架反序列化漏洞

1.源码导入idea,搭建好环境

代码审计-Java项目-反序列化漏洞

2.idea查看依赖包发现使用了 Apache Shiro 并且版本小于 1.4.2,存在shiro-721漏洞

代码审计-Java项目-反序列化漏洞

3.根据网上的shiro-721漏洞利用方法,使用ysoserial工具选择CommonsBeanutils1 利用链,

因为项目中引用了下图的三个库,符合CommonsBeanutils1 利用链

代码审计-Java项目-反序列化漏洞

4.ysoserial工具根目录启动cmd,输入:java -jar ysoserial.jar CommonsBeanutils1 “calc” > payload.class  生成payload。意思:

调用ysoserial.jar和这个利用链CommonsBeanutils1calc这个就是要执行的命令,输入到payload.class文件里

代码审计-Java项目-反序列化漏洞

5.然后利用ShiroExp爆破出可以攻击的 rememberMe Cookiehttps://github.com/wuppp/shiro_rce_exp

填充rememberMe字段:登录网站时勾选自动登录,即可在数据包cookie中生成。最后加上个payload.class文件,最终可获得加密的payload

输入:python2 shiro_exp.py 目标地址 rememberMe字段 payload.class

代码审计-Java项目-反序列化漏洞

6.注意:爆破时间较长(一小时左右),payload长度决定爆破速度快慢。

爆破成功,返回payload

代码审计-Java项目-反序列化漏洞

7.再次访问目标地址,使用burp抓包,修改cookierememberMe字段的值为刚刚生成的payload

发包成功执行命令——弹出计算器

代码审计-Java项目-反序列化漏洞

原文始发于微信公众号(小黑子安全):代码审计-Java项目-反序列化漏洞

版权声明:admin 发表于 2023年12月15日 上午7:51。
转载请注明:代码审计-Java项目-反序列化漏洞 | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...