
Java安全基础
文章平均质量分 85
# 基础
Ho1aAs
Tutte le strada portano a roma.
展开
-
『Java安全』编译jdk
版本号格式参考https://docs.oracle.com/javase%2F9%2Fdocs%2Fapi%2F%2F/java/lang/Runtime.Version.html。根据个人需要进行编译配置,最简单的需求就是编译一个debug版的jdk。如果依赖有缺失报错,按照提示配好,再重新运行./configure。在build目录找到配置目录下的jdk文件夹就是编译好的jdk。版权声明:本文为原创,转载时须注明出处及本声明。编译时间45min,虚拟机内存建议8G+,显示编译信息即可开始编译。原创 2024-02-27 11:34:31 · 1113 阅读 · 2 评论 -
『Java安全』利用反射调用MimeLauncher.run()触发RCE
rt.jar内的类的run方法调用了exec据说可以有效绕过某些免杀,下面分析一下调用过程。原创 2022-11-25 17:20:08 · 1629 阅读 · 1 评论 -
『Java安全』Unsafe类
jdk版本基于8u111Unsafe类提供一些低级、不安全的操作,调用前必须确保安全。使用Unsafe可以进行类定义、类实例化、修改内存等操作。绕过安全检查直接向jvm注册类传入六个参数:类名、字节码、字节码起始、字节码长度、加载器、保护域} }原创 2022-09-19 15:07:43 · 1191 阅读 · 0 评论 -
『Java安全』初试JDWP攻击
Java Debug Wire Protocol(JDWP)是一种通信协议,是Java Platform Debugger Architecture的一部分。它用于调试器和Java虚拟机之间的通信,Java虚拟机进行调试。它允许在其他计算机上调试进程,可以通过网络套接字或共享内存工作。平常使用IDEA debug就是把上面的过程简化。...原创 2022-08-30 10:58:02 · 1392 阅读 · 0 评论 -
『Java安全』XStream基础使用与序列化和反序列化源码浅析
XStream is a simple library to serialize objects to XML and back again.简介依赖基础使用demoJavaBean对象代码序列化结果反序列化结果同一对象序列化和反序列化的一致性进阶操作给标签起别名将对象属性转化为XML标签属性添加隐式集合设置变量不被序列化XStream核心结构图浅析XStream序列化操作的源码参考完.......................................原创 2022-08-10 11:33:12 · 1166 阅读 · 0 评论 -
『Java安全』初试JavaAgent实现修改字节码和插桩
# Java Agent机制Java Agent提供两个类方法来修改JVM字节码,前者在加载class前修改、后者支持对已加载class的字节码修改并重加载```javapublic static void premain(String agentArgs, Instrumentation inst)public static void agentmain(String agentArgs, Instrumentation inst)```.........原创 2022-08-04 15:35:15 · 1460 阅读 · 0 评论 -
『Java安全』Springboot简单整合Shiro
下载shiro-sping二、*测试demo和编写认证文件这是便于测试功能是否正常的,可以略过直接看第三节Shiro支持两种realm:JdbcRealm和IniRealm,现在以IniRealm读取认证文件的方式为例在resources下创建一个ini,这里叫shiro.ini格式参考下面:验证+授权测试demo:运行springboot再运行testdemo即可:代码参照引用,包含三个部分:首先编写Config初始化验证设置,filterMap写法是Ant格式:静态login页面log原创 2022-06-20 11:20:18 · 482 阅读 · 0 评论 -
『Java安全』Tomcat+IDEA动态调试war包_远程JVM调试war包
首先tomcat的catalina.bat添加参数为调试端口号然后运行开启添加一个Remote JVM Debug,上面的端口号和这里一致,这里配置的是监听端口号,不是web端口将war包放到tomcat,在idea原项目打上断点,监听,提示连接成功即可成功调试............原创 2022-06-09 15:00:50 · 1851 阅读 · 0 评论 -
『Java安全』IntelliJ IDEA搭建老版本Struts 2环境_S2-001复现环境搭建
前言为了复现S2-001做准备,IDEA版本为2021.2、Struts2版本为2.0.8一、下载Struts 2 lib二、IDEA创建Struts2项目三、配置修改和创建demo原创 2022-07-28 15:33:23 · 707 阅读 · 0 评论 -
『Java安全』class文件格式分析详解
文章目录官方文档说明class文件格式分析magic(魔数)minor_version(次版本号)与major_version(主版本号)constant_pool_count(常量池计数器)constant_pool[constant_pool_count-1](常量池)access_flags(类的访问标志)this_class(当前类名索引值)与super_class(父类名索引值)interfaces_count(接口计数)与interfaces[interfaces_count](接口数组)fie原创 2022-02-23 17:11:08 · 1034 阅读 · 0 评论 -
『Java安全』初试字节码框架ASM_使用asm修改class文件
文章目录ASM介绍ClassReader 与 ClassVisitor读取类信息、变量、方法的例子原理功能总结ClassWriter修改类信息、变量、方法的例子完ASM介绍asm4-guide.pdfASM是操纵分析字节码的一个框架,ASM库的目标是生成、转换和分析编译的的Java类,以字节数组的形式表示(因为它们存储在磁盘上并加载到在Java虚拟机中加载)。为此目的,ASM提供了一些工具来读、写和转换这些字节数组。为此,ASM提供了一些工具,通过使用比字节更高层次的概念来读取、写入和转换这原创 2022-02-25 20:06:27 · 3292 阅读 · 0 评论 -
『Java安全』Fastjson基础
文章目录前言fastjson简介下载一、JSON.toJSONString()JavaBean的序列化List\前言fastjson简介阿里开发的用于JavaBean序列化和反序列化的库主要方法: toJSONString() 和 parseObject() 。调用toJSONString方 法即可将对象转换成 JSON 字符串,parseObject 方法则反过来将 JSON 字符串转换成对象。下载maven仓库下载mvnrepository.com/artifact/com.alibaba原创 2022-03-03 15:14:29 · 690 阅读 · 2 评论 -
『Java安全』动态代理的简单实现_Proxy与InvocationHandler
# 动态代理动态代理的优势在于可以很方便的对代理类的函数进行统一的处理,而不用修改每个代理类中的方法。 创建动态代理类会使用到`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口。通过这个类和这个接口可以生成JDK动态代理类和动态代理对象。...原创 2021-12-01 10:31:23 · 714 阅读 · 0 评论 -
『Java安全』RMI(Java Remote Method Invocation)远程方法调用_Remote_Registery_Naming
Java RMI(Java Remote Method Invocation)用于实现远程过程调用的应用程序编程接口。它使客户机上运行的程序可以调用远程服务器上的对象。RMI使用Java远程消息交换协议JRMP(Java Remote Messaging Protocol)进行通信。**在传输过程中:会将对象进行序列化与反序列化,因此可能会带来安全隐患**RMI需要编写**Server端和Client端**,同时两者必须共有一个**接口类**,在Server端还要有此接口的**实现类**,...原创 2021-12-05 17:25:03 · 1024 阅读 · 0 评论 -
『Java安全』JavaNativeInterface(JNI)调用DLL_利用vs2019编写DLL
文章目录定义测试类生成头文件vs2019编写DLL新建vs项目导入头文件编写DLL生成DLLJNI调用DLL完定义测试类定义一个测试类,声明一个native方法,然后加载DLL文件(自定义名称),声明main调用这个方法package JavaNativeIntf;public class JNITest { public native void hello(); public static void main(String[] args) { System.lo原创 2021-11-25 16:47:34 · 1255 阅读 · 0 评论 -
『Java安全』通过反射(Reflection)访问类属性和调用方法
文章目录前言获取类一、通过反射访问类属性二、通过反射调用类方法前言反射(Reflection)能够在代码运行期间、对任意未知类或对象访问属性和调用方法反射的思想是建立对类的引用、然后通过传入对象名、访问对象的属性或者调用方法Java机制是对每一个被加载的类新建一个实例,然后将实例和类联系在一起获取类一、通过反射访问类属性二、通过反射调用类方法......原创 2021-11-08 15:59:42 · 2009 阅读 · 0 评论 -
『Java安全』class文件字节码使用描述符(Descriptors)描述变量类型和方法
文章目录描述符Field Descriptors解决完描述符常量池内一些特殊写法的字符串在成员变量数组和方法数组的结构中出现Field Descriptors对成员变量的描述符有以下几种:描述符含义BbyteCchar(UTF-16)DdoubleFfloatIintJlongL ClassName;reference类型的实例SshortZboolean[reference类型的一维数组解决原创 2022-02-24 20:17:26 · 1339 阅读 · 0 评论 -
『Java安全』Runtime执行cmd、shell命令并输出返回值_反射调用Runtime执行命令
文章目录前言直调执行cmd、shell命令无需回显需要回显、输出返回值反射执行命令以String传入指令以String[]传入指令完前言由于系统对命令的空格分隔符会截断错误,因此对长指令如ls -al /最好不要用String传入,而是使用String[] cmd = {"ls", "-al", "/"}用字符串数组的形式传入直调执行cmd、shell命令无需回显不要回显只是运行直接exec即可String[] cmd = {"calc"};Runtime.getRuntime.exec(cm原创 2021-11-16 10:24:52 · 6017 阅读 · 0 评论 -
『Java安全』初试Javassist编辑class字节码文件
文章目录Javaassist简介关键类一、导入类和创建新类二、获取类的信息三、获取方法的内部细节四、修改类方法已有变量传参问题完Javaassist简介Javaassist相比asm简化了操作,方便完成简单的修改操作pom.xml<!-- https://mvnrepository.com/artifact/org.javassist/javassist --><dependency> <groupId>org.javassist</groupId原创 2022-03-01 18:24:42 · 1187 阅读 · 0 评论 -
『Java安全』使用JNDI访问文件系统(列出目录、新建文件夹、绑定文件)、访问RMI服务、DNS解析
文章目录JNDI简介JNDI操作步骤参考引用完JNDI简介Java命名和目录接口(Java Naming and Directory Interface,JNDI)是一组在Java应用中访问命名和目录服务的API。JNDI中的命名(Naming),就是将Java对象以某个名称的形式绑定(binding)到一个容器环境(Context)中,以后调用容器环境(Context)的查找(lookup)方法又可以查找出某个名称所绑定的Java对象。JNDI操作步骤使用JNDI来访问命名服务或者目录服务,操作步原创 2022-01-10 15:07:29 · 1664 阅读 · 0 评论 -
『Java安全』类的序列化与反序列化基础_Serializable接口和Externalizable接口的区别
# Java序列化的方式Java序列化有三种方式: 1. 实现`java.io.Serializable`接口 2. 实现`java.io.Externalizable`接口、重写`writeExternal()`和`readExternal()`方法 3. 实现`java.io.Serializable`接口、**严格添加**`private void writeObject(ObjectOutputStream stream) throws IOException{}`和`private vo原创 2021-11-11 22:53:37 · 1124 阅读 · 0 评论 -
『Java安全』SpEL注入
文章目录SpEL简介示例后端代码常用表达式SpEL注入fuzz探测注入点命令执行RCE绕过方式1. String类动态生成字符串命令2. 反射+字符串拼接3. js引擎rce4. 反射+SpEL集合绕过参考引用完SpEL简介SpEL使用#{ }作为定界符,其中的内容都会被解析,${ }常用于引用属性名称示例后端代码首先绑一个Controllerpackage com.example.javaspring;import org.springframework.expression.Expres原创 2022-04-02 20:34:56 · 3136 阅读 · 0 评论 -
『Java安全』EL表达式注入
文章目录前言EL表达式解析启用/禁用EL表达式注入绕过方式1. 反射2. js引擎rce参考引用完前言EL表达式全称Express LanguageEL表达式语法以${}包裹其他使用方法见参考文章EL表达式解析启用/禁用默认为启用,jsp会解析EL表达式,除非配置<%@ page isELIgnored ="true|false" %>,或者是全局pom.xml设置<jsp-config> <jsp-property-group>原创 2022-04-02 11:55:28 · 5154 阅读 · 1 评论 -
『Java安全』ClassLoader类加载器_双亲委派_自定义类加载器_类加载隔离
文章目录前言Java自带的三个类加载器BootstrapClassLoaderExtensionClassLoaderAppClassLoader类加载器顺序按需加载获取类加载器BootstrapClassLoader为空父加载器不是加载器的父类加载器的父类父加载器BootstrapClassLoader为空的原因类加载流程双亲委派优点缺点自定义类加载器自定义类加载器的条件自定义类加载器示例HelloWorld.classCustomizedHelloWorldClassLoader.javaCustomi原创 2021-11-15 23:26:13 · 1296 阅读 · 0 评论 -
『Java安全』SQL安全-ORDER BY注入
# 原理SQL中:ORDER BY执行排序后面需要指定列名,该列名是不能被引号包含的否则就会被认为是一个字符串。而PrepareStatment使用占位符传递参数时,会用单引号包裹参数,因此不能使用预编译所以使用ORDER BY要搭配字符串拼接上列名原创 2022-01-03 08:15:00 · 2001 阅读 · 0 评论 -
『Java安全』shell命令执行的几种方式与Runtime.exec()本地命令执行漏洞调用分析
文章目录命令执行Runtime.exec()ProcessBuilder.start()ProcessImpl与UNIXProcessRuntime.exec()命令执行漏洞完命令执行Runtime.exec()在传入命令时,可以传入String和String[]String cmd1 = "/bin/sh -c whoami";String[] cmd2 = {"/bin/sh", "-c", "whoami"};这是由于exec()方法自带多种重载方法,其中envp指定环境,dir指定目录原创 2021-11-20 16:02:27 · 6269 阅读 · 0 评论