将 PowerShell 脚本编码到 PNG 图像的像素中,并生成一行命令来执行
Invoke-PSImage 获取一个 PowerShell 脚本,并将脚本的字节编码到 PNG 图像的像素中。它生成一行命令,用于从文件或从 Web 执行。
它既可以仅使用 payload 数据创建新图像,也可以将 payload 嵌入到现有图像的最低有效字节中,使其看起来像是一张真实的图片。图像保存为 PNG 格式,可以进行无损压缩而不会影响执行 payload 的能力,因为数据存储在颜色本身中。在创建新图像时,普通的 PowerShell 脚本实际上会被显著压缩,通常生成的 PNG 文件大小约为原始脚本的 50%。
使用嵌入方法时,每个像素中两个颜色值的最低 4 位用于存放 payload。图像质量会因此下降,但看起来仍然不错。它可以接受大多数图像类型作为输入,但输出始终是 PNG,因为需要无损格式。图像的每个像素用于存放脚本的一个字节,因此你需要一张像素数量至少等于脚本字节数的图像。这很容易实现——例如,Invoke-Mimikatz 可以放入一张 1920x1200 的图像中。
-Script [文件路径] 要嵌入到图像中的脚本的路径。
-Out [文件路径] 生成的图像要保存到的文件(图像将是 PNG 格式)
-Image [文件路径] 用于嵌入脚本的图像。(可选)
-WebRequest 输出一个命令,用于使用 Net.WebClient 从 Web 读取图像。 你需要托管图像并将 URL 插入到命令中。
-PictureBox 输出一个命令,用于使用 System.Windows.Forms.PictureBox 从 Web 读取图像。 你需要托管图像并将 URL 插入到命令中。
将脚本 "Invoke-Mimikatz.ps1" 嵌入到图像中,并输出一行命令用于从磁盘执行:
PS>Import-Module .\Invoke-PSImage.ps1
PS>Invoke-PSImage -Script .\Invoke-Mimikatz.ps1 -Out .\evil-kiwi.png -Image .\kiwi.jpg
[从文件执行的一行命令]
将脚本 "Invoke-Mimikatz.ps1" 嵌入到图像中,并输出一行命令用于从 Web 执行(你仍需托管图像并编辑 URL):
PS>Import-Module .\Invoke-PSImage.ps1
PS>Invoke-PSImage -Script .\Invoke-Mimikatz.ps1 -Out .\evil-kiwi.png -Image .\kiwi.jpg -WebRequest
[从 Web 执行的一行命令]
在 Web 上托管并执行图像:
