Log4j远程代码执行漏洞复现
本文最后更新于:2022年1月13日 下午
Apache-Log4j高危漏洞
看热闹不嫌事大🤣🤣🤣,尝试复现一下
Apache Log4j2是一个基于Java的日志记录工具。该工具重写了Log4j框架,并且引入了大量丰富的特性。我们可以控制日志信息输送的目的地为控制台、文件、GUI组件等,通过定义每一条日志信息的级别,能够更加细致地控制日志的生成过程。该日志框架被大量用于业务系统开发,用来记录日志信息。
2021年12月9日,经阿里安全团队验证,Log4j-2中存在JNDI注入漏洞,当程序将用户输入的数据被日志记录时,即可触发此漏洞,成功利用此漏洞可以在目标服务器上执行任意代码。鉴于此漏洞危害较大,建议客户尽快采取措施防护此漏洞。
漏洞影响版本:Apache Log4j 2.x <= 2.14.1
漏洞级别: 严重!!
先来新建一个Maven项目,pom.xml文件中导入存在漏洞的Log4j版本:
1
2
3
4
5
6
7
8
9
10
11<!-- https://search.maven.org/ -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.14.0</version>
</dependency>
<!-- https://search.maven.org/ -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
</dependency>新建一个java文件,具体测试代码如下,先正常尝试一下:
1
2
3
4
5
6
7
8
9
10import 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) {
String username = "This is a message";
logger.error(username);
}
}运行一下:
可见通过使用Log4j的相关函数,可以实现在运行中打印相关日志。
做点手脚,将uername的字符串内容换成
${java:os}
,运行一下:
他竟然把我们的字符串内容当成命令执行了!!这还了得!!😡😡
后续复现需要搭后台服务,我搞了半天也没成功,就这样吧😭😭
本文作者: ziyikee
本文链接: https://ziyikee.fun/2021/12/11/Log4j%E8%BF%9C%E7%A8%8B%E4%BB%A3%E7%A0%81%E6%89%A7%E8%A1%8C%E6%BC%8F%E6%B4%9E%E5%A4%8D%E7%8E%B0/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!