Сегодня я покажу, как модифицировать powershell shellcode runner для загрузки и выполнения нагрузки в обход Windows Defender.
Я буду использовать shellcode runner, который применял ранее:
Для демонстрации я использую виртуальную машину Windows с временно отключённым Defender. Я скопирую код и создам на его основе новый файл, используя PowerShell ISE.
Здесь я собираюсь добавить переменную $url, содержащую URL-адрес, с которого мы будем загружать наш .bin файл, а затем изменить переменную $buf так, чтобы она загружала необработанные данные. При этом [Byte[]] в начале гарантирует, что данные будут прочитаны в виде байтов.
Теперь нам нужно убедиться, что мы выделили достаточно места для любого шеллкода, который мы собираемся выполнить. Я собираюсь переместить переменную $cucumbers ниже переменной $buf. Я изменю аргумент, который отвечает за размер, нужно установить его равным размеру переменной $buf.
Далее я создам обратную оболочку (reverse shell) в msfvenom с типом файла raw и сохраню её как rev.bin.
Я собираюсь запустить мой HTTP-сервер на Python, откуда он скачает rev.bin.
Также я запущу Netcat-листенер, через который я получу обратную оболочку.
А теперь давайте протестируем наш PowerShell-скрипт. И у нас есть shell!
Однако это работает только до тех пор, пока у нас отключен Defender. Воспользуемся , чтобы посмотреть, какие строки кода могут быть определены как вредоносные.
Как видно, первая строка уже может вызвать проблему, так как она указывает на функцию GetAssemblies().
Вынесем эту часть кода в отдельный файл и воспользуемся для его обфускации. Импортируем модуль, а затем запускаем Invoke-Obfuscation.
Затем мы устанавливаем scriptpath на наш файл, который нужно обфусцировать.
Далее используем token/all/1, чтобы применить все техники обфускации.
И мы получаем наш обфусцированный код.
Я буду использовать shellcode runner, который применял ранее:
Для демонстрации я использую виртуальную машину Windows с временно отключённым Defender. Я скопирую код и создам на его основе новый файл, используя PowerShell ISE.
Здесь я собираюсь добавить переменную $url, содержащую URL-адрес, с которого мы будем загружать наш .bin файл, а затем изменить переменную $buf так, чтобы она загружала необработанные данные. При этом [Byte[]] в начале гарантирует, что данные будут прочитаны в виде байтов.
Теперь нам нужно убедиться, что мы выделили достаточно места для любого шеллкода, который мы собираемся выполнить. Я собираюсь переместить переменную $cucumbers ниже переменной $buf. Я изменю аргумент, который отвечает за размер, нужно установить его равным размеру переменной $buf.
Далее я создам обратную оболочку (reverse shell) в msfvenom с типом файла raw и сохраню её как rev.bin.
Я собираюсь запустить мой HTTP-сервер на Python, откуда он скачает rev.bin.
Также я запущу Netcat-листенер, через который я получу обратную оболочку.
А теперь давайте протестируем наш PowerShell-скрипт. И у нас есть shell!
Однако это работает только до тех пор, пока у нас отключен Defender. Воспользуемся , чтобы посмотреть, какие строки кода могут быть определены как вредоносные.
Как видно, первая строка уже может вызвать проблему, так как она указывает на функцию GetAssemblies().
Вынесем эту часть кода в отдельный файл и воспользуемся для его обфускации. Импортируем модуль, а затем запускаем Invoke-Obfuscation.
Затем мы устанавливаем scriptpath на наш файл, который нужно обфусцировать.
Далее используем token/all/1, чтобы применить все техники обфускации.
И мы получаем наш обфусцированный код.