如何验证自己的项目是否有Log4j2远程代码执行漏洞(复现错误)?

直接项目全局搜索log4j,有就改掉pom.xml.

 如何验证一下呢?

    /**
     * 测试漏洞
     *
     * @return
     */
    @GetMapping("testLog")
    public void testLog(@RequestParam String testLog){
        log.info("testLog:"+testLog);
    }

 请求参数时:${java:os}

 查看打印log。 出现  testLog:Linux。  说明传入的${java:os}竟然被执行了。

 我们去看这次错误的相关报道时,会看到 JNDI注入缺陷  这个词语。

有兴趣可看这篇文章腾讯安全应急响应中心关于JNDI的文章

 里面提到一个方法lookup()

原文:JNDI接口在初始化时,可以将RMI URL作为参数传入,而JNDI注入就出现在客户端的lookup()函数中,如果lookup()的参数可控就可能被攻击

这里可以验证,Log4j2的漏洞就是通过这个lookup()进去的。

我们把传入的${java:os}改为传入的${java:os1}

 查看打印的日志。

at org.apache.logging.log4j.core.lookup.JavaLookup.lookup(JavaLookup.java:116)

log4j打印日志时,如果以${}开始,就会进入此方法。此方法会造成的问题可自行百度(可远程执行任意代码)。

 修复方法:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.apache.logging.log4j</groupId>
                    <artifactId>log4j-api</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.apache.logging.log4j</groupId>
                    <artifactId>log4j-core</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.15.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.15.0</version>
        </dependency>

 疑问

以后政府,军工,大厂会把所有代码的源码都自己审核吗?

maven用阿里巴巴,Apache的RELEASE版本,理论上,管理者也可以修改吧?

这个问题能潜伏这么久还是有点儿灯下黑的意思。可能会让某些大厂或者政府智慧工程重新审视开源软件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值