图像隐写加载payload

本文来自无问社区,更多实战内容可前往查看
1.用法演示

Invoke-PSImage 是一款开源工具,用于将powershell 的 payload 隐藏至 png 图片当中。

【公众号:白帽子社区团队 在主界面发送“PSImage”,获取下载链接。】

用法:Invoke-PSImage -Script .\payload.ps1 -Out attack.png -Image .\test.png

其中 Script 参数用于指定 powershell payload 脚本, Out 参数设置输出含有 payload 内容的图片文件名称,image 参数指定原始图片文件。

图片

添加-webclient 参数可以生成通过 web 加载的执行代码。通过这种方式可以使目标客户端远程加载我们所制作的携带后门的图片,并在本地执行。

图片

我们的图片在插入 payload 之后,图片的显示并不会受到影响

图片

2.原理分析

这是将隐写技术实战化的一个工具,具体的实现代码也非常少。因为对隐写技术研究的不够深入,所以这里主要讲解代码的执行过程,各位可以参考本文对代码进行研究在接下来的实战中拓展相关技术,或对此方法进行改进。

首先是读取图像的位图信息,用于接下来图像数据的修改

$img = New-Object System.Drawing.Bitmap($Image)
$width = $img.Size.Width
$height = $img.Size.Height

之后判断图像大小是否足够包含所有的 payload 代码。

if($bytes/2 -lt $payload.Length) {
Write-Error "Image not large enough to contain payload!"
$img.UnlockBits($bmpData)
$img.Dispose() Break
}

之后循环将 payload 插入到 RGB 数组中。


for ($counter = 0; $counter -lt ($rgbValues.Length)/3; $counter++) {
    if ($counter -lt $payload.Length){
        $paybyte1 = [math]::Floor($payload[$counter]/16)
        $paybyte2 = ($payload[$counter] -band 0x0f)
        $paybyte3 = ($randb[($counter+2)%109] -band 0x0f)
    } else {
        $paybyte1 = ($randb[$counter%113] -band 0x0f)
        $paybyte2 = ($randb[($counter+1)%67] -band 0x0f)
        $paybyte3 = ($randb[($counter+2)%109] -band 0x0f)
    }
    $rgbValues[($counter*3)] = ($rgbValues[($counter*3)] -band 0xf0) -bor $paybyte1
    $rgbValues[($counter*3+1)] = ($rgbValues[($counter*3+1)] -band 0xf0) -bor $paybyte2
    $rgbValues[($counter*3+2)] = ($rgbValues[($counter*3+2)] -band 0xf0) -bor $paybyte3
}

最终将处理好的位图数据写入指定的图像文件中

$img.Save($Out, [System.Drawing.Imaging.ImageFormat]::Png)
$img.Dispose()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值