Продолжаю публикацию решений отправленных на дорешивание машин с площадки HackTheBox. Надеюсь, что это поможет хоть кому-то развиваться в области ИБ.
Подключение к лаборатории осуществляется через VPN. Рекомендуется не подключаться с рабочего компьютера или с хоста, где имеются важные для вас данные, так как Вы попадаете в частную сеть с людьми, которые что-то да умеют в области ИБ :)
Организационная информация
Специально для тех, кто хочет узнавать что-то новое и развиваться в любой из сфер информационной и компьютерной безопасности, я буду писать и рассказывать о следующих категориях:
- PWN;
- криптография (Crypto);
- cетевые технологии (Network);
- реверс (Reverse Engineering);
- стеганография (Stegano);
- поиск и эксплуатация WEB-уязвимостей;
Вдобавок к этому я поделюсь своим опытом в компьютерной криминалистике, анализе малвари и прошивок, атаках на беспроводные сети и локальные вычислительные сети, проведении пентестов и написании эксплоитов.
Чтобы вы могли узнавать о новых статьях, программном обеспечении и другой информации, я создал канал в Telegram и группу для обсуждения любых вопросов в области ИиКБ. Также ваши личные просьбы, вопросы, предложения и рекомендации рассмотрю лично и отвечу всем (ссылка).
Вся информация представлена исключительно в образовательных целях. Автор этого документа не несёт никакой ответственности за любой ущерб, причиненный кому-либо в результате использования знаний и методов, полученных в результате изучения данного документа.
Recon
Данная машина имеет IP адрес 10.10.10.204, который я добавляю в /etc/hosts.
10.10.10.207 compromised.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
Давайте посмотрим сайт.
Находим только CMS - LiteCart. Давайте просканируем директории, и я делаю это с помощью gobuster.
gobuster dir -t 128 -u http://compromised.htb/ -w /usr/share/wordlists/dirbuster/directory-list-lowercase-2.3-medium.txt -x html,php
И находим интересную директорию backup, а в ней архив.
Данный архив содержит исходные коды сайта.
Среди данных файлов мы и находим упоминание скрытого на сервере файла.
Файл содержит учетные данные админа.
Авторизуемся.
Entry Point
После изучения данной CMS, находим RCE эксплоит.
Но вот только он не отрабатывает как нужно.
Посмотрим код эксплоита. Используется функция system, которая, возможно, блокируется.
Давайте изменим нагрузку и вызовем phpinfo, чтобы посмотреть заблокированные функции.
И видим большой список таких функций. Для обхода данных блокировок можем использовать этот код. Данный PHP код мы чуть изменим, чтобы сразу выполнять запрошенные команды.
И изменим код эксплоита так, чтобы считать и отправить новый PHP код.
И данный код работает.
Глянем на пользователей и заметим, что у mysql есть bash.
Давайте удобный шелл, для этого используем webwrap.
USER1
Так как у mysql есть командная оболочка, то мы можем использовать службу как обычного пользователя, а именно выполняя команды из mysql. Учетные данные для подключения к базе данных должны быть расположены в конфигах.
Теперь, когда мы получили учетные данные, давайте проверим функции mysql.
И давайте сгенерируем SSH ключи и запишем публичный в домашнюю директорию службы с помощью execcmd.
mysql -u root --password=changethis -e "select execcmd('echo ssh-rsa AAAAB3NzaC1yc2EAAAADA/ ... 6GuPNZGryVNovs= ralf@ralf-PC > ~/.ssh/authorizedkeys');"
И заходим по SSH.
USER2
И мы можем прочитать логи, где можно поискать пароли.
Попробуем сменить пользователя с найденным паролем.
ROOT
После длительного изучения машины, была дана подсказка про название машины и использование бэкдоров. Давайте найдем последние измененные файлы.
find . -mtime -100 2>/dev/null
И находим скрытую библиотеку pamunix.so, причем есть такая же, видимо легитимная. Скачиваем этот файл.
scp sysadmin@compromised.htb:/lib/x8664-linux-gnu/security/.pamunix.so ~/tmp/
И закидываем в дизасемблер (я использовал Cutter). Среди строк находим password.
Посмотрим, где эта строка используется.
И видим сравнение пароля с шестнадцатеричными значениями, которые являются половинами строки.
Пробуем данную строку как пароль рута, и удачно авторизуемся.