Apache log4j漏洞复现

Apache Log4j2是一款优秀的Java日志框架。2021年11月24日,阿里云安全团队向Apache官方报告了Apache Log4j2远程代码执行漏洞。由于Apache Log4j2某些功能存在递归解析功能,攻击者可直接构造恶意请求

漏洞只针对的是2.15以下版本的

现在我们来重现一下log4j的漏洞

public class Log4jTest {
    private static final Logger log = LogManager.getLogger();
    public static void main(String[] args) {
            String str = "${java:os}";
            log.info("hello {} !", str);
    }
}

${}是log4j的占位符,我们可以通过占位符的方式方便我们打印日志,这段代码输出是:hello Windows 10 10.0, architecture: amd64-64 !
输出了我们当前电脑的消息,当然这样看起来没问题,但却给了别有用心之人有机可趁

下面我们来重现一下漏洞,这是一个jndi的服务类
jndiserver
下面这个类是我们可以通过此类进行一些操作
在这里插入图片描述

再写一个测试类
在这里插入图片描述

先启动RmiServer类,在启动测试类
运行结果:
在这里插入图片描述
大家可以看到他是在测试类里打印的EvilObj,而不是在RmiServer里打印的,这就非常恐怖,代表着我可以在你服务器执行我想执行的代码,所以这个漏洞是非常严重的,如果说破坏者通过前端输入然后你后台打印了用户的输入,就可以在你的服务器执行他的程序,这是一个低级且严重的问题,大家升级到2.15以上版本就行了

解决方案

a、修改jvm参数 -Dlog4j2.formatMsgNoLookups=true
b、修改配置:log4j2.formatMsgNoLookups=True
c、系统环境变量 FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS设置为true

如果springBoot里面有引用的话,在pom文件加上以下代码,这也是spring官网给出的方案

 <properties>
    <log4j2.version>2.16.0</log4j2.version>
</properties>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值