Log4j2
前言前几天做了一个log4j2的题目,但是还没有系统的学一下(关于开发,漏洞的原理,一些绕过方法等)。 简介Log4j2 是 Apache Log4j 的升级版本,相较于 Log4j 1.x 和 Logback,提供了显著的性能提升和功能改进。它被广泛认为是目前最优秀的 Java 日志框架之一,常与 SLF4J 门面结合使用以实现高效日志记录。 漏洞复现环境准备这里要先准备一个log4j2的环境 jdk8u65 log4j2 2.14.1 cc 3.2.1首先是依赖包12345678910111213141516<dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.14.1</version> </dependency> <dependency> <groupId>...
Ez_gadget
Ez_gadget先对源码进行简单的审计第一个绕过点是上图位置,需要一个str,它的hashcode和key的要相同,但是字符不能相同,具体的构造可以看这篇文章Java 构建 HashCode 相同的字符串_java 中hash相同的字符-CSDN博客 12345from urllib import parse while 1: key = input("#") print(parse.quote(chr(ord(key[0])-1)+chr(ord(key[1])+31)+key[2::])) 1.2.62的版本在加上给了xbean-reflect的依赖包exp为 123456789101112import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.parser.ParserConfig; import org.apache.xbean.propertyeditor.JndiConverter; public class exp1 ...
fastjson4
前言依旧是放松了几天,然后想起来还有4和5还没有学,接着来吧。这篇主要是1.2.62-1.6.68的绕过方法,以及调试分析 1.2.62环境 需要开启AutoType; fastjson<=1.2.62 JNDI注入利用所受的JDK版本限制; 需要xbean-reflect包,不限版本依赖为:123456789101112<dependencies> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.62</version> </dependency> <dependency> <groupId>org.apache.xbean</groupId> <artifactId>x...
Springctf-1zLog
Springctf 1zLog题目名称是1zlog,大概率是和log4j2有关,关于log4j2,它是java日志记录框架,漏洞的主要成因就是log4j2会将${}里的内容单独处理,也就是去调用lookup进行查找,这时就会产生jndi注入。先把jar包放到jadx或者jd-gui里,反编译一下,进行代码审计。这里便是利用点。既然是jndi注入又是高版本java17,我的第一想法是看看是不是用tomcat起的服务,这样的话,能不能用BeanFactory打一波很显然不是这时候我们需要去看一下依赖包有哪些,有哪些可以利用的东西。有两个很可疑的依赖包。主要利用就看这篇文章就好JDBC Attack与高版本JDK下的JNDI Bypass – 奇安信技术研究院主要就是利用BasicDataSourceFactory远程加载sql语句,执行命令。然后我们就开始写exp 12345678910111213141516171819202122232425262728293031323334353637383940414243import com.sun.jndi.rmi.registry.R...
fastjson3
前言还是跟着Drunkbaby大佬的博客继续学习,这篇是fastjson各版本的绕过,绕过的利用都必须开启AutoTypeSupport才能成功。接着上篇的1.2.24,我们从1.2.25开始。 fastjson1.2.25如何修复的先添加一下依赖包 12345<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.25</version> </dependency> 这里我们先看一下1.2.24与1.2.25之间的关键区别点首先是1.2.24DefaultJSONParser.parserObject方法这里有个加载类的方法的调用。作用就是找@type指向的类,并进行加载,类似于Class.forName但是在1.2.25版本的时候,这里改成了checkAutoType具体看一下checkAutoType方法的逻辑 123456...
fastjson2
前言从fastjson的1.2.24版本开始 环境jdk用的是8u65(方便一点,高版本的话还得进行绕过)Maven 3.6.31.2.22 <= Fastjson <= 1.2.24 依赖导入 1234567891011121314151617181920<dependency> <groupId>com.unboundid</groupId> <artifactId>unboundid-ldapsdk</artifactId> <version>4.0.9</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.5</version>...
fastjson1
前言终于开始fastjson的学习了,这两天放松的有点太严重了,哈哈哈。 Fastjson简介fastjson是一个java库,主要作用:可以把java对象转换为json的格式,也可以将json的格式转换为java对象。提供了两个主要的接口来分别实现序列化和反序列化的操作JSON.toJSONString将java对象转化为json对象,序列化的过程。JSON.parseObject/JSON.parse将json对象重新变回java对象;反序列化过程。这里可以将json理解成一个字符串。(这样就和php反序列化类似) 从代码角度分析序列化代码的实现这里我们来写一下简单的代码来了解一下具体的序列化和反序列化的过程。首先引入依赖 12345<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.24</version> </dependency> 这...
JNDI注入
前言开始JNDI的学习,一定要多敲敲代码啊(对自己说)官方文档地址:课程:JNDI(Java™ 命名与目录接口>教程)概述 JNDI概念JNDI是java命名与目录接口,一个名字对应一个java对象,也就是说一个字符串对应一个Java对象.JNDI在jdk里面支持一下服务: LDAP:轻量级目录访问协议 通用对象请求代理架构(CORBA);通用对象服务(COS)名称服务 java远程调用(RMI)注册表 DNS服务 JNDI的利用方式与漏洞JNDI在RMI中的利用RMI服务端的接口类和实现类,和之前一样就可以.重点改变的是使用JDNI的方式去绑定远程对象到注册中心,以及使用JDNI的方式去调用这个远程对象. 服务端123456789101112131415import javax.naming.InitialContext; import javax.naming.NamingException; import java.rmi.RemoteException; import java.rmi.registry.LocateRegistry; import ja...
moectf2025_第23关
moectf 2025 第23关常规做法直接给出exp吧,挺有意思的,感觉写的没问题(但是没反弹成功),本地的calc,也正常执行了(虽然反序列化前会执行一次) 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192import com.example.demo.Dog.Dog; import com.example.demo.Dog.DogService; import java.io.*; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.Base64; ...
RMI_2
前言前一个专题,我们对RMI的基础和通信原理进行了简单的分析,这一期对攻击方法进行一个总结参考:Java反序列化之RMI专题02-RMI的几种攻击方式 | Drunkbaby’s BlogRMI攻击方式 | CurlySean’s Blog RMI的基本攻击方式 RMI Client 打 RMI Registry RMI Client 打 RMI Server RMI Client 攻击RMI registry只能够通过客户端打registry.根据上篇文章的分析,我们要去找一下反序列的点位在哪里我们在使用一下语句时,会调用了lookup 1IRemoteOBJ remoteOBJ = (IRemoteOBJ) registry.lookup("rmiserver"); 而这个lookup这里对应着注册中心(特殊的服务端的skel),这时就会调用到case2,这都是我们之前分析过的,所以不同的方法对应着不同的case0->bind1->list2->lookup3->rebind4->unbind那么,我们就可以通过这里不同的方...
