红日靶场三
环境配置打开虚拟机镜像为挂起状态,第一时间进行快照,部分服务未做自启,重启后无法自动运行。
挂起状态,账号已默认登陆,centos为出网机,第一次运行,需重新获取桥接模式网卡ip,也就是重启一下
除重新获取ip,不建议进行任何虚拟机操作。
目标:域控中存在一份重要文件。
本次环境为黑盒测试,不提供虚拟机账号密码。
作废了😭两台Linux靶机运行不了,只能强制重启才能用,但是这样就不是登录状态了,然后账号密码也不知道,直接死在搭建环境了
只能看看别人的打靶过程了。
Spring内存马学习
前言Spring框架比较常用就不说了,网上大部分都是建一个spring+springmvc的项目来测试内存马,内存马主要的逻辑部分都集中在springmvc的部分,因为负责处理路由请求基本都是都是需要经由springmvc,所以我看也有叫springmvc内存马的。
我这里就直接搭一个springboot项目比较方便了,反正本身也是有springmvc的,所以内部逻辑也是一样分析
版本如下
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.5.10</version> <relativePath/> <!-- lookup parent from repository --></parent>
Controller内存马Contoller注册流程我们要先知道Control ...
RASP绕过学习
RASP介绍RASP全称是Runtime applicaion self-protection,在2014念提出的一种应用程序自我保护技术,将防护功能注入到应用程序之中,通过少量的Hook函数监测程序的运行,根据当前的上下文环境实时阻断攻击事件。
目前Java RASP主要是通过Instrumentation编写Agent的形式,在Agent的premain和agentmain中加入检测类一般继承于ClassFileTransformer,当程序运行进来的时候,通过类中的transform检测字节码文件中是否有一些敏感的类文件,比如ProcessImpl等。简单的可以理解为通过Instrumentation来对JVM进行实时监控。
Instrumentation API 提供了两个核心接口:ClassFileTransformer 和 Instrumentation。ClassFileTransformer 接口允许开发者在类加载前或类重新定义时对字节码进行转换。Instrumentation 接口则提供了启动时代理和重新定义类的能力
Java Agent存在premain和agent ...
XStream反序列化
XStream介绍XStream是一个简单的基于Java库,能够将Java对象和xml文档之间进行相互转换
反序列化原因XStream实现了一套序列化和反序列化机制,核心是通过Converter转换器来将XML和对象之间进行相互的转换。
XStream反序列化漏洞的存在是因为XStream支持一个名为DynamicProxyConverter的转换器,该转换器可以将XML中dynamic-proxy标签内容转换成动态代理类对象,而当程序调用了dynamic-proxy标签内的interface标签指向的接口类声明的方法时,就会通过动态代理机制代理访问dynamic-proxy标签内handler标签指定的类方法;
利用这个机制,攻击者可以构造恶意的XML内容,即dynamic-proxy标签内的handler标签指向如EventHandler类这种可实现任意函数反射调用的恶意类、interface标签指向目标程序必然会调用的接口类方法;最后当攻击者从外部输入该恶意XML内容后即可触发反序列化漏洞、达到任意代码执行的目的。
相关类介绍EventHandler类EventHandler是一 ...
C3P0利用链学习
C3P0介绍C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring等。
JDBC是Java DataBase Connectivity的缩写,它是Java程序访问数据库的标准接口。使用Java程序访问数据库时,Java代码并不是直接通过TCP连接去访问数据库,而是通过JDBC接口来访问,而JDBC接口则通过JDBC驱动来实现真正对数据库的访问。
连接池类似于线程池,在一些情况下我们会频繁地操作数据库,此时Java在连接数据库时会频繁地创建或销毁句柄,增大资源的消耗。为了避免这样一种情况,我们可以提前创建好一些连接句柄,需要使用时直接使用句柄,不需要时可将其放回连接池中,准备下一次的使用。类似这样一种能够复用句柄的技术就是池技术。
环境搭建<!-- https://mvnrepository.com/artifact/com.mchange/c3p0 --><dependency> <groupId>com.mchange</grou ...
Java Agent学习
Java Agent介绍官方文档:https://docs.oracle.com/javase/10/docs/api/java/lang/instrument/package-summary.html
java agent就是一种能够在不影响正常编译的情况下,修改java字节码,进而动态地修改已加载或未加载的类、属性和方法的技术。也就是平时所说的插桩技术,平常的热部署、诊断工具都是基于Java Agent技术来实现的。该技术从JDK1.5开始引入。
Java Agent使用Java Agent分为两种,一种是在JVM启动前加载的premain-Agent,另一种是JVM启动后加载的agentmain-Agent,有点类似特殊的拦截器的样子。
premain-Agent实现该Agent首先我们必须实现一个静态premain方法,同时我们jar文件的清单(mainfest)中必须要有Premain-Class属性,也就是jar包中常见到的MF文件,这从官方文档中可以得知
可以知道,就是在执行main方法前执行我们的premain方法,执行的类就是我们Premain-Class属性的值
...
JDK17反射限制绕过学习
JDK17反射限制在JDK9至JDK16版本之中,Java.*依赖包下所有的非公共字段和方法在进行反射调用的时候,会出现关于非法反射访问的警告,但是在JDK17之后,采用的是强封装,默认情况下不再允许这一类的反射,所有反射访问java.*的非公共字段和方法的代码将抛出InaccessibleObjectException异常
比如下面获取ClassLoader的protected的defineClass方法
import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.util.Base64;public class Attack { public static void main(String[] args) throws Exception { Method defineClass = ClassLoader.class.getDeclaredMethod("defineClass", Strin ...
XML反序列化学习
XMLDecoder介绍XMLDecoder是java自带的以SAX方式解析xml的类,其在反序列化经过特殊构造的数据时可执行任意命令。
所谓的解析就是在java对象和xml文件之间的转化。
SAX是什么SAX全称为Simple API for XML,在Java中有两种原生解析xml的方式,分别是SAX和DOM。两者区别在于:
Dom解析功能强大,可增删改查,操作时会将xml文档以文档对象的方式读取到内存中,因此适用于小文档
Sax解析是从头到尾逐行逐个元素读取内容,修改较为不便,但适用于只读的大文档
SAX采用事件驱动的形式来解析xml文档,简单来讲就是触发了事件就去做事件对应的回调方法。
在SAX中,读取到文档开头、结尾,元素的开头和结尾以及编码转换等操作时会触发一些回调方法,你可以在这些回调方法中进行相应事件处理:
startDocument()
endDocument()
startElement()
endElement()
characters()
简单demo一个简单的pojo类
package org.example.XMLTest;public class ...
DASCTF 2024金秋十月部分题目复现
官方wp链接:https://www.yuque.com/chuangfeimeiyigeren/eeii37/xn0zhgp85tgoafrz?singleDoc#FAsbS
ezlogin就是一个正常的登录、注册、修改密码的服务,看了一下jar包
见到熟悉的hutool,前面的ciscn题目复现才遇到,然后spring-boot那就是有jackson
当时审了半天的逻辑,发现能给传参的参数长度都限制死了,他有一个默认的xml文件
<!-- this is /user/AAAAAA.xml --><java> <object class="org.example.auth.User"> <void property="username"> <string>AAAAAA</string> </void> <void property="password"> ...
UTF-8 Overlong Encoding绕过学习
之前只是浅浅的知道这个东西,现在来深入学习一下,因为在java题目中有时会用到该方法来进行绕过
UTF-8编码过程UTF-8(8-bit Unicode Transformation Format)是一种用于编码Unicode字符的可变长度字符编码方案。它能够表示Unicode字符集中的每个字符,并且与ASCII编码兼容。
它可以将Unicode里的所有字符转换成1到4个字节来表示
下面是一个Unicode对应UTF-8的转换表
常见的ASCII字符(U+0000到U+007F)用1个字节表示。
其他Unicode字符根据其范围使用2到4个字节。
以欧元符号€来举例,该符号的Unicode编码为U+20AC,位于U+0800和U+FFFF之间,所以为三个字节,编码长度为3,0x20AC的二进制为10 0000 1010 1100
然后根据每个字节缺的位数,从左至右按顺序分成三组,第一组长度不满在前面补零:0010,000010,101100
然后填进去,转换成十六进制,欧元符号的UTF-8编码就是\xE2\x82\xAC
python来decode验证一下
Overlong E ...