Java反序列化CC链3
前言CC3 链同之前我们讲的 CC1 链与 CC6 链的区别之处是非常大的。原本的 CC1 链与 CC6 链是通过 Runtime.exec() 进行命令执行的。而很多时候服务器的代码当中的黑名单会选择禁用 Runtime。 而 CC3 链,则是通过动态加载类加载机制来实现自动执行恶意类代码的。所以我们先来过一遍 Java 动态类加载机制。 环境 jdk8u65 Commons-Collections 3.2.1 TemplatesImpl 解析在之前的类的动态加载文章中,提到了一种通过ClassLoader#defineClass直接加载字节码的方法,在这一条链子中,流程图如下: 我们正向去看,首先来到loadClass,他的作用是从已加载的类缓存,父加载器等位置寻找类(这里实际上是双亲委派机制),在前面没有找到的情况下,执行 findClass()。 来到 findClass() 方法,他的流程如下: 根据名称或位置加载 .class 字节码,然后使用 defineClass,代码实例如下。 通常由子类去实现。 defineClass()...
类的动态加载
类加载器及双亲委派类加载器有什么用加载 Class 文件以下列代码为例 1Student student = new Student(); 我们知道,Student 本身其实是一个抽象类,是通过 new 这个操作,将其实例化的,类加载器做的便是这个工作。 ClassLoader 的工作如图所示 加载器有多种,主要分为这四类加载器: 虚拟机自带的加载器 启动类(根)加载器 扩展类加载器 应用程序加载器 加载器简介引导类加载器引导类加载器(BootstrapClassLoader),底层原生代码是 C++ 语言编写,属于 JVM 一部分。 不继承 java.lang.ClassLoader 类,也没有父加载器,主要负责加载核心 java 库(即 JVM 本身),存储在 /jre/lib/rt.jar 目录当中。(同时处于安全考虑,BootstrapClassLoader 只加载包名为 java、javax、sun 等开头的类)。 扩展类加载器(ExtensionsClassLoader)扩展类加载器(ExtensionsClassLoader),由...
Windows权限维持
前言前些天发了一篇关于Windows权限提升的文章,这一篇算是下文,关于Windows权限维持的。当我们成功在目标机器上获取到了一定的权限,我们就需要考虑权限维持了,该文章所有的操作都默认已经拥有了一定的权限甚至是system权限。 Windows权限维持一般都考虑如下几个方面:用户、服务、文件、软件。具体就是如下几种: 低权限用户篡改 Windows服务篡改 隐蔽后门文件 第三方软件利用 接下来就让我详细的讨论一下。 注意:本文章中的演示均借用了tryhackme所提供的靶机,所以不会提供环境配置的相关细节,如果需要实操的建议去买一个tryhackme的会员 低权限用户篡改通常来说大多数的安全措施都会格外关注管理员、管理员组、者系统用户的情况,所以为了避免我的被踢下线导致权限丢失,我们就可以考虑篡改低权限的用户,使其拥有管理员权限,从而维持我们的权限。 分配组成员资格篡改直接划入管理员组让非特权用户获得管理员权限的直接方法是使其成为管理员组的一部分。我们可以通过如下命令实现: 1net localgroup administrators myuser...
Windows提权
前言最近在tryhackme里边学习有关红队的一些东西,目前学习到了主机逃逸了,想着把前面的知识总结复习一下,就有了这边文章,这篇文章重点不在于如何利用,更多的是对思路的梳理和总结,根据我所学的在Windows中进行权限提升,通常有如下四个情况 Windows 服务或计划任务的配置错误 我们的帐户被赋予了过多的权限 易受攻击的软件 缺少 Windows...
Java反序列化CC链6
使用限制不限制jdk版本,CC库小于等于3.2.1均可利用 CC利用链分析前情回顾CC1根据之前对CC链1的分析,我们知道可以通过ChainedTransformer配合InvokerTransformer实现命令执行。详细的解析可以看我之前的一篇文章:https://hadagaga.github.io/2025/05/15/JavaCC%E9%93%BE1/下面一小段示例代码: 12345678Transformer[] transformers = { new ConstantTransformer(Runtime.class), new InvokerTransformer("getMethod", new Class[]{String.class, Class[].class}, new Object[]{"getRuntime", new Class[0]}), new...
Java反序列化CC链1
执行类sinkTransformer接口下的实现类InvokerTransformer 条件:继承了Serializable 关键方法:12345public InvokerTransformer(String methodName, Class[] paramTypes, Object[] args) { this.iMethodName = methodName; this.iParamTypes = paramTypes; this.iArgs = args;} 12345678910111213141516171819public Object transform(Object input) { if (input == null) { return null; } else { try { Class cls = input.getClass();//获取传入对象的类 Method method...
Pydash set原型链污染漏洞解析
前言在nctf中遇到了一pydash的题目,是没见过的知识,所以写一篇文章复现分析一下。 2024-nctf源码12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061'''Hints: Flag在环境变量中'''from typing import Optionalimport pydashimport bottle__forbidden_path__=['__annotations__', '__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__',...
Java反序列化-01
前言在这篇文章之前,我已经学习了有关fastjson的Java反序列化,但是在最近的比赛中考察到了Java原生反序列化的知识点,初步了解之后发现两者相距甚远,所以决定写下这篇这篇文章,记录一下Java反序列化的学习。虽然Java原生的反序列化已经十分少见,但是毕竟是网络安全,可以不用,不能不会,所以还是深入研究一下。 序列化与反序列化的代码实现有关于序列化和反序列化的知识点这里不做赘述,个人建议从PHP开始了解序列化与反序列化,因为PHP的序列化更加简单些,这里贴出之前所写的文章链接,供师傅们学习: 序列化与反序列化基础及反序列化漏洞(附案例)_反序列化漏洞代码-CSDN博客 还是先创建一个Java项目,创建一个类文件,键入如下代码。 Person.java1234567891011121314151617181920212223242526package org.example;import java.io.Serializable;public class Person implements Serializable { private String...
2024-nctf 个人WP
sqlmap-master 访问环境后发现这是一个sqlmap的web服务,传入127.0.0.1后可见执行了sqlmap命令,尝试输入 1127.0.0.1 && whoami && 发现未能注入命令,分析源码。 1234567def generate(): process = subprocess.Popen( command.split(), stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=False ) 发现执行命令的这个方法,把传入的命令分割了,且shell=False,所以这里的&不会被当作bash的特殊字符,而会被当作传参传入,所以注入失败了。这里我们就得转变方向了,尝试寻找有没有可能利用sqlmap本身的参数。 我们发现这里有一个eval参数可以执行任意的python代码,所以我们可以构造如下参数: 12127.0.0.1 --eval...
PHP模板注入漏洞-Twig篇
PHP常见模板引擎 Twig Twig是来自于Symfony的模板引擎,它非常易于安装和使用。它的操作有点像Mustache和liquid。 Smarty Smarty算是一种很老的PHP模板引擎了,非常的经典,使用的比较广泛。 Blade Blade 是 Laravel 提供的一个既简单又强大的模板引擎。 和其他流行的 PHP 模板引擎不一样,Blade 并不限制你在视图中使用原生PHP代码。所有Blade视图文件都将被编译成原生的PHP代码并缓存起来,除非它被修改,否则不会重新编译,这就意味着 Blade基本上不会给你的应用增加任何额外负担。 模板引擎payload格式 12345Smarty {php}echo `id`;{/php} //在smarty 3.X中废弃 {}{literal} //PHP5中适用 {if}{/if} 12Twig {{2*3}} 123Blade...