Разработчик Баретт Адамс в своём GitHub-репозитории опубликовал инструмент, позволяющий встраивать скрипт PowerShell в изображения. Invoke-PSImage вставляет байты информации в пиксели картинки формата PNG. После встраивания возможно сгенерировать oneliner либо напрямую из файла, либо по Сети.
Встраивание скрипта в изображение
Инструмент использует наименее значимые 4 бита двух значений цвета каждого пикселя для хранения полезной информации. Разумеется, качество изображения страдает, но оно по-прежнему выглядит прилично. Инструмент в качестве входных данных принимает большинство форматов изображений, но результатом всегда будет PNG. Новое изображение в дальнейшем может быть сжато без потерь, а также без ущерба для выполнения полезной нагрузки, поскольку данные хранятся в самих цветах.
По словам Адамса, каждый пиксель изображения используется для хранения одного байта скрипта. Поэтому для полноценной работы инструмента необходимо подобрать изображение с тем же количеством пикселей, что и байтов в скрипте. Например, для PS-скрипта Invoke-Mimikatz
подойдёт изображение с разрешением 1920×1200.
Аргументы инструмента
-Script [filepath]
— путь к скрипту для встраивания;-Image [filepath]
— путь к картинке для встраивания;-Out [filepath]
— путь к результирующему файлу;-Web
— флаг, указывающий, что картинка для встраивания находится в веб. Необходимо также указать её URL.
Пример использования
Первый пример создаёт картинку со встроенным скриптом Invoke-Mimikatz.ps1
. Результирующим файлом будет oneliner для запуска с диска:
PS>Import-Module .\Invoke-PSImage.ps1
PS>Invoke-PSImage -Script .\Invoke-Mimikatz.ps1 -Image .\kiwi.jpg -Out .\evil-kiwi.png
[Oneliner to execute from a file]
Следующий пример кода создаст картинку со встроенным скриптом Invoke-Mimikatz.ps1
. Результирующим файлом будет oneliner для запуска из веб:
PS>Import-Module .\Invoke-PSImage.ps1
PS>Invoke-PSImage -Script .\Invoke-Mimikatz.ps1 -Image .\kiwi.jpg -Out .\evil-kiwi.png -Web
[Oneliner to execute from the web]
Результат работы: