Сегодня продолжим тему прохождения Hack The Box (HTB). На этот раз виртуальная машина Android, которая называется Hack The Box Explore. Я покажу, как с помощью инструмента отладки ADB и уязвимости в популярном файл-менеджере ES File Explorer взломать Android.
Еще по теме: Прохождение Hack The Box Monitors
Виртуальная машина легкая, но как вы знаете Android довольно редко встречается на площадках для практики взлома, что делает прохождение интересным.
Прохождение Hack The Box Explore
Для начала добавим IP-адрес машины в /etc/hosts:
1 |
10.10.10.247 explore.htb |
Начнем со сканирования портов. Это стандартная операция при любом пентесте. Сканирование портов позволит определить, какие службы на машине принимают соединение.
Самый популярный сканер — это Nmap. Следующий скрипт улучшит результаты сканирования:
1 2 3 |
#!/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 |
Видим всего два открытых порта: 2222 (служба SSH) и пока неизвестный для нас 59777 (на пояснение Nmap можно не смотреть, так как он просто вывел информацию из своей базы). На SSH нам пока делать нечего, у нас нет никаких ключей, учетных данных и вообще какой‑либо информации для составления списка паролей. Поэтому отправимся в Google и поищем сведения про порт 59777.
Узнаем, что открытый порт 59777 содержат версии ES File Explorer 4.1.9.5.2 и более ранние. ES File Explorer — это полнофункциональный менеджер файлов для Android, и он годится как для локального, так и для сетевого использования.
Поиск эксплоитов
Мы узнали, какая используется технология, а это значит, что можно поискать готовые эксплоиты.
Во время пентеста лучше всего искать эксплоиты при помощи Google, поскольку этот поисковик заглядывает и в личные блоги, и в самые разные отчеты. Ускорят дело специализированные базы для поиска уязвимостей вроде Exploit-DB — там часто можно обнаружить подходящие варианты. Если ты работаешь в специализированной ОС вроде Kali Linux, то эта база у тебя уже есть и для поиска можно использовать утилиту searchsploit.
В Exploit-DB находим готовый код. Эксплуатируемая им уязвимость носит идентификатор CVE-2019-6447. Из ее описания узнаем детали: приложение запускает на устройстве скрытый HTTP-сервер, который позволяет получить доступ к данным других пользователей, подключенных к той же сети в момент запуска приложения.
Скачиваем и пробуем запустить эксплоит. Нам сообщают, что в качестве обязательных параметров нужно указать команду и адрес, также есть опция для скачивания файлов.
Если просмотреть код эксплоита, мы сможем узнать о следующих поддерживаемых командах:
- listFiles — отобразить список файлов в директории;
- listPics — список изображений;
- listVideos — список видеофайлов;
- listAudios — список аудиофайлов;
- listApps — список установленных приложений;
- listAppsSystem — список системных приложений;
- listAppsPhone — список приложений для связи;
- listAppsSdcard — список приложений на карте SD;
- listAppsAll — список всех приложений;
- getFile — загрузить файл с устройства (для этого, видимо, и нужен третий параметр);
- getDeviceInfo — получить информацию об устройстве.
Прежде чем ковыряться в файловой системе, нужно узнать, с чем мы работаем. Давай получим информацию об устройстве:
1 |
python3 50070.py getDeviceInfo explore.htb |
Информации немного, но видим корневую директорию:
1 |
ftpRoot — /sdcard |
Модернизация эксплоита
Получить список файлов в заданной директории при помощи этого эксплоита не выйдет, поэтому мне пришлось его немного доработать. Для этого нужно просто добавить к URL каталог, к которому мы обращаемся. Я реализовал это в третьем параметре, ниже приведен код, который следует добавить в эксплоит.
1 2 3 4 5 6 |
if cmd == cmds[0]: if len(sys.argv) != 4: print("[+] Include dir for get list.") sys.exit(1) else: url += sys.argv[3] |
А теперь в третьем параметре передадим каталог, содержимое которого мы хотим получить.
1 |
python3 50070.py listFiles explore.htb /sdcard |
Находим файл user.txt, но забирать его пока рано, ведь мы не получили управление. Можно посмотреть каталоги загрузок (Download) и документов (Documents), также много интересного можем найти и в картинках. Но сперва обратим внимание на две директории, дата изменения которых отличается от остальных: dianxinos и DCIM. В первой ничего интересного, а вот в директории камеры есть интересный файл creds.
1 |
python3 50070.py listFiles explore.htb /sdcard/DCIM |
Эти же фотографии можно было обнаружить с помощью специальной поддерживаемой команды listPics.
1 |
python3 50070.py listPics explore.htb |
Загрузим интересующее нас изображение командой getFile.
1 |
python3 50070.py getFile explore.htb /sdcard/DCIM/creds.jpg |
Просматриваем картинку и находим логин и пароль.
Что характерно для такого рода задачек, эта учетка подходит к SSH. Таким образом мы получаем флаг пользователя.
Локальное повышение привилегий
Сомневаюсь, что скрипты для поиска путей повышения привилегий вроде LinPEAS сработают на Android, поэтому я решил проверять вручную. Первое, на что я обратил внимание, — это система, но никаких эксплоитов для Android этой версии обнаружить не удалось.
1 |
uname -a |
Sudo в данной системе отсутствует, поэтому на привилегированные команды без пароля можно не надеяться. А вот открытые для локального хоста порты представляют такой же интерес, как и в случае с Windows или Linux.
1 |
netstat -tulpan |
Находим порт 5555 и снова отправляемся в Google, чтобы узнать, что за софт на нем может работать. По первой же ссылке определяем используемое ПО — это ADB.
ADB (Android Debug Bridge) — клиент‑серверное приложение, которое предоставляет доступ к работающему эмулятору или устройству. С его помощью можно копировать файлы, устанавливать скомпилированные программные пакеты и запускать консольные команды. Используя консоль, можно даже изменять настройки журнала и взаимодействовать с базами данных SQLite, которые хранятся на устройстве.
Для работы нам потребуется одноименное приложение ADB, установить которое можно командой прямо из репозиториев Kali Linux:
1 |
sudo apt install adb |
Так как порт открыт для локального хоста, прокидываем его через SSH:
1 |
ssh -p 2222 -L 5555:localhost:5555 kristi@10.10.10.247 |
Теперь весь трафик, который мы пошлем на локальный порт 5555, будет туннелирован на порт 5555 удаленного устройства. Подключаемся.
1 |
adb connect 127.0.0.1:5555 |
Соединение успешно установлено, посмотрим идентификаторы подключенных устройств.
1 |
adb devices -l |
Из представленного списка нас интересует устройство с идентификатором 2. Получим командную оболочку, передав идентификатор в параметре -t и указав команду shell.
1 |
adb -t 2 shell |
Мы имеем шелл и по команде su получаем привилегированный контекст. Остается только найти файл рута.
1 2 3 |
su find / -name "root.txt" 2>/dev/null cat /data/root.txt |
Заключение
Файл найден, и мы получили полный контроль над машиной.
Еще по теме: