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的前因后果的更多相关文章

  1. 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 ...

  2. log4j在javaWeb项目中的使用

    在前边的文章中对log4j的配置文件进行了说明,今天介绍如何在普通的javaWeb项目中使用log4j. 在日常的开发过程中,日志使用的很频繁,我们可以利用日志来跟踪程序的错误,程序运行时的输出参数等 ...

  3. 在JavaWeb中使用Log4j步骤

    在JavaWeb中使用Log4J指南.每次在开始写一个项目的时候都忘记Log4J如何配置.所以写个步骤,作为记录. 第一步 下载Log4J jar包 从Apache Logging Services ...

  4. JavaWeb应用中初始化Log4j的两种方式

    本文主要介绍了普通JavaWeb应用(基于Tomcat)中初始化Log4j的两种方式: 1.通过增加 InitServlet ,设置令其自启动来初始化 Log4j . 2.通过监听器 ServletC ...

  5. JavaWeb项目异常管理之log4j的使用教程

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6399191.html 在项目中的应用见: https://github.com/ygj0930/CoupleS ...

  6. javaweb项目添加log4j日志

    谈到我们在Java程序中经常用的日志,Log4j应该是耳熟能详了.这里先提下slf4j,英文全名是Simple Logging Facade for Java,直面意思是:Java的简单日志门面.sl ...

  7. 解决log4j:WARN Error initializing output writer. log4j:WARN Unsupported encoding?的问题

    异常名:log4j:WARN Error initializing output writer. log4j:WARN Unsupported encoding? 异常截图: 在一般的javaweb项 ...

  8. log4j的简单应用(转载)

    当程序有错误时,我们就需要找出错误的地方并进行验证,怎样才能准确快速的找到出错的地方呢,那就是在程序运行时在控制台上输出相关的信息,从而可以判断程序的运行顺序以及出错的位置.以前总是习惯使用Syste ...

  9. slf4j 和 log4j合用的(Maven)配置(转)

    简述:添加logger的日志输出,下面是配置信息供备忘 步骤:1. 在Maven的porn.xml 文件中添加dependency如下 <dependency> <groupId&g ...

随机推荐

  1. 1080 - Binary Simulation

    1080 - Binary Simulation    PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 64 ...

  2. E. Number With The Given Amount Of Divisors

    E. Number With The Given Amount Of Divisors time limit per test 2 seconds memory limit per test 256 ...

  3. 『学了就忘』vim编辑器基础 — 94、vim编辑器介绍

    目录 1.vim编辑器简介 2.vim的工作模式 (1)命令模式 (2)输入模式 (3)最后行模式(末行模式) 1.vim编辑器简介 vim是一个全屏幕纯文本(绘个表格或者插个图片就不要想了)编辑器, ...

  4. C++单元测试框架gtest使用

    作用 作为代码编码人员,写完代码,不仅要保证编译通过和运行,还要保证逻辑尽量正确.单元测试是对软件可测试最小单元的检查和校验.单元测试与其他测试不同,单元测试可看作是编码工作的一部分,应该由程序员完成 ...

  5. Log4自定义Appender介绍

    最初想要在执行一段业务逻辑的时候调用一个外部接口记录审计信息,一直找不到一个比较优雅的方式,经过讨论觉得log4j自定义的appender或许可以实现此功能.后来就了解了一下log4j的这部分. Ap ...

  6. Tomcat 服务器的端口会与其他的服务器端口发生冲突,此时则需要修改 Tomcat 服务器的端口

    查看相关知识 查看相关练习 Tomcat 服务器的端口会与其他的服务器端口发生冲突,此时则需要修改 Tomcat 服务器的端口 实现步骤: 1.找到 Tomcat 服务器安装目录下的 conf 文件夹 ...

  7. 云南农职《JavaScript交互式网页设计》 综合机试试卷③——实现二级分类菜单

    一.语言和环境 实现语言:HTML,CSS,JavaScript,JQuery. 开发环境:HBuilder. 二.题目(100分): 使用Jquery和JavaScript实现二级分类菜单管理 点击 ...

  8. VMware客户端vSphereClient新建虚拟机

    1.说明 VMware客户端工具vSphere Client, 用来连接和管理ESX或ESXi主机(下面称为宿主机), 可以方便的创建.管理虚拟机,并分配相应的资源.宿主机就是使用虚拟化软件运行虚拟机 ...

  9. 带你认识FusionInsight Flink:既能批处理,又能流处理

    摘要:本文主要介绍了FusionInsight Flink组件的基本原理.Flink任务提交的常见问题.以及最佳实践FAQ. 本文分享自华为云社区<FusionInsight HD Flink组 ...

  10. centos7.5上安装go1.13.4

    一.安装 1.下载go1.13.4.linux-amd64.tar.gz 先进入官网https://golang.google.cn/ 再 https://golang.google.cn/doc/i ...