- 博客(22)
- 收藏
- 关注
原创 JAVA代码审计-Tarzan-cms
变量,之后就没有做任何的处理 导致的任意文件上传,然后就是进入 case 方法,我们这里就是本地保存的文件,就看最后一个逻辑处理,看文件保存在哪(这里只的是在电脑中,而不是映射的路由在哪,下文就是看这个,想看url在哪,他的报文就直接有回显)uploadLocal调用这个方法 fileUploadProperties.getUploadFolder() 传递的参数 我们先跟进fileUploadProperties.getUploadFolder()文件名必须是theme.yaml 不然就进不了if语句。
2025-05-26 02:00:37
727
原创 JAVA安全-shiro721
倒数第二位怎么求呢,我们就先让最后一位明文变成0X02(此时我们是知道最后一位的中间值的,修改成对应的IV值就行),然后最后一个明文是0X02,那么倒数第二位就也是0X02,继续通过修改IV值,使其响应包返回200,虽然还是一个无效解密内容,但是这样我们就可以拿到倒数第二个中间值了,第三个就继续,先把最后两个设置位0X03,然后循环,把这个组的所有中间值爆破出来,至此,我们可以把所有的中间值都爆破出来。1.将密文进行分组(按照加密采用的分组大小),前面的第一组是初始化向量IV,从第二组开始才是真正的密文。
2025-03-30 00:34:50
950
原创 JAVA反序列化-shiro550
这里的前面,先判断是否为 HTTP 请求,如果是的话,获取 cookie 中 rememberMe 的值,然后判断是否是 deleteMe,不是则判断是否是符合 base64 的编码长度,然后再对其进行 base64 解码,将解码结果返回。在代码里(Shiro-550),Shiro 1.2.4 以上版本官方移除了代码中的默认密钥,要求开发者自己设置,如果开发者没有设置,则默认动态生成,降低了固定密钥泄漏的风险。是不是只要反序列化了我们的文件,就能“弹计算器了”。
2025-03-30 00:32:53
825
原创 JAVA安全-cb链
Apache Commons BeanUtils 是 Apache Commons 项目集的一个子项目,它提供了一组工具类,包含了属性拷贝、类型转换、属性获取和设置等功能,用于简化 JavaBean 的属性操作// 属性一般定义为privatepublic Person(int age, String name) { //有参构造public Person() { //无参构造public int getAge() { //读方法(getter)return age;
2025-03-30 00:31:50
845
原创 JAVA反序列化-CC7
if (!Map<?>) o;调用了LazyMap的equals方法,但是LazyMap中并没有equals方法,实际上是调用了LazyMap的父类AbstractMapDecorator的equals方法,虽然AbstractMapDecorator是一个抽象类,但它实现了equals方法。
2025-03-30 00:24:53
695
原创 JAVA反序列化-cc5
这里调用了transform方法,那就思路很清楚了,后半段就是ChainedTransformer+InvokerTransformer。可以看到这里是调用了toString()方法的,但是调用toString方法太多了,这里就直接跟着链子走。调用了get方法,这里链子是LazyMap.get ,所以map值应该是传入LazyMap。学习这条链子主要的目的是引入调用任意类toString方法的入口类,在链子一开始的时候构造方法要传入null,不然就直接弹计算器了。然后调用了getValue。
2025-03-30 00:24:08
202
原创 JAVA反序列化-cc4
学了几条链子之后,确实发现java代码能力提升了许多,然后调试代码也顺畅许多Java反序列化Commons-Collections篇06-CC4链 | Drunkbaby’s Blog。
2025-03-30 00:22:26
347
原创 JAVA反序列化-CC3
学习CC3先需要学习java中的类加载机制因为CC3是通过动态加载类加载机制来实现自动执行的cc3的特点就是不再依赖Runtime类了。
2025-03-30 00:21:42
306
原创 JAVA动态类加载
Java 类加载是 Java 虚拟机 (JVM) 在运行时将 .class 文件转换为内存中的数据结构(主要存放在方法区)并生成对应 Class 对象的过程。这个过程使得 JVM 能够动态地加载、链接和初始化类,从而实现灵活的运行时行为。
2025-03-30 00:20:53
851
原创 java反序列化-cc6
在HashCode类中的readObject方法 中就会调用hash方法,是不是跟put方法挺像的,所以现在有个问题,我们是想让他在反序列化的时候执行命令,而不是在put方法的时候就执行了,应该怎么办?在put之后,一切都正常运行,但是到了LazyMap类的get方法时,if判断为true了,没有执行transform,导致命令没有执行。我们在put的时候先随便传一个值,然后在用反射进行改变成我们需要的值,这样就解决了。现在我们确保了这个是可以的,我们就继续看哪里调用了。后续利用链.hashCode()
2025-03-30 00:20:00
845
原创 JAVA反序列化
Java序列化是指把Java对象转换为字节序列的过程;而Java反序列化是指把字节序列恢复为Java对象的过程。序列化分为两大部分:序列化和反序列化。序列化是这个过程的第一部分,将数据分解成字节流,以便存储在文件中或在网络上传输。反序列化就是打开字节流并重构对象。对象序列化不仅要将基本数据类型转换成字节表示,有时还要恢复数据。恢复数据要求有恢复数据的对象实例。在序列化跟反序列化很重要的两个方法writeObject和readObject只要服务端反序列化数据,客户端传递类的readObject。
2025-03-30 00:17:27
701
原创 JAVA反序列化-cc1-LazyMap
这条链子是补充链,利用点还是InvokeTransformer发现在LazyMap类中有一个public类型的get方法中有调用transform方法我们想实例化这个对象调用这个方法试试是否可行,但是先看这个类的构造函数,作用域为protected,因为无法直接获取,而decorate方法里面能够 new 一个LazyMap对象,于是我们构造如下的 EXP,来证明这条链子暂时是可行的。
2025-03-30 00:15:59
317
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人