Web应用中Log4j与JNDI结合2 -- JNDI指定日志路径

Log4j2日志框架JNDI注入漏洞分析与复现 1、漏洞背景 大家在实际开发中,几乎无可避免的需要用到日志框架,不管你是前端后端客户端,他们可以追踪和记录我们的程序运行中的信息,我们可以利用日志很快定位问题,追踪分析。 而对于Java开发人员来说,最常用的日志框架便是Log4j2和logback,而本次漏洞的主角便是Apache Log4j2,它有一个特别强大的功能插件Lookups 如果我们试图通过日志去输出一个程序中不存在的对象,而在其他地方,那么我们便可以通过这个插件去通过某些方式去查找目标内容,它只提供一种规范,具体使用哪些方式去查找 阅读详情

在Web应用中Log4j与JNDI结合1 – JNDI指定配置文件一文中,我展示了如何通过定制ServletListener来从JNDI指定地址读取log4j配置文件。这一篇我来讲解如何通过JNDI指定日志路径。普通的log4j appender没有办法处理JNDI相关的日志文件。同ServletListener定制一样,我们要定制Appender。这里以DailyRollingFileAppender为例。普通按照天来自动截断,例如:

<appender name="FILE" class="org.apache.log4j.DailyRollingFileAppender">
    <param name="file" value="default.log" />
    <param name="append" value="false" />
    <param name="datePattern" value="'.'yyyy-MM-dd" />
    <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="%d{ABSOLUTE} [%-5p] [%t] [%c{1}] %m%n" />
    </layout>
  </appender>

通过Log4j源码分析(org.apache.log4j.LogManager.java, org.apache.log4j.xml.DOMConfigurator.java and DailyRollingFileAppender.java),我们可以知道,在Web应用XML的配置方式下,LogManager.java的static初始化块会根据log4j.configuration的配置,通过org.apache.log4j.helpers.OptionConverter.selectAndConfigure方法找到对应的log4j xml配置文件,然后通过Call org.apache.log4j.xml.DOMConfigurator.java的doConfigure方法,去到parse方法,根据Logger和Root node的APPENDER_REF_TAG调用findAppenderByReference,最后在parseAppender 中把param配置赋值给appender的属性,然后通过调用appender的activeOptions来打开日志记录文件。

DailyRollingFileAppender.java
public void setFile(String file) {
    // Trim spaces from both ends. The users probably does not want
    // trailing spaces in file names.
    String val = file.trim();
    fileName = val;
  }

public void activateOptions() {
    //based on fileName to open log file
    super.activateOptions();
    if(datePattern != null && fileName != null) {
      now.setTime(System.currentTimeMillis());
      sdf = new SimpleDateFormat(datePattern);
      int type = computeCheckPeriod();
      printPeriodicity(type);
      rc.setType(type);
      File file = new File(fileName);
      scheduledFilename = fileName+sdf.format(new Date(file.lastModified()));

    } else {
      LogLog.error("Either File or DatePattern options are not set for appender ["
           +name+"].");
    }
  }

那么想通过jndi来指定日志文件,就是要给修改对filename赋值。简单实现可以通过继承DailyRollingFileAppender,在新的子类(JndiDailyRollingFileAppender )中加入新的属性jndiDirURL来接受JNDI指定日志路径文件夹(在xml配置中必须放在file参数之前),然后重写filename赋值的setFile方法,获取基于JNDI的完整文件路径。列出参考代码如下:

