天天看點

armitage攻擊沒有attack_DLL攻擊漫談

動态連結庫(DLL)的方式以及Windows API訓示使用它們的方式都可以用作任意代碼執行的接口,并協助惡意行為者實作其目标。

動态連結庫是Microsoft實施共享庫的産品。

這些庫通常具有檔案擴充名DLL,并且它們也是PE檔案,與exe檔案完全一樣。

DLL可以包含PE檔案可以包含的任何類型的内容,這些内容可能與代碼,資源或資料的任何組合不同。

DLL主要用于在系統上的應用程式和程序之間共享此内容,以便在為Windows建立應用程式時為程式員提供高度的靈活性。

DLL以相同的通路權限在調用過程的記憶體中執行。這意味着,如果DLL包含任何異常,則不會為調用EXE提供任何保護。惡意攻擊者可以通過使用諸如DLL劫持或DLL代理之類的方法來執行其惡意代碼來利用這一事實。

DLL搜尋順序簡介

在整個日常工作中,我們将大量流程加載到我們的系統中。使用Windows作業系統時,程序加載算法的關鍵步驟包括将動态連結庫(DLL)加載到記憶體中,以利用其功能并滿足其程序與DLL之間的依賴關系。每當啟動程序時,都會發生此操作。

Windows作業系統可能包含同一DLL的大量版本。由于一個系統可能承載可能需要同一個DLL的許多程序這一事實,是以應采用一種系統來確定從正确的路徑加載所需的DLL,同時確定已找到該DLL的最相關版本。

應用程式制造商通過使用LoadLibraryExA或LoadLibraryA函數來使用加載特定庫的操作。這些函數接收一個路徑參數,該參數導緻所請求的DLL,并向調用過程傳回子產品的句柄。

1.目前目錄

2.啟動過程的目錄

3.C:\ Windows \ System32

4.C:\ Windows \ System

5.C:\ Windows

6.“ PATH”的SYSTEM環境變量中包含的目錄

7.USER環境變量“ PATH”中包含的目錄

DLL攻擊

DLL包含要由加載過程執行的代碼,這會造成一種情況,即可以利用丢失的DLL或以不安全的方法實作的DLL來誘騙正在運作的系統執行惡意有效負載,在這種情況下,它利用本機DLL搜尋順序。惡意行為者可能會使用此技術來加載自己的DLL,該DLL可能包含任何類型的代碼。

攻擊利用過程

當我們确定某個程序按某個搜尋順序搜尋DLL,并且缺少DLL 或者錯誤實作的DLL的程序之後,才能夠進行下一步攻擊

第一步:确定DLL

首先,我們從Sysinternals設定ProcMon來篩選未找到以DLL結尾的路徑的任何操作:

armitage攻擊沒有attack_DLL攻擊漫談

ProcMon下載下傳:https://docs.microsoft.com/en-us/sysinternals/downloads/procmon

我們可以看到“ Bginfo64.exe”找不到的對應DLL。

armitage攻擊沒有attack_DLL攻擊漫談

第二步:查找DLL和利用

在查找這些DLL時,得出的結論是Riched32.DLL是非本地DLL,是以,系統資料庫中沒有該DLL的預設搜尋路徑。但是如果我們正确配置它,系統最終也會加載它。

現在所需要做的就是在請求的路徑中建立該DLL:

armitage攻擊沒有attack_DLL攻擊漫談

那麼我們在請求路徑中建立該DLL(Riched32.dll),為了友善示範,我們的DLL

如果執行了,就彈窗 hello HBT黑白天 來證明我們的DLL可以執行指令

#define WIN32_LEAN_AND_MEAN#includeextern "C" __declspec(dllexport)DWORD WINAPI MessageBOXThread(LPVOID lpParam){    MessageBox(NULL,"hello hbt 黑白天","hello hbt 黑白天" , NULL);    return 0;}extern " C" __declspec(dllexport)BOOL APIENTRY DllMain(HMODULE hModule,          DWORD ul_reason_for_call,          LPVOID lpReserved){switch (ul_reason_for_call){    case Dll_PROCESS_ATTACH;      CreateThread(NULL,NULL,MessageBOXThread,NULL,NULL,NULL,NULL);      break;    case DLL_THREAD_ATTACH:    case DLL_THREAD_ATTACH:    case Dll_PROCESS_ATTACH:     break;}return TRUE;          })
           

我們把這個DLL命名為Riched32.dll放進Bginfo64.exe的DLL檔案夾中。

然後重新打開程序“ Bginfo64.exe。

armitage攻擊沒有attack_DLL攻擊漫談

出現該消息框,并且我們可以觀察到該程序加載了DLL:

armitage攻擊沒有attack_DLL攻擊漫談

那如果我們的DLL中包含惡意代碼呢。是不是可以繼承Bginfo64.exe執行指令??

最後一步:拿一個shell

确定了程序和易受攻擊的路徑之後,所缺少的就是建立我們希望執行的DLL有效負載。

我們可以使用一個“ DLLicious”的工具(https://github.com/J3wker/DLLicous-MaliciousDLL)來快速編譯包含的shell的DLL

用法

用法非常簡單,隻需使用Python3或“。\ DLLicous.py”運作腳本

我們可以使用

1.用C語言将反向Shell編寫DLL

2.Base64nc.exe 對NC二進制檔案進行編碼和解碼,然後将其寫入

DLL的工作目錄中,然後從該目錄中發起攻擊。另一個新功能是:nc.exe在DLL中也包含base64代碼,而不是從Web下載下傳或從SMB伺服器複制它。

armitage攻擊沒有attack_DLL攻擊漫談

通過使用PowerShell和DLL代碼中包含的NetCat的反向Shell

并嘗試與kali上的偵聽器聯系,然後使用PowerShell打開shell

我們可以看到執行劫持的程序後,将加載DLL并打開shell:

armitage攻擊沒有attack_DLL攻擊漫談

https://www.cynet.com/attack-techniques-hands-on/dlls-and-ways-they-can-hurt-us/

https://github.com/J3wker/DLLicous-MaliciousDLL

https://docs.microsoft.com/en-us/sysinternals/downloads/procmonhttps://docs.microsoft.com/en-us/sysinternals/downloads/procmon

滲透測試 紅隊攻防 免殺 權限維持 等等技術 

及時分享最新漏洞複現以及EXP 國内外最新技術分享!!!

進來一起學習吧

armitage攻擊沒有attack_DLL攻擊漫談

繼續閱讀