type
status
date
slug
summary
tags
category
icon
password
简介
Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。
CVE-2021-44228
版本:2.0<log4j<2.14.1
靶场复现https://vulfocus.cn/
受影响的中间件:Apache Solr、Apache Druid、Apache Struts2、Apache Flink、Flume、Dubbo、Redis、Logstash、ElasticSearch、Kafka、Ghidra、Minecraft、Apache hive、Datax、Streaming、Dolphin Scheduler、Storm、Spring
调用链
日志分为8个级别,由低到高依次为:All - Trace - Debug -Info - Warn - Error-Fatal -OFF。
log4j 1.X版本必须提供配置等级,2.X版本则默认打印error等级的日志,小于配置文件的即不能进入 this.logMessage()进行触发漏洞,默认大于error和fatal可以触发漏洞
原理
log4j在日志输出中,未对字符合法性进行严格的限制,执行了JNDI协议,通过JNDI协议操控rmi远程方法或者ldap目录访问协议进行从服务端其获取对应的远程恶意脚本Class文件,并使用ClassLoader在本地加载Ldap服务端返回的Class类,从而造成RCE。
其中有三个点,JNDI接口,rmi远程方法和ldap在下文补充
修复
1.升级官方最新版本,最新版本移除对lookup功能的支持,默认禁用JNDI方法.
2.禁用或移除log4j-core包中JndiLookup类文件
3.临时修复措施(任选其一)
(1)添加jvm启动参数-Dlog4j2.formatMsgNoLookups=true;
(2)在应用classpath下添加log4j2.component.properties配置文件,文件内容为log4j2.formatMsgNoLookups=true;
(3)JDK使用11.0.1、8u191、7u201、6u211及以上的高版本;
(4)限制受影响应用对外访问互联网;
(5)禁用JNDI。如在spring.properties里添加spring.jndi.ignore=true;
(6)部署使用第三方防火墙产品进行安全防护,并更新WAF、RASP规则等。
jndi注入
简介
JNDI( Java Naming and Directory Interface-Java命名和目录接口)
将名称与java对象或资源关联起来,进行通过名称调用到对应的对象或者资源
可操控的目录与服务有: DNS、XNam 、Novell目录服务、LDAP(Lightweight Directory Access Protocol轻型目录访问协议)、 CORBA对象服务、文件系统、WindowsXP/2000/NT/Me/9x的注册表、RMI、DSML v1&v2、NIS。
JNDI主要由两部分组成:Naming(命名)和Directory(目录),其中Naming是指将对象通过唯一标识符绑定到一个上下文Context,同时可通过唯一标识符查找获得对象,而Directory主要指将某一对象的属性绑定到Directory的上下文DirContext中,同时可通过名字获取对象的属性同时操作属性。
rmi
Java远程方法调用
即Java RMI(Java Remote Method Invocation)是Java编程语言里 一种用于实现远程过程调用的应用程序编程接口
RMI的功能:
Spring实现rmi
ldap
LDAP的全称为Lightweight Directory Access Protocol(轻量级目录访问协议), 基于X.500标准, 支持 TCP/IP。LDAP运行于TCP/IP连接上或其他面向传输服务的连接上。
LDAP目录为数据库,通过LDAP服务器(相当于DBMS)处理查询和更新, 以树状的层次结构来存储数据,相对关系型数据库, LDAP主要是优化数据读取的性能,适用于比较少改变、跨平台的信息。
java中的使用
扩展
netcat
简介
netcat在网络工具中被称为"瑞士军刀",可以读取和写入数据 网络连接,使用 TCP/IP 协议。它是一个 功能丰富的网络调试和探索工具,因为它可以创建 几乎您需要的任何类型的连接,提供与其他人的网络连接 应用程序和用户。
项目功能:
与任何端口的出站和入站连接(TCP 或 UDP)。
特色隧道模式,也允许特殊的隧道,如 作为 UDP 到 TCP,可以指定所有网络参数 (源端口/接口、侦听端口/接口和远程主机 允许连接到隧道。
内置端口扫描功能,带随机发生器。
高级使用选项,例如缓冲发送模式(每 N 行一行) 秒),以及传输的十六进制转储(到 stderr 或指定文件) 并收到数据。
可选的 RFC854 远程登录代码解析器和响应器。
linux使用
安装yum install nc(大部分linux默认安装)
nc -h使用帮助
常用功能案例
服务端开启监听端口
nc -lvvp 6666
客户端连接监听端口
nc 192.168.149.129 6666
服务端和客户端即可建立连接
文件传输
接收端开启接收
nc -lvp 6666 >1.txt
//将接收到的数据保存到当前路径下的1.txt
传输端开启传输
将2,txt传送到客户端
nc 192.X.X.X <2.txt