[JavaWeb]Log4j的前因后果
Log4j的前因后果
简介
Log4J的三大组件:
Logger:日志记录器,负责收集处理日志记录 (如何处理日志)
Appender:日志输出目的地,负责日志的输出 (输出到什么地方)
Layout:日志格式化,负责对输出的日志格式化(以什么形式展现)
还是一如既往的先对其的应用有个大概的了解,有利于对 漏洞的全局把控
漏洞相关知识前置
由于Log4j漏洞是利用了Log4j.lookup的解析+jndi的相关漏洞,最终触发了所谓的“核弹级”漏洞。
Log4j的应用架构

JNDI的应用结构

漏洞分析
先用网上的exp随便测了测,发现error和fetal会触发,而info和debug不会触发

所以接下来,首先要来分析为什么error和fetal会触发?又为什么info和debug不会触发
流程分析
进入日志记录后,首先判断了日志是否需要记录。确认记录,继续跟进

跟进后进行了日志的格式化,在对事件信息进行格式的同时进行了lookup判断,可以看到如果对于${}包含的事件消息则先对offset进行回退,也就是先不保存,然后再开始对${}进行解析

先匹配到了${}中包裹的字符串


再对获取到的字符串不断进行递归检测${},看是否还能进行替换

继续进行识别,进行变量替换

经过无数遍的字符串扫描识别后,看到了解析器组会依次对变量进行解析,而且同时看到了可以解析jndi的相关变量

一直跟到jndiManager#lookup(),发现没有任何过滤。

还有个问题就是为什么info和debug不能进行jndi利用

分析了下,主要是因为我这里测试的方式不是webAPP,所以不执行WebLookup的插件。也就无法进行jndi的利用了到此,分析完了log4j的漏洞细节
分析下来就是log4j支持${}的表达式,会对其进行递归解析。官方开启此种方式是为了能够快速获取其他信息。但对jndi的支持,却导致了此次的漏洞。
log4j中项目lookup的作用:** Lookups provide a way to add values to the Log4j configuration at arbitrary places. They are a particular type of Plugin that implements the StrLookup interface. **”
以上内容复制于log4j2的官方文档lookup - Office Site。其清晰地说明了lookup的主要功能就是提供另外一种方式以添加某些特殊的值到日志中,以最大化松散耦合地提供可配置属性供使用者以约定的格式进行调用。
漏洞利用
直接就是套用jndi的exp。
漏洞修复
官方先是给出了内网白名单的修复--》被解析漏洞绕过--》然后又被发现逻辑漏洞
泛域名解析:就是多个子域名解析到同一个ip上
流程分析小结:跟的时候总是跟的目标不对,而且似乎对jndi的底层实现不熟。对关键类中的敏感方法不够感冒。。。
[JavaWeb]Log4j的前因后果的更多相关文章
- javaweb log4j显示完整sql日志
javaweb显示完整sql日志 所需jar包: log4j-1.2.17.jar log4jdbc-1.2.jar slf4j-api-1.7.12.jar slf4j-log4j12-1.7.12 ...
- log4j在javaWeb项目中的使用
在前边的文章中对log4j的配置文件进行了说明,今天介绍如何在普通的javaWeb项目中使用log4j. 在日常的开发过程中,日志使用的很频繁,我们可以利用日志来跟踪程序的错误,程序运行时的输出参数等 ...
- 在JavaWeb中使用Log4j步骤
在JavaWeb中使用Log4J指南.每次在开始写一个项目的时候都忘记Log4J如何配置.所以写个步骤,作为记录. 第一步 下载Log4J jar包 从Apache Logging Services ...
- JavaWeb应用中初始化Log4j的两种方式
本文主要介绍了普通JavaWeb应用(基于Tomcat)中初始化Log4j的两种方式: 1.通过增加 InitServlet ,设置令其自启动来初始化 Log4j . 2.通过监听器 ServletC ...
- JavaWeb项目异常管理之log4j的使用教程
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6399191.html 在项目中的应用见: https://github.com/ygj0930/CoupleS ...
- javaweb项目添加log4j日志
谈到我们在Java程序中经常用的日志,Log4j应该是耳熟能详了.这里先提下slf4j,英文全名是Simple Logging Facade for Java,直面意思是:Java的简单日志门面.sl ...
- 解决log4j:WARN Error initializing output writer. log4j:WARN Unsupported encoding?的问题
异常名:log4j:WARN Error initializing output writer. log4j:WARN Unsupported encoding? 异常截图: 在一般的javaweb项 ...
- log4j的简单应用(转载)
当程序有错误时,我们就需要找出错误的地方并进行验证,怎样才能准确快速的找到出错的地方呢,那就是在程序运行时在控制台上输出相关的信息,从而可以判断程序的运行顺序以及出错的位置.以前总是习惯使用Syste ...
- slf4j 和 log4j合用的(Maven)配置(转)
简述:添加logger的日志输出,下面是配置信息供备忘 步骤:1. 在Maven的porn.xml 文件中添加dependency如下 <dependency> <groupId&g ...
随机推荐
- 记录一次线上OOM调优经历
现状: k8s 的一个pod 有32G内存,每秒产生新对象的峰值在900Mb ---- 1900Mb(根据jstat计算Eden区获得) . 修改之前的参数 就一个命令行参数是-Xmx31g; 我修改 ...
- Laravel 使用 maatwebsite/Excel 3.1 实现导入导出的简单方法
官方文档 https://docs.laravel-excel.com/3.1/getting-started git地址 https://github.com/maatwebsite/Laravel ...
- 「Codeforces 724F」Uniformly Branched Trees
题目大意 如果两棵树可以通过重标号后变为完全相同,那么它们就是同构的. 将中间节点定义为度数大于 \(1\) 的节点.计算由 \(n\) 个节点,其中所有的中间节点度数都为 \(d\) 的互不同构的树 ...
- CS5210设计HDMI to VGA方案|CS5210资料|CS5210设计电路方案
CS5210是一款HDMI转VGA转换器方案,其输出VGA信号可送到CRT/LED显示器,及投影机等,输入HDMI信号可以驳接电脑.PS3,XBOX360.蓝光DVD,输出VGA可以CRT/LED显示 ...
- html+css+JavaScript实现爱恩斯坦棋游戏
title: "html+css+JavaScript实现爱恩斯坦棋游戏" author: Sun-Wind date: December 30, 2021 背景:本贴将基于前端的 ...
- Spring企业级程序设计 • 【第6章 深入Spring MVC开发】
全部章节 >>>> 本章目录 6.1 模型数据解析及控制器返回值 6.1.1 ModelAndView多种用法 6.1.2 Map添加模型数据和返回String类型值 6 ...
- Java初学者作业——分别计算两个整数加、减、乘、除的结果并显示,要求除法保留两位小数。
返回本章节 返回作业目录 需求说明: 分别计算两个整数加.减.乘.除的结果并显示,要求除法保留两位小数. 实现思路: 接收用户控制台输入的两个整数. 实现两个整数的加.减.乘.除的运算并输出结果. 除 ...
- 编写Java程序,实现从控制台输入对应个数的整数,输出对输入整数的从大到小显示
编写Java程序,实现从控制台输入对应个数的整数,输出对输入整数的从大到小显示 效果如下: 实现代码: import java.util.Arrays; import java.util.Scanne ...
- 编写Java程序,使用JFrame创建一个窗体
返回本章节 返回作业目录 需求说明: 使用JFrame创建一个窗体 实现思路: 使用JFrame创建窗体的思路 定义一个窗体对象f,窗体名称为"一个简单窗口" 设置窗体左上角与显示 ...
- 开源社区Review代码步骤
以Ranger项目为例,说明开源社区Review代码详细步骤. 1.寻找合适的issue进行review 首先自己需要是某个开源项目的committer, 要有合入代码的权限. 2.review代码 ...