2017-02-23 46 views
0

我是一名新手安全研究員,嘗試使用滴管/定時器瞭解PE注入,非常類似於cryptolocker的操作。C++ PE注入 - 來自遠程位置的EXE文件(例如HTTP)

我們正在爲我們處理QRadar SIEM的藍色團隊設置防火練習,並且我們希望爲其啓動一些自定義惡意軟件。

所以,現在,我的問題:)。我瞭解PE注入的一般概念,但幾乎所有的教程,我已經找到注入當前的EXE(通常通過調用GetModuleHandle(NULL))

我想知道如何去注入一個遠程資源EXE例如HTTP下載)。 基本上我的目標是這樣的:

  1. 驛站文件下載EXE在內存使用PE方法過程
  2. 驛站文件注入EXE X

我不希望在這裏一個完整的答案,但如果你可以指向我正確的方向,那將是偉大的:)。

請注意,此代碼將而不是用於惡意目的。

此致敬禮!

+0

好的,所以*你*不會用於惡意目的。如果其他人閱讀答案呢? –

+0

這就是爲什麼我說我指向正確的方向就夠了,不需要代碼。人們必須以某種方式學習,因爲你研究的東西可以用於惡意目的,所以很難進行安全研究。 我可以扔掉protonemail和答案可以郵寄,也許這是更好:) – yannickwe87

回答

1

其實很簡單。您只需將遠程EXE/DLL下載到緩衝區(即從內存中),從這一點上您可以選擇一些選項。

您最初需要檢查MZ簽名,並且它是一個有效的PE文件。你可以這樣做PIMAGE_NT_HEADERS,檢查Optional.Signature(如果有效的PE文件)和e_magic在PIMAGE_DOS_HEADER(MZ簽名)

現在的問題是,如果你想注入一個DLL,從內存中加載它,搜索其爲給定函數導出表,獲取代碼並在遠程進程中執行i,或從內存中執行EXE。

假設你只是想獲取圖像的ImageBase,就像你說的你閱讀一些在線的教程,通過GetModuleHandle來討論它,你首先需要映射下載的緩衝區。

您可以通過

CreateFileW(讀),CreateFileMapping做到這一點(從傳遞的CreateFile處理),MapViewOfFile(自通的CreateFileMapping返回的句柄)。

在此之後,您將從MapViewOfFile獲取基本圖像地址。你現在可以用這個文件做很多事情,你可以從內存中注入它,或者從內存中執行它。

您需要查看PE修正(導出和導入地址表函數)以及通過直接映像目錄RVA - > base進行基礎重定位。

請注意,如果您在映射文件之後在遠程進程中執行映像,請使用ZwQueueApcThread注入方法,而不是像RtlCreateUserThread/CreateRemoteThread這樣的更復雜的注入方法。

如果您正在執行內存中的代碼。在通過重定位確定偏移之後,確保通過VirtualProtectEx,可選ZwAllocateVirtualMemory(通過PAGE_WRITECOPY而不是PAGE_EXECUTE_READWRITE)而不是ZwWriteVirtualMemory - WriteProcessMemory執行代碼,因爲它更加隱身!

此外,我相信你可以找出一些其他的方法,這只是從我的頭頂。

+0

嘿,非常感謝評論。今天我可以自己弄清楚大部分內容,做了一些大量的挖掘工作,但是並不完全確定下載文件和映射的方法,這將清除它! 非常感謝! – yannickwe87

+0

不客氣!在下載文件後映射文件的方法允許您從內存中獲取文件的基地址。如果您試圖限制您的應用程序訪問磁盤:) – Droopy