• [ Регистрация ]Открытая и бесплатная
  • Tg admin@ALPHV_Admin (обязательно подтверждение в ЛС форума)

Статья Реверсим приложение для Android и захватываем сервер

stihl

Moderator
Регистрация
09.02.2012
Сообщения
1,167
Розыгрыши
0
Реакции
510
Deposit
0.228 BTC
stihl не предоставил(а) никакой дополнительной информации.
Сегодня я покажу процесс анализа APK-приложения в Linux. Мы получим данные для доступа к закрытому API на сайте, а затем через уязвимость LFI прочитаем критически важные файлы на сервере и получим сессию пользователя. Для повышения привилегий взломаем хеш Werkzeug и извлечем учетные данные из Solar-PuTTY.
Наша цель — получение прав суперпользователя на машине Instant с учебной площадки Для просмотра ссылки Войди или Зарегистрируйся. Уровень сложности задания — средний.

Разведка​


Сканирование портов​

Добавляем IP-адрес машины в /etc/hosts:

10.10.11.37 instant.htb
И запускаем сканирование портов.

Справка: сканирование портов​

Сканирование портов — стандартный первый шаг при любой атаке. Он позволяет атакующему узнать, какие службы на хосте принимают соединение. На основе этой информации выбирается следующий шаг к получению точки входа.
Наиболее известный инструмент для сканирования — это Nmap. Улучшить результаты его работы ты можешь при помощи следующего скрипта:
Код:
#!/bin/bash
ports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr '
' ',' | sed s/,$//)
nmap -p$ports -A $1
Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование, с использованием имеющихся скриптов (опция -A).
Для просмотра ссылки Войди или Зарегистрируйся
Сканер нашел всего два открытых порта: 22 — служба OpenSSH 9.6p1 — и 80 — веб‑сервер Apache 2.4.58. Сразу идем смотреть сайт и находим там ссылку на загрузку файла APK (формат приложений для Android).

Для просмотра ссылки Войди или Зарегистрируйся

Точка входа​

Для первичного анализа APK будем использовать фреймворк Для просмотра ссылки Войди или Зарегистрируйся. Можно скачать его с GitHub и развернуть локально либо использовать общедоступный вариант по адресу Для просмотра ссылки Войди или Зарегистрируйся. Я воспользовался вторым вариантом.

Заходим на сайт и загружаем приложение на анализ.

Для просмотра ссылки Войди или Зарегистрируйся
Спустя несколько минут статус задачи сканирования поменяется и будет доступна ссылка с отчетом. Среди общей статистики нам также доступен декомпилированный код приложения. Хотя для декомпиляции лучше обратиться к Для просмотра ссылки Войди или Зарегистрируйся.

Для просмотра ссылки Войди или Зарегистрируйся
Листаем страницу отчета и отмечаем любые данные, которые могут пригодиться для более детального изучения файла. Очень важная информация — это список URL, найденных в файле.

Для просмотра ссылки Войди или Зарегистрируйся
Так мы узнаём о новом домене mywalletv1.instant.htb, поэтому обновляем запись в файле /etc/hosts.

10.10.11.37 instant.htb mywalletv1.instant.htb
Также MobSF пробует найти различные секреты, токены и ключи. Второй очень похож на часть JWT.

Для просмотра ссылки Войди или Зарегистрируйся
Поочередно просматриваем декомпилированные файлы Java, в которых используются URL-адреса. В файле AdminActivities.java выполняется запрос на Для просмотра ссылки Войди или Зарегистрируйся и используется токен JWT.

Для просмотра ссылки Войди или Зарегистрируйся
Декодировать JWT можно на сайте Для просмотра ссылки Войди или Зарегистрируйся. В данных токена видим роль Admin.

Для просмотра ссылки Войди или Зарегистрируйся
При обращении к API profile через браузер получим ошибку 401.

Для просмотра ссылки Войди или Зарегистрируйся
Однако, применив найденный JWT, мы получаем код ответа 200 вместе с запрошенными данными.

Для просмотра ссылки Войди или Зарегистрируйся
JWT рабочий, а значит, можно исследовать API.

Точка опоры​

API​

Больше ничего интересного я не нашел, поэтому переходим к следующему шагу — декомпиляции APK на уже упомянутом Decompiler.com.

Для просмотра ссылки Войди или Зарегистрируйся
Попробуем найти новые точки API, которые не были указаны в MobSF. Для этого используем всем известную команду grep.

grep -iR instant.htb ./
Для просмотра ссылки Войди или Зарегистрируйся
И находим новый поддомен — судя по имени, это Swagger UI. Обновляем запись в файле /etc/hosts и открываем новый сайт в браузере.

10.10.11.37 instant.htb mywalletv1.instant.htb swagger-ui.instant.htb
Для просмотра ссылки Войди или Зарегистрируйся
Изучаем новые API и пробуем для теста запросить список пользователей с /api/v1/admin/list/users.

curl -X GET "http://swagger-ui.instant.htb/api/v1/admin/list/users" -H "accept: application/json" | jq
Для просмотра ссылки Войди или Зарегистрируйся
Сервер ответил кодом 401. Попробуем использовать найденный ранее JWT.

Код:
curl -X GET "http://swagger-ui.instant.htb/api/v1/admin/list/users" -H  "accept: application/json" -H "Authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MSwicm9sZSI6IkFkbWluIiwid2FsSWQiOiJmMGVjYTZlNS03ODNhLTQ3MWQtOWQ4Zi0wMTYyY2JjOTAwZGIiLCJleHAiOjMzMjU5MzAzNjU2fQ.v0qyyAqDSgyoNFHU7MgRQcDA0Bw99_8AEXKGtWZ6rYA" | jq
Для просмотра ссылки Войди или Зарегистрируйся
Сервер вернул данные, а значит, мы можем использовать API с тем же токеном.


Path traversal​

Обрати внимание на API для получения логов /api/v1/admin/read/log.

Для просмотра ссылки Войди или Зарегистрируйся
В параметре log_file_name должно быть передано имя файла. Попробуем выполнить обход каталога и прочитать файл /etc/passwd.

Код:
curl -X GET "http://swagger-ui.instant.htb/api/v1/admin/read/log?log_file_name=../../../../../../../etc/passwd" -H  "accept: application/json" -H "Authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MSwicm9sZSI6IkFkbWluIiwid2FsSWQiOiJmMGVjYTZlNS03ODNhLTQ3MWQtOWQ4Zi0wMTYyY2JjOTAwZGIiLCJleHAiOjMzMjU5MzAzNjU2fQ.v0qyyAqDSgyoNFHU7MgRQcDA0Bw99_8AEXKGtWZ6rYA" | jq
Для просмотра ссылки Войди или Зарегистрируйся

info​

Подробное объяснение техники path traversal ты можешь найти в статье «Для просмотра ссылки Войди или Зарегистрируйся».
Уязвимость path traversal присутствует, а значит, мы можем читать произвольные файлы в системе. Проверим, нет ли у пользователя закрытых ключей SSH.

Код:
curl -X GET "http://swagger-ui.instant.htb/api/v1/admin/read/log?log_file_name=../../../../../../../home/shirohige/.ssh/id_rsa" -H  "accept: application/json" -H "Authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MSwicm9sZSI6IkFkbWluIiwid2FsSWQiOiJmMGVjYTZlNS03ODNhLTQ3MWQtOWQ4Zi0wMTYyY2JjOTAwZGIiLCJleHAiOjMzMjU5MzAzNjU2fQ.v0qyyAqDSgyoNFHU7MgRQcDA0Bw99_8AEXKGtWZ6rYA" | jq
Для просмотра ссылки Войди или Зарегистрируйся
Сохраняем ключ на локальную машину, назначаем права (chmod 0600 id_rsa) и подключаемся к серверу от имени пользователя shirohige.

Для просмотра ссылки Войди или Зарегистрируйся

Локальное повышение привилегий​

Теперь нам необходимо собрать информацию. Я буду использовать для этого скрипты PEASS.

Справка: скрипты PEASS​

Что делать после того, как мы получили доступ в систему от имени пользователя? Вариантов дальнейшей эксплуатации и повышения привилегий может быть очень много, как в Linux, так и в Windows. Чтобы собрать информацию и наметить цели, можно использовать Для просмотра ссылки Войди или Зарегистрируйся (PEASS) — набор скриптов, которые проверяют систему на автомате и выдают подробный отчет о потенциально интересных файлах, процессах и настройках.
Загрузим на удаленный хост скрипт для Linux, дадим право на выполнение и запустим сканирование. В выводе будет много всего, давай пройдемся по важным для нас моментам.

Для локального хоста прослушиваются порты 8808 и 8888.

Для просмотра ссылки Войди или Зарегистрируйся
В файле с переменными окружения Instant-Api находим секретный ключ.

Для просмотра ссылки Войди или Зарегистрируйся
Получен хеш пароля из файла базы данных по следующему пути:

/home/shirohige/projects/mywallet/Instant-Api/mywallet/instance/instant.db
Для просмотра ссылки Войди или Зарегистрируйся
В каталоге /opt есть директория backups, доступная текущему пользователю.

Для просмотра ссылки Войди или Зарегистрируйся
Среди недавно перезаписанных файлов находим бэкап сессионных файлов Solar-PuTTY.

Для просмотра ссылки Войди или Зарегистрируйся
В файле сессии Solar-PuTTY /opt/backups/Solar-PuTTY/sessions-backup.dat есть зашифрованный блоб данных.

Для просмотра ссылки Войди или Зарегистрируйся
Для его расшифровки будем использовать утилиту Для просмотра ссылки Войди или Зарегистрируйся. Однако для этого потребуется пароль.

Для просмотра ссылки Войди или Зарегистрируйся
Вернемся к найденному файлу базы данных instant.db. Скачаем его на локальную машину и просмотрим с помощью DB Browser. Из таблицы wallet_users получим два хеша PBKDF2.

Для просмотра ссылки Войди или Зарегистрируйся
Я не нашел способа перебрать хеши с помощью hashcat, поэтому воспользовался скриптом Для просмотра ссылки Войди или Зарегистрируйся.

python3 app.py -w Wordlist/small_rockyou.txt 'pbkdf2:sha256:600000$YnRgjnim$c9541a8c6ad40bc064979bc446025041ffac9af2f762726971d8a28272c550ed'
Для просмотра ссылки Войди или Зарегистрируйся
С подобранным паролем удалось расшифровать и данные Solar-PuTTY.

Для просмотра ссылки Войди или Зарегистрируйся
В файле лежат учетные данные пользователя root, и нам ничто не мешает авторизоваться от его имени по SSH.

Для просмотра ссылки Войди или Зарегистрируйся
Машина захвачена!
 
Activity
So far there's no one here