public class JndiDailyRollingFileAppender extends DailyRollingFileAppender  {
   private String jndiDirURL;
   public void setJndiDirURL(String jndiDirURL){
       this.jndiDirURL= jndiDirURL;
   }
   public String getJndiDirURL(){
       return this.jndiDirURL;
   }
   public JndiDailyRollingFileAppender (String jndiDirURL, Layout layout, String filename, String datePattern) throws IOException {
       super(layout, getAbsoluteName(jndiDirURL,filename), datePattern);
   }
   private String getAbsoluteName(String filename){
       try{
        Context ic = new InitialContext();
        String parent= ((URL)ic.lookup(jndiDirURL)).toExternalForm();
        String absolutePath = parent + File.separator + filename;
        return absolutePath;
        }catch(Exception e){
           LOG.error("unable to find jndidirurl: {}, JndiDirURL);
           return filename;
        }
  }

   @Override
   public void setFile(String file) {
      return super.setFile(getAbsoluteName(file));
   }
}

对应的log4j.xml中的配置文件如下:

<appender name="default" class="com.demo.JndiDailyRollingFileAppender">
    <param name="jndiDirURL" value="java:comp/env/demo_log" />
    <param name="file" value="default.log" />
    <param name="append" value="false" />
    <param name="datePattern" value="'.'yyyy-MM-dd" />
    <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="%d{ABSOLUTE} [%-5p] [%t] [%c{1}] %m%n" />
    </layout>
  </appender>
东方通TongWeb多应用部署实战:规划、配置与运维指南 在企业级Java应用部署中,应用服务器作为核心运行时容器,其资源管理与多应用部署能力直接影响IT架构的效率和成本。通过资源池化与统一管理,可以在单台服务器上高效运行多个Web应用,从而显著提升硬件利用率并降低运维复杂度。这一技术实践对于微服务架构下的模块化部署、前后端分离项目以及多业务线系统整合具有重要价值。其核心在于妥善处理端口、上下文路径、会话及资源隔离等关键技术细节。本文以广泛应用的东方通TongWeb服务器为例,深入探讨了多应用部署的规划原则、三种主流部署方法(自动部署、server.xml配置、独 阅读详情

相关推荐

Log4Shell漏洞检测器原理、部署与实战指南

在网络安全领域,漏洞检测是识别和防御潜在攻击的关键环节。其核心原理在于通过分析网络流量、系统日志或应用程序行为,匹配已知的攻击模式或异常特征。从技术价值看,高效的检测工具能极大提升安全运维的响应速度,帮助企业在漏洞被大规模利用前进行预警和处置。常见的应用场景包括实时网络入侵检测、安全事件回溯分析以及合规性审计。针对Log4Shell这类影响广泛的远程代码执行漏洞,专用的检测器通过深度解析JNDI注入等流量特征,结合上下文关联分析,能有效在海量数据中定位恶意利用行为。本文以log4shell-detector

weixin_34006965的博客 372

扩展Log4j支持JNDI数据源

log4j.properties配置文件: log4j.rootLogger=INFO,db #使用log4j扩展支持JNDI数据源 log4j.appender.db=com.qdgswx.log4j.ds.JndiDSAppender log4j.appender.db.jndiName=wstjndi log4j.appender.db.BufferSize=1 log4...

weixin_33816821的博客 342

Java Web项目部署实战:从Tomcat到Docker的完整指南

在软件开发生命周期中,部署是将应用程序从开发环境迁移到生产环境的关键环节,它直接决定了服务的可用性与可访问性。其核心原理在于构建一个标准化的运行时环境,将源代码、依赖和配置组装成可对外提供网络服务的成品。这一过程的技术价值在于实现了开发与运维的衔接,保障了应用的稳定、安全运行。典型的应用场景包括企业级Web应用、微服务架构的后端服务等。本文聚焦于Java Web项目的部署实践,深入讲解了基于Servlet容器(如Tomcat)的传统部署方法,涵盖了环境准备、项目打包、配置分离等核心步骤。同时,也探讨了现代化

weixin_34268579的博客 365

log4j jndi注入漏洞

JNDI、LDAP、log for java: log4j Java程序日志监控组件

Ye的博客 1581

Suricata规则深度解析:从字符串匹配到协议语义检测

网络入侵检测规则本质上是将原始流量转化为可理解攻击意图的语义翻译器。其核心原理在于协议解析引擎与规则引擎解耦,通过HTTP/2、TLS 1.3、DNS over HTTPS等应用层语义对象实现精准匹配,而非传统‘高级grep’式字节流扫描。这种架构赋予Suricata对加密流量(如SNI、JA3指纹)、状态化会话(flow修饰符)和分层防御(预过滤+精确匹配)的技术能力,显著提升检测精度与生产环境可用性。典型应用场景包括Webshell识别、Log4j RCE检测、DNS隧道发现及Cobalt Strike

weixin_30267785的博客 347

Log4j2的JNDI注入漏洞原理分析与思考

前言 最近Log4j2的JNDI注入漏洞(CVE-2021-44228)可以称之为“核弹”级别。Log4j2作为类似JDK级别的基础类库,几乎没人能够幸免。极盾科技技术总监对该漏洞进行复现和分析其形成原理。在此分享。 以下涉及的代码,均在mac OS 10.14.5,JDK1.8.0_91环境下成功运行。 一、 前置知识 1.1 Log4j2 Log4j2是一个Java日志组件,被各类Java框架广泛地使用。它的前身是Log4j,Log4j2重新构建和设计了框架,可以认为两者是完全独立的两个日志组

uuuyy_的博客 3042

JAVA安全之Log4j-Jndi注入原理以及利用方式

JDNI(Java Naming and Directory Interface)是Java命名和目录接口,它提供了统一的访问命名和目录服务的API。JDNI主要通过JNDI SPI(Service ProviderInterface)规范来实现,该规范定义了对JNDI提供者应实现的接口。在JNDI体系中,JNDI提供者是指实际提供命名和目录服务的软件组件。JNDISPI规范包含了多个接口,其中最为重要的是Context接口。

qq_53058639的博客 1424

电脑版微信多开,最详细教程没有之一

首先桌面任意的位置右键新建文本文档输入如下代码: TASKKILL /F/IM WECHAT.EXE start " " "D:\Program Files (x86)\Tencent\WeChat\WeChat.exe" start " " "D:\Program Files (x86)\Tencent\WeChat\WeChat.exe" ...

大超子 4390

JNDI RMI 注入(Log4j2漏洞)

目录 ■相关知识 1.SLF4J(Simple logging Facade for Java) // 简单日志门面 ■(log4j2)漏洞 ■JNDI 注入代码实现(RMI) ■代码细节说明 1.javax.naming.Reference // 构造方法 2.代码中使用的服务如何构建 SimpleHTTPServer // (Python)快速共享目录 3.RMI的利用版本限制 4.问答 5.RMI(Remote Method Invocation)为远程方法调用 ●在攻击..

sun0322 1万+

深入理解光流法外推雷达回波

背景介绍 鉴于本人实在太过疲惫和劳累,一些简单的便于理解的废话就不在记录,耗费两天时间研究了一下光流法,本帖用于记录学习过程中源码的难点细节。 使用光流预测的核心有两个利用多张连续回波图像(变分)或者相邻两张回波图(交叉相关,LK等)计算出光流场(速度矢量场),之后利用半拉格朗日方法进行外推。 半拉格朗日方法 三时间步半拉格朗日方法,其核心公式如下 但这个有点难理解,但看一维的图就很好理解 它的核心就是迭代求Am(位移矢量),如果理解困难的话,其实质上就是通过未来迭代(猜)出当前时刻的Am找到过去的假设

weixin_44695861的博客 6031

Django 小实例S1 简易学生选课管理系统 —— 〇、初步介绍与演示

python Django实现的一个简易的教务选课系统。 介绍与演示的视频版本已发到我的b站: https://www.bilibili.com/video/BV1er4y1w7ty。 项目已上传到我的github: https://github.com/BigShuang/SimpleStudentCourseManagementSystem。 S1总目录: 〇、初步介绍与演示 一、项目流程梳理与数据库设计 ======================= 大爽歌作,made by big shuang.

大爽老师的博客 5944

Log4j2与JNDI结合

Log4j2和JNDI结合指定配置文件路径和日志文件

cloud的技术积累 4631

汇川伺服驱动器参数优化实战指南

本文详细介绍了汇川伺服驱动器参数优化的实战技巧,涵盖控制模式选择、电子齿轮比调整、刚性匹配与振动抑制等关键内容。通过实际案例和实用技巧,帮助工程师快速掌握伺服驱动器参数调校方法,提升设备运行精度和稳定性。特别针对高精度定位和高速响应场景提供了专业指导。

weixin_29070721的博客 733

SecGPT-14B效果展示:支持中文安全术语与英文CVE混用提问,理解准确率91.5%

本文介绍了专为网络安全设计的AI大模型SecGPT-14B,其核心优势在于能精准理解中英文术语混用的复杂提问。用户可在星图GPU平台上自动化部署该镜像,快速搭建智能安全分析环境,典型应用场景包括自动化代码安全审计与漏洞分析,有效辅助安全工程师提升工作效率。

weixin_42462474的博客 18

11-16 Fluent结果查看及后处理功能(做动画、监控点)

监控点、面及动画操作

zheaa的博客 1万+

微信小程序 - 完美解决“code“:“NO_AUTH“,“message“:“商户号该产品权限未开通,请前往商户平台>产品中心检查后重试“(微信小程序报错问题排查解决)

微信小程序NO_AUTH: 商户号该产品权限未开通,请前往商户平台>产品中心检查后重试?微信小程序提示商户号该产品权限未开通,请前往商户平台>产品中心检查后重试,微信小程序"code":"NO_AUTH"错误码怎么解决,报错信息如下:httpResponseBody[{"code":"NO_AUTH","message":"商户号该产品权限未开通,请前往商户平台>产品中心检查后重试"}],微信小程序支付问题,如何解决这个问题,虚拟支付商户号,虚拟支付商户号里面没有产品支付的页面,排查商户号没问题,商户号配置

🏆 前端领域优质创作者 4444

Web应用中Log4j与JNDI结合1 -- JNDI指定配置文件

Web应用中Log4j和JNDI结合指定Log4j配置文件和Log路径第一步:JNDI指定配置文件

cloud的技术积累 1952

基于逆向工程的中国裁判文书网爬虫技术深度解析:从反爬破解到合规抓取

最近承接了一个法律大数据分析的项目,需要获取某类合同纠纷的裁判文书数据,用于分析不同地区的判决规律、法官的裁判倾向以及法条适用情况。原本以为用常规的Python爬虫就能搞定,结果刚对着中国裁判文书网发了几个请求,就遭遇了“滑铁卢”:要么请求直接返回403 Forbidden,要么触发滑块验证码,甚至连IP都被临时封禁了。普通的requests+BeautifulSoup组合在裁判文书网面前完全失效,这也让我意识到,想要获取这里的数据,必须先通过逆向工程拆解网站的请求逻辑和反爬机制。经过一周的摸索,从抓包分析

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 3168

记录一次针对log4j的jndi注入攻击

事件经过 今天一到公司就被钉钉监控报警群@了,报错类型如下图所示: com.mysql.jdbc.MysqlDataTruncation:Data truncation:Data too long for column这个错误很常见,就是插入数据到数据库中,字段长度超过了数据库限制的长度。 于是我就去skywalking上找日志,看到底是什么参数超过了长度限制,于是我找到了报错的链路看到了网关打印的日志信息如下: 重点看我红线框出的部分,这一看就不是一个正常的传参,看起来像是某种攻击。 由此让我联想到,

大兵的博客 3834

实战:利用 Agent Harness 自动化 PPT 制作

本文将带你从零开始,用轻量级Agent编排框架,结合主流大模型(GPT-4o、通义千问、文心一言等),搭建一套全自动化的PPT生成工作流:从用户输入自然语言需求,到需求解析、大纲生成、内容填充、数据匹配、排版美化、导出成品,全程不需要手动操作,最快10分钟就能产出符合要求的PPT。我们不会讲晦涩的Agent理论,所有步骤都有可直接运行的代码示例,哪怕你只有基础的Python语法基础,也能跟着一步步做出能用的自动PPT工具。

AI Agent Harness Engineering 569

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Apache Log4j 漏洞(JNDI注入 CVE-2021-44228)

影响范围 2.0 <= Apache log4j <= 2.14.1 利用 import org.apache.log4j.Logger; import java.io.*; import java.sql.SQLException; import java.util.*; public class VulnerableLog4jExampleHandler implements HttpHandler { static Logger log = Logger.getLogger(l

小龙在线 3万+

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

log4j2 JNDI注入复现

复现现象: 这个镜像使用了log4j2用来当做靶机程序 1、拉取一个docker镜像 docker pull vulfocus/log4j2-rce-2021-12-09 2、跑起来docker run -tid -p 38080:8080 vulfocus/log4j2-rce-2021-12-09 3、进入这个平台 https://log.xn–9tr.com/ 点击获取一个域名 4、执行一个post curl -X POST -F “payload=${jndi:ldap://

qq_20504373的博客 6695

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

log4j jndi 漏洞解决办法

log4j jndi 漏洞解决办法

fuyun996的专栏 4837

Apache Log4j任意代码执行漏洞安全风险通告第三次更新

奇安信CERT致力于第一时间为企业级用户提供安全风险通告和有效解决方案。风险通告近日,奇安信CERT监测到Apache Log4j存在任意代码执行漏洞。经过分析,该组件存在Java JND...

smellycat000的专栏 4665
上一篇: Web应用中Log4j与JNDI结合1 -- JNDI指定配置文件
下一篇: WAS(Websphere) 7升级到8.5遇到的头疼Verify Error问题
开心的D哥
博客等级 码龄22年 63粉丝 110原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值