再谈Java反序列化:ysoserial补全计划(三)

参考文章:
https://su18.org/

C3P0 HttpBase

C3P0 的基础知识(基础使用和关键类解析)学习学习:
https://www.cnblogs.com/ZhangZiSheng001/p/12080533.html

c3p0是用于创建和管理连接,利用“池”的方式复用连接减少资源开销,和其他数据源一样,也具有连接数控制、连接可靠性测试、连接泄露控制、缓存语句等功能。目前,hibernate自带的连接池就是c3p0hibernate 是上一篇文章提到的 orm 框架)

阅读更多

再谈Java反序列化:ysoserial补全计划(二)

Commons BeanUtils1

commons-beanutils : 1.9.2

commons-beanutils 是 Apache 提供的一个用于操作 JAVA bean 的工具包。里面提供了各种各样的工具类,让我们可以很方便的对 bean 对象的属性进行各种操作。

之前有条这样的链子:PriorityQueue -> TransformingComparator -> ChainedTransformer -> InstantiateTransformer -> TemplatesImpl,中间步骤太多,于是有了这条直接从 Comparator 到 TemplatesImpl 的 getoutputProperties 方法的 CB 链。

阅读更多

再谈Java反序列化:ysoserial补全计划(一)

前言

整体跟着 su18 师傅的博客进行学习,写的真的很详细:

Java 反序列化取经路 | 素十八 (su18.org)

以 ysoserial 的众多链子为抓手,再谈 java 反序列化,也许可以注意到之前没有注意过的问题,也可以提高代码审计的水平。

URLDNS

最简单且有用的链子,不依赖任何依赖和 jdk 版本,仅使用 hashmap 和 url 这两个 jdk 自带的类。

通常用来检测是否存在反序列化漏洞。

阅读更多

Struts2全系漏洞分析(二)

参考链接:

https://blog.csdn.net/Fly_hps/article/details/85001659

https://su18.org/post/struts2-1/#s2-009

前言

在继续Struts2全系漏洞的分析之前,我犹豫了一会,究竟是要继续分析Struts2剩下的其他漏洞,还是好好分析一下ysoserial的反序列化链呢,本着尽量旧坑未填不开新坑的原则,我还是继续来调试代码,分析Struts2的历史漏洞吧。

另外,在网上寻找怎么搭建S2-007漏洞时,发现了一个惊人的漏洞源码库,只需要将对应的文件夹用 idea 打开配置自己的 tomcat 即可运行,终于不用艰难地搭环境了,好耶!

仓库在这里:https://github.com/xhycccc/Struts2-Vuln-Demo

前一篇文章由于是第一次分析Struts2的漏洞,故分析的比较详细,这一篇就会简略一点,主要理解漏洞链以及漏洞触发的流程。

阅读更多

Struts2全系漏洞分析(一)

总参考链接:https://su18.org/post/struts2-1/

Struts2 配置及使用

Struts2 是一个基于MVC 设计模式Web应用框架,它的本质就相当于一个 servlet,在 MVC 设计模式中,Struts2 作为控制器(Controller)来建立模型与视图的数据交互。

Struts2 是在 Struts 和WebWork 的技术的基础上进行合并的全新的框架。Struts2 以 WebWork 为核心,采用拦截器的机制来处理的请求。这样的设计使得业务逻辑控制器能够与 ServletAPI 完全脱离开。

在分析Struts2对一次请求的执行流程之前,为方便分析,我们需要配好Struts2-001的漏洞环境,本人亲测有效的配置教程如下,这里不再赘述:

https://lanvnal.com/2020/12/15/struts2-lou-dong-fen-xi-huan-jing-da-jian/#

阅读更多

FastJson全系漏洞分析

前置知识

fastjson是什么

fastjson 是阿里巴巴的开源 JSON 解析库,它可以解析 JSON 格式的字符串,支持将 Java Bean 序列化为 JSON 字符串,也可以从 JSON 字符串反序列化到 JavaBean。这个反序列化就是我们研究的重点。反序列化的对象必须具有默认的无参构造器和get|set方法,反序列化的底层实现就是通过无参构造器和get,set方法进行的。

阅读更多

Java-JNDI注入

简要概括:jndi注入通过访问RMI服务或LADP服务来利用动态类加载完成攻击。

JNDI基本概念

jndi的全称为Java Naming and Directory Interface(java命名和目录接口)SUN公司提供的一种标准的Java命名系统接口,JNDI提供统一的客户端API,通过不同的服务供应接口(SPI)的实现,由管理者将JNDI API映射为特定的命名服务和目录系统,使得Java应用程序可以和这些命名服务和目录服务之间进行交互。

简单来说就是jndi提供了统一的接口来方便地访问各种命名服务目录系统

阅读更多

Java-RMI反序列化漏洞

RMI基础

RPC

RPC(Remote Procedure Call)远程过程调用,就是要像调用本地的函数一样去调远程函数。它并不是某一个具体的框架,而是实现了远程过程调用的都可以称之为RPC。比如RMI(Remote Method Invoke 远程方法调用)就是一个实现了RPC的JAVA框架。

一般RPC的过程:Client如果想要远程调用一个方法,就需要通过一个Stub类传递类名、方法名与参数信息给Server端,Server端获取到这些信息后会从本地服务器注册表中找到具体的类,再通过反射获取到一个具体的方法并执行然后返回结果。

阅读更多

Java-Shiro反序列化漏洞

基本概念及漏洞成因

shiro概念:

Apache Shiro 是一个强大易用的Java安全框架,提供了认证、授权、加密和会话管理等功能,Shiro框架直观、易用、同时也能提供健壮的安全性。Apache Shiro反序列化漏洞分为两种:Shiro-550Shiro-721,而本篇中主要讨论的是Shiro-550,Shiro-721主要采用现成工具来爆破密钥和写入木马。

漏洞成因:

Apache Shiro框架提供了记住密码的功能(RememberMe),用户登录成功后会生成经过加密并编码的cookie。在服务端对rememberMe的cookie值,先base64解码然后AES解密再反序列化,就导致了反序列化RCE漏洞。

阅读更多