fastjson反序列化_学习
fastjson反序列化
相关的漏洞实在是太多了,只能学习一部分,其余的就附加上了poc
背景Fastjson 是阿里巴巴的开源JSON解析库,它可以解析 JSON 格式的字符串,支持将 Java Bean 序列化为 JSON 字符串,也可以从 JSON 字符串反序列化到 JavaBean。
Fastjson是一个全程开源的项目,项目链接 https://github.com/alibaba/fastjson/
Fastjson提供了对json数据的高效处理
JSON 字符串转换为 Java 对象fastjson提供了JSON.parseObject()方法。可以将一个json字符串转化为java对象
我们可以看一下这个方法
然后会触发parse方法
然后会使用autoType实例化具体的类,调用相关的set/get方法访问相关的属性。
parse方法将json数据反序列化成java对象,并且在反序列化时调用了对象的setter方法。
不过这里的get/set方法存在一点要求
AutoTypeFastJson和jackson在把对象序列化成json字符串 ...
JNDI注入学习
JNDI注入学习JNDI JNDI的全称是Java Naming and Directory Interface,即Java命名和目录接口,作用是为JAVA应用程序提供命名和目录访问服务的API。通过管理者对api映射相特定的命名和目录系统。使得Java应用程序可以和这些命名服务和目录服务之间进行交互。
结构jndi主要包括五个结构
javax.nameing 包含用于访问命名服务的类和接口。定义了name和Context接口
javax.nameing.directory 扩展核心 javax.命名包,以提供除命名服务之外访问目录的功能。
javax.nameing.event 包含用于支持命名和目录服务中的事件通知的类和接口。
javax.nameing.ldap 包含用于支持 LDAPv3 扩展操作和控制的类和接口。
javax.nameing.spi 包含允许在 JNDI 下动态插入各种命名和目录服务提供程序的类和接口。
相关类InitialContext123456789101112131415161 ...
JAVA_RMI学习
JAVA_RMIRMIRMI全称是Remote Method Invocation,远程⽅法调⽤。使用 RMI 技术可以使一个 JVM 中的对象,调用另一个 JVM 中的对象方法并获取调用结果。这里的另一个 JVM 可以在同一台计算机也可以是远程计算机。
RMI主要由三部分组成
123Server: 提供远程的对象Client: 调用远程的对象Registry: 一个注册表,存放着远程对象的位置(ip、端口、标识符)
Java本身对RMI规范的实现默认使用的是JRMP协议。
1JRMP:Java Remote Message Protocol ,Java 远程消息交换协议。这是运行在Java RMI之下、TCP/IP之上的线路层协议。该协议要求服务端与客户端都为Java编写,就像HTTP协议一样,规定了客户端和服务端通信要满足的规范
而在Weblogic中对RMI规范的实现使用T3协议。
1WebLogic T3协议(Two-Tier TCP/IP Protocol)是Oracle WebLogic Server中的一种专有协议,它建立在TCP/IP协议之上,用于在客户端和服务 ...
java反序列化原生链&脏数据
继续学习java
JDK7u21AnnotationInvocationHandler漏洞点出现在 sun.reflect.annotation.AnnotationInvocationHandler类的equalsImpl方法
1234567891011121314151617181920212223242526272829303132333435private Boolean equalsImpl(Object var1) { if (var1 == this) { return true; } else if (!this.type.isInstance(var1)) { return false; } else { Method[] var2 = this.getMemberMethods(); int var3 = var2.length; for(int var4 = 0; v ...
2024_西湖论剑_onlysql
2024 西湖论剑_onlysql
感觉被轮剑了,差点没签到上
题目给了一个数据库链接的页面,输入数据库地址,账号密码,就可发起链接
联想到mysql 的load data了
LOAD DATA INFILE语句用于高速地从一个文本文件中读取行,并写入一个表中。文件名称必须为一个文字字符串。
LOAD DATA INFILE 是 SELECT … INTO OUTFILE 的相对语句。把表的数据备份到文件使用SELECT… INTO OUTFILE ,从备份文件恢复表数据,使用 LOAD DATA INFILE 。
LOAD DATA 读取客户端文件MySQL 客户端和服务端通信过程中是通过对话的形式来实现的,客户端发送一个操作请求,然后服务端根据客户端发送的请求来响应客户端,在这个过程中客户端如果一个操作需要两步才能完成,那么当它发送完第一个请求过后并不会存储这个请求,而是直接丢弃,所以第二步就是根据服务端的响应来继续进行,这里服务端就可以欺骗客户端做一些事情
我们本地实验下
服务器上起一个[fake_mysql服务](fnmsd/MySQL_Fake_Server: ...
shiro反序列化
shiro反序列化0.前置知识JavaBean如果一个class满足以下条件
12若干private实例字段;通过public方法来读写实例字段。
例如
123456789101112public class bean { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; }}
那么这种class被称为JavaBean
Apache Commons Beanutils是 Apache Commons 工具集下的另一个项目,它提供了对普通Java类对象(也称为JavaBean)的一些操作方法
BeanUtils:主要提供了对于 JavaBean 进行各种操作,比如对象,属性复制等等,自动转换数据类型。PropertyUtils:用处大致与 BeanUtils 相同,但是如果类型不能自动转换会 ...
java反序列化_CC链
java反序列化_CC链1.序列化和反序列化和其他语言一样
序列化:对象 -> 字符串反序列化:字符串 -> 对象
这里我们将一个对象 weber 序列化到AsaL1n.bin这个文件里面去
12345678910111213141516171819202122package org.example;import java.io.*;import java.lang.reflect.InvocationTargetException;public class Main { public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException, IOException { people weber = new people("AsaL1n",20); try(ObjectOutputStream oos = new ObjectOutputS ...
NSSCTF Round16 Basic
NSSCTF Round16 Basic
期末考考完回来,ctf开始复健了
1.RCE但是没有完全RCE上来给了源码
123456789101112<?php error_reporting(0); highlight_file(__file__); include('level2.php');if (isset($_GET['md5_1']) && isset($_GET['md5_2'])) { if ((string)$_GET['md5_1'] !== (string)$_GET['md5_2'] && md5($_GET['md5_1']) === md5($_GET['md5_2'])) { if (isset($_POST['md5_3'])&&md5($_POST['md5_3']) == md5($_PO ...
2023安询杯
2023安询杯
这次比赛收获的了第20名,最后队友差一点点出最后两道re,不然说不定就能搞到奖金了。。。。
比赛的质量很高,难度也还好,学到了不少的东西
what’s my name打开给了php源码
12345678910111213141516171819<?php highlight_file(__file__); $d0g3=$_GET['d0g3']; $name=$_GET['name']; if(preg_match('/^(?:.{5})*include/',$d0g3)){ $sorter='strnatcasecmp'; $miao = create_function('$a,$b', 'return "ln($a) + ln($b) = " . log($a * $b);'); if(strlen($d0g3)==substr($miao, -2)&& ...
java 面向对象基础学习
java 面向对象基础学习
前面的忘记写了,算了就不发了
1.单例设计模式123456789public class test { private static test test = new test(); private test(){ } public static test get_object(){ return test; }}
在类里面完成这个类的构造,在类外面不能去创建对象,因为对象的构建方法是私有的,只能通过get_object这个类方法去获取这个对象
2.懒汉式单例在第一次调用的时候创建一个对象,然后在后面的时候都使用这同一个对象
exp
12345678910public class test { private static test test ; private test(){ } public static test getInstance(){ if (test==null ...