HTB Catch. Анализируем и перекомпилируем приложение для Android
the Matrix

Подключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
Начинаем, как водится, со сканирования портов исследуемой машины. Ее IP сразу добавляем в /etc/hosts:
И запускаем сканирование портов.
Сканирование портов — стандартный первый шаг при любой атаке. Он позволяет атакующему узнать, какие службы на хосте принимают соединение. На основе этой информации выбирается следующий шаг к получению точки входа.
Наиболее известный инструмент для сканирования — это Nmap. Улучшить результаты его работы ты можешь при помощи следующего скрипта.
Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование, с использованием имеющихся скриптов (опция -A).



Мы нашли несколько открытых портов:
Проходим к сайту на порте 80.

На сайте ничего необычного, скрытого или полезного не находим, кроме того, что предлагается загрузить какое‑то приложение.

После загрузки видим, что это программа для Android. На других портах работают Git (3000), чат Let’s Chat и платформа Cachet.
Как создать и развернуть виртуальную машину Android, а затем включить отладку, я уже писал в недавнем прохождении машины Routerspace, поэтому сразу перейдем к установке приложения.


При запуске приложения получаем ошибку соединения, а также раскрываем новый поддомен, который сразу добавляем в /etc/hosts.

Указанный адрес ведет на порт 443, который на сервере закрыт, поэтому попробуем вытянуть из приложения еще какие‑нибудь данные. Для этого я буду использовать мини‑песочницу для Android-приложений MobSF. В ней есть возможность статического и динамического анализа. Если тебе неохота устанавливать макет на свой хост, то можно пользоваться уже развернутой онлайновой версией.

Загружаем приложение и получаем отчет по статическому анализу.

Из важного сразу отмечаем забитые в приложение токены.

По второму токену определяем, что наша следующая цель — Let’s Chat. Вставляем его как токен доступа в заголовок Authorization.

Чтобы этот токен автоматически вставлялся в каждый запрос, отправленный через браузер, воспользуемся функцией match/replace в опциях Burp Proxy. Там выбираем заголовок запроса в качестве типа и указываем замену пустого поля нашим заголовком.

Обновляем страницу чата в браузере, в результате чего получаем редирект на страницу /rooms и список групп.

Можем получить сообщения из группы, выполнив запрос на адрес /rooms/<is>/messages.

В группе 61b86b28d984e2451036eb17 находим пересланные учетные данные пользователя john.

Пробуем ввести эту учетку на всех веб‑сервисах и получаем доступ к платформе Cachet.


В настройках платформы узнаем ее версию — 2.4.0-dev.

Первым делом стоит проверить, есть ли для этой версии готовые эксплоиты. Самый надежный способ сделать это — поискать в интернете на сайтах вроде HackerOne, exploit-db и, конечно, GitHub.

В блоге Sonar описано несколько CVE. Нам интересна CVE-2021-39174, которая позволит прочитать переменные среды.
Зная номер CVE, мы найдем готовый эксплоит на GitHub.

Эксплоиту нужно указать URL, имя пользователя и пароль.

С полученными учетными данными подключаемся к SSH и забираем первый флаг.

Теперь, когда мы получили доступ к хосту, нам необходимо собрать информацию. Делать мы это, как обычно, будем при помощи скриптов PEASS.
Что делать после того, как мы получили доступ в систему от имени пользователя? Вариантов дальнейшей эксплуатации и повышения привилегий может быть очень много, как в Linux, так и в Windows. Чтобы собрать информацию и наметить цели, можно использовать Privilege Escalation Awesome Scripts SUITE (PEASS) — набор скриптов, которые проверяют систему на автомате.
Загрузим на хост скрипт для Linux, дадим права на исполнение и запустим его. Из важного отметим найденный скрипт на Bash /opt/mdm/verify.sh, а также файлы со списками доступа (ACLs).


Больше ничего интересного нет, поэтому просмотрим, какие процессы периодически могут запускаться на хосте. В этом нам поможет программа pspy64.

От имени пользователя root запускается найденный нами скрипт. Разберем, что он выполняет. Скрипт проходит по файлам в каталоге /opt/mdm/apk_bin, копирует их в каталог /root/mdm/cerified_apps и передает в функции sig_check, comp_check и app_check.

В функции sig_check с помощью утилиты jarsigner проверяется подпись файла.

В функции comp_check утилита apktool декодирует файл, после чего из файла AndroidManifest.xml парсится версия SDK.

И в последней функции app_check из файла res/values/strings.xml парсится название приложения, которое должно начинаться с Catch. Результат вставляется в команду echo.

Это путь к выполнению кода, причем в контексте пользователя root. Все, что нам нужно сделать, — это смастерить APK, который будет содержать файл res/values/strings.xml и команду терминала в параметре app_name. После чего этот файл нужно будет подписать.
Но еще удобнее — декомпилировать скачанный APK, внести изменения и рекомпилировать его. Для декомпиляции будем использовать apktool.

Теперь создадим файл /res/values/strings.xml, содержащий конвейер команд, который выполняет команду chmod u+s /bin/bash.
Назначение S-бита файлу командной оболочки поможет запустить ее от имени рута. Осталось собрать файл обратно с помощью того же apktool.

Теперь подпишем файл с помощью jarsigner и загрузим на удаленный хост в каталог /opt/mdm/apk_bin.
Дождемся очередного выполнения скрипта, чтобы S-бит был назначен файлу командной оболочки.

Видим, что SUID выставлен, поэтому запускаем новый bash уже в привилегированном контексте и забираем флаг рута.

Машина захвачена!
Источник
Наши проекты:
- Кибер новости: the Matrix
- Хакинг: /me Hacker
- Кодинг: Minor Code