Spring内存马
学习,记录
前置知识Beanbean 是 Spring 框架的一个核心概念,它是构成应用程序的主干,并且是由 Spring IoC 容器负责实例化、配置、组装和管理的对象。
通俗来讲:
bean 是对象
bean 被 IoC 容器管理
Spring 应用主要是由一个个的 bean 构成的
ApplicationContext在Spring里,BeanFactory是IoC容器的实际代表,而ApplicationContext正好继承了BeanFactory,所以org.springframework.context.ApplicationContext接口也代表了IoC容器,一旦获得了ApplicationContext实例,也即获得了IoC容器的引用。
这是BeanFactory与ApplicationContext的区别:
BeanFactory的实现是按需创建,即第一次获取Bean时才创建这个Bean,而ApplicationContext会一次性创建所有的Bean
ContextLoaderListener在spring应用里,可以同时有多个Context,其中只有一个 ...
Code-Breaking Puzzles
前言这个是P牛知识星球上的一道题,历史久远,但是值得学习
题目文件:https://www.leavesongs.com/media/attachment/2018/11/23/challenge-0.0.1-SNAPSHOT.jar
题目分析解压jar拿到配置文件
spring:
thymeleaf:
encoding: UTF-8
cache: false
mode: HTML
keywords:
blacklist:
- java.+lang
- Runtime
- exec.*\(
user:
username: admin
password: admin
rememberMeKey: c0dehack1nghere1
反编译class查看一下代码,可以边运行jar边分析
查看MainController,没有登录的情况下会跳转到/login
@GetMapping({"/login"})
public String login() {
...
东华杯ezgadget
题目分析题目给了一个jar,反编译查看
路由
public class IndexController {
@ResponseBody
@RequestMapping({"/"})
public String index(HttpServletRequest request, HttpServletResponse response) {
return "index";
}
@ResponseBody
@RequestMapping({"/readobject"})
public String unser(@RequestParam(name = "data",required = true) String data, Model model) throws Exception {
byte[] b = Tools.base64Decode ...
C3P0
C3P0反序列化C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring等
连接池类似于线程池,在一些情况下我们会频繁地操作数据库,此时Java在连接数据库时会频繁地创建或销毁句柄,增大资源的消耗。为了避免这样一种情况,我们可以提前创建好一些连接句柄,需要使用时直接使用句柄,不需要时可将其放回连接池中,准备下一次的使用。类似这样一种能够复用句柄的技术就是池技术。
环境:
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.2</version>
</dependency>
URLClassLoader漏洞发生在com.mchange.v2.c3p0.impl.PoolBackedDataSourceBase这个类
先看看序列化writeO ...
JDBC反序列化
JDBC反序列化认识JDBCJDBC(Java DataBase Connectivity)是一种用于执行Sql语句的Java Api,即Java数据库连接,是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,可以为多种关系数据库提供统一访问,提供了诸如查询和更新数据库中数据的方法,是Java访问数据库的标准规范。简单理解为链接数据库、对数据库操作都需要通过jdbc来实现。Mysql JDBC 中包含一个危险的扩展参数: “autoDeserialize”。这个参数配置为 true 时,JDBC 客户端将会自动反序列化服务端返回的数据,造成RCE漏洞。
漏洞原理若攻击者能控制JDBC连接设置项,则可以通过设置其配置指向恶意MySQL服务器触发ObjectInputStream.readObject(),构造反序列化利用链从而造成RCE。通过JDBC连接MySQL服务端时,会有几句内置的查询语句需执行,其中两个查询的结果集在MySQL客户端进行处理时会被ObjectInputStream.readObject()进行反序列化处理。如果攻击者可以控制JDBC连接设置项,那么可 ...
CommonsBeanutils反序列化
CommonsBeanutils反序列化CB1环境搭建:
<dependencies>
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.22.0-GA</version>
</dependency>
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.9.4</version>
</dependency>
</dependencies>
下图是学习CC链的时 ...
Java Agent内存马
JavaAgent内存马在 jdk 1.5 之后引入了 java.lang.instrument 包,该包提供了检测 java 程序的 Api,比如用于监控、收集性能信息、诊断问题,通过 java.lang.instrument 实现的工具我们称之为 Java Agent ,Java Agent 能够在不影响正常编译的情况下来修改字节码,即动态修改已加载或者未加载的类,包括类的属性、方法
Agent 内存马的实现就是利用了这一特性使其动态修改特定类的特定方法,将我们的恶意方法添加进去
说白了 Java Agent 只是一个 Java 类而已,只不过普通的 Java 类是以 main 函数作为入口点的,Java Agent 的入口点则是 premain 和 agentmain
Java Agent 支持两种方式进行加载:
premain(了解)实现 premain 方法,在启动时进行加载 (该特性在 jdk 1.5 之后才有)
首先创建一个demo
package org.example;
import java.lang.instrument.Instrumentation;
publ ...
Tomcat内存马
Tomcat内存马
Servlet内存马下面是基于动态注册Servlet的内存马实现
首先要了解Servlet是如何被注册的,注册的过程是怎样的。按照正常的实现Servlet,是需要在web.xml里面进行配置的,如:
<servlet>
<servlet-name>Test</servlet-name>
<servlet-class>Test</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Test</servlet-name>
<url-pattern>/test</url-pattern>
</servlet-mapping>
要实现动态注册,那就要先去了解这个web.xml是如何被解析并且获取servlet的
解析web.xml的类是org.apache.catalina.startup.ContextConfig的webConfig()方法这个 ...
Tomcat系列
Tomcat系列简介Tomcat是由Apache软件基金会下属的Jakarta项目开发的一个Servlet容器,按照Sun Microsystems提供的技术规范,实现了对Servlet和JavaServer Page(JSP)的支持,并提供了作为Web服务器的一些特有功能,如Tomcat管理和控制平台、安全域管理和Tomcat阀等。Tomcat 很受广大程序员的喜欢,因为它运行时占用的系统资源小,扩展性好,支持负载平衡与邮件服务等开发应用系统常用的功能。
环境下载:https://archive.apache.org/dist/tomcat/
CVE-2017-12615(任意文件写入)影响范围: Apache Tomcat 7.0.0 - 7.0.79 Apache Tomcat 8.5.19
环境搭建:这里使用的是vulhub的环境,其中的conf/web.xml如下:
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache ...
Fastjson系列
FastJson系列前置知识环境搭建:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.24</version>
</dependency>
如果无法下载源码使用下面命令:
mvn dependency:resolve -Dclassifier=sources
序列化先写一个javabean:
package org.example;
public class user {
private String name;
private int age;
public user() {
System.out.println("调用构造函数");
}
public String getName() ...