stihl не предоставил(а) никакой дополнительной информации.
Сегодня я покажу процесс анализа APK-приложения в Linux. Мы получим данные для доступа к закрытому API на сайте, а затем через уязвимость LFI прочитаем критически важные файлы на сервере и получим сессию пользователя. Для повышения привилегий взломаем хеш Werkzeug и извлечем учетные данные из Solar-PuTTY.
Наша цель — получение прав суперпользователя на машине Instant с учебной площадки Для просмотра ссылки Войдиили Зарегистрируйся. Уровень сложности задания — средний.
И запускаем сканирование портов.
Наиболее известный инструмент для сканирования — это Nmap. Улучшить результаты его работы ты можешь при помощи следующего скрипта:
Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование, с использованием имеющихся скриптов (опция -A).
Для просмотра ссылки Войдиили Зарегистрируйся
Сканер нашел всего два открытых порта: 22 — служба OpenSSH 9.6p1 — и 80 — веб‑сервер Apache 2.4.58. Сразу идем смотреть сайт и находим там ссылку на загрузку файла APK (формат приложений для Android).
Для просмотра ссылки Войдиили Зарегистрируйся
или Зарегистрируйся. Можно скачать его с 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, которые не были указаны в MobSF. Для этого используем всем известную команду grep.
Для просмотра ссылки Войдиили Зарегистрируйся
И находим новый поддомен — судя по имени, это Swagger UI. Обновляем запись в файле /etc/hosts и открываем новый сайт в браузере.
Для просмотра ссылки Войдиили Зарегистрируйся
Изучаем новые API и пробуем для теста запросить список пользователей с /api/v1/admin/list/users.
Для просмотра ссылки Войдиили Зарегистрируйся
Сервер ответил кодом 401. Попробуем использовать найденный ранее JWT.
Для просмотра ссылки Войди или Зарегистрируйся
Сервер вернул данные, а значит, мы можем использовать API с тем же токеном.
Для просмотра ссылки Войдиили Зарегистрируйся
В параметре log_file_name должно быть передано имя файла. Попробуем выполнить обход каталога и прочитать файл /etc/passwd.
Для просмотра ссылки Войди или Зарегистрируйся
или Зарегистрируйся».
Уязвимость path traversal присутствует, а значит, мы можем читать произвольные файлы в системе. Проверим, нет ли у пользователя закрытых ключей SSH.
Для просмотра ссылки Войди или Зарегистрируйся
Сохраняем ключ на локальную машину, назначаем права (chmod 0600 id_rsa) и подключаемся к серверу от имени пользователя shirohige.
Для просмотра ссылки Войдиили Зарегистрируйся
или Зарегистрируйся (PEASS) — набор скриптов, которые проверяют систему на автомате и выдают подробный отчет о потенциально интересных файлах, процессах и настройках.
Загрузим на удаленный хост скрипт для Linux, дадим право на выполнение и запустим сканирование. В выводе будет много всего, давай пройдемся по важным для нас моментам.
Для локального хоста прослушиваются порты 8808 и 8888.
Для просмотра ссылки Войдиили Зарегистрируйся
В файле с переменными окружения Instant-Api находим секретный ключ.
Для просмотра ссылки Войдиили Зарегистрируйся
Получен хеш пароля из файла базы данных по следующему пути:
Для просмотра ссылки Войдиили Зарегистрируйся
В каталоге /opt есть директория backups, доступная текущему пользователю.
Для просмотра ссылки Войдиили Зарегистрируйся
Среди недавно перезаписанных файлов находим бэкап сессионных файлов Solar-PuTTY.
Для просмотра ссылки Войдиили Зарегистрируйся
В файле сессии Solar-PuTTY /opt/backups/Solar-PuTTY/sessions-backup.dat есть зашифрованный блоб данных.
Для просмотра ссылки Войдиили Зарегистрируйся
Для его расшифровки будем использовать утилиту Для просмотра ссылки Войдиили Зарегистрируйся. Однако для этого потребуется пароль.
Для просмотра ссылки Войдиили Зарегистрируйся
Вернемся к найденному файлу базы данных instant.db. Скачаем его на локальную машину и просмотрим с помощью DB Browser. Из таблицы wallet_users получим два хеша PBKDF2.
Для просмотра ссылки Войдиили Зарегистрируйся
Я не нашел способа перебрать хеши с помощью hashcat, поэтому воспользовался скриптом Для просмотра ссылки Войдиили Зарегистрируйся.
Для просмотра ссылки Войдиили Зарегистрируйся
С подобранным паролем удалось расшифровать и данные Solar-PuTTY.
Для просмотра ссылки Войдиили Зарегистрируйся
В файле лежат учетные данные пользователя root, и нам ничто не мешает авторизоваться от его имени по SSH.
Для просмотра ссылки Войдиили Зарегистрируйся
Машина захвачена!
Наша цель — получение прав суперпользователя на машине Instant с учебной площадки Для просмотра ссылки Войди
warning
Подключаться к машинам с HTB рекомендуется с применением средств анонимизации и виртуализации. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
Разведка
Сканирование портов
Добавляем 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
Для просмотра ссылки Войди
Сканер нашел всего два открытых порта: 22 — служба OpenSSH 9.6p1 — и 80 — веб‑сервер Apache 2.4.58. Сразу идем смотреть сайт и находим там ссылку на загрузку файла APK (формат приложений для Android).
Для просмотра ссылки Войди
Точка входа
Для первичного анализа APK будем использовать фреймворк Для просмотра ссылки ВойдиЗаходим на сайт и загружаем приложение на анализ.
Для просмотра ссылки Войди
Спустя несколько минут статус задачи сканирования поменяется и будет доступна ссылка с отчетом. Среди общей статистики нам также доступен декомпилированный код приложения. Хотя для декомпиляции лучше обратиться к Для просмотра ссылки Войди
Для просмотра ссылки Войди
Листаем страницу отчета и отмечаем любые данные, которые могут пригодиться для более детального изучения файла. Очень важная информация — это список URL, найденных в файле.
Для просмотра ссылки Войди
Так мы узнаём о новом домене mywalletv1.instant.htb, поэтому обновляем запись в файле /etc/hosts.
10.10.11.37 instant.htb mywalletv1.instant.htb
Также MobSF пробует найти различные секреты, токены и ключи. Второй очень похож на часть JWT.
Для просмотра ссылки Войди
Поочередно просматриваем декомпилированные файлы Java, в которых используются URL-адреса. В файле AdminActivities.java выполняется запрос на Для просмотра ссылки Войди
Для просмотра ссылки Войди
Декодировать JWT можно на сайте Для просмотра ссылки Войди
Для просмотра ссылки Войди
При обращении к 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. Чтобы собрать информацию и наметить цели, можно использовать Для просмотра ссылки ВойдиЗагрузим на удаленный хост скрипт для 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.
Для просмотра ссылки Войди
Машина захвачена!