
Ein Tool zum Generieren von .NET-serialisierten Gadgets, die beim Deserialisieren mit BinaryFormatter aus JS/VBS/VBA-basierten Skripten das Laden/Ausführen von .NET-Assemblys auslösen können.
Ein Tool zum Generieren von .NET-serialisierten Gadgets, die das Laden/Ausführen von .NET-Assemblies auslösen können, wenn sie mithilfe von BinaryFormatter aus JS/VBS/VBA-Skripten deserialisiert werden.
Das aktuelle Gadget löst beim Deserialisieren mit BinaryFormatter aus jscript/vbscript/vba einen Aufruf von Activator.CreateInstance() aus. Das bedeutet, es kann verwendet werden, um die Ausführung Ihrer .NET-Assembly Ihrer Wahl über den standardmäßigen/öffentlichen Konstruktor auszulösen.
Das Tool wurde hauptsächlich zur Automatisierung der Bewaffnung von WSH-Skripten für RT-Einsätze (Initial Access, Lateral Movement, Persistence) entwickelt. Der für den PoC verwendete Shellcode-Loader wurde entfernt und durch eine Beispiel-Assembly ersetzt, die im TestAssembly-Projekt implementiert ist.
Sie können entweder die Binärdateien im Release-Ordner verwenden oder VS2017 nutzen und Ihr Projekt auf .NET Version 3.5 oder 4.x umstellen, um G2JS aus dem Quellcode zu erstellen.
Verwenden Sie die .NET 3.5-Version von G2JS, um:
Verwenden Sie die .NET 4.x-Version von G2JS, um:
Der C#-Quellcode der Payload sollte im standardmäßigen öffentlichen Konstruktor Ihrer Klasse platziert werden. (Beispiel zum Ausführen von Mimikatz aus jscript; https://gist.github.com/med0x2e/cc10d42b1f581507013e801da2651c74)
Tests wurden auf dem neuesten Windows 10 Enterprise 1909 Release und Windows 7 mit verschiedenen installierten .NET Framework-Versionen durchgeführt.
Stellen Sie sicher, dass Windows Defender deaktiviert ist, wenn Sie GadgetToJScript.exe zum Generieren von WSH-Skripten verwenden. Er kann wieder aktiviert werden, sobald die Skripte generiert sind.
-w, --scriptType=js | Auf js, vbs, vba oder hta setzen |
-a, --assembly=TestAssembly.dll | .NET-Assembly, Beispiel: -a C:\Users\userX\Desktop\shellcode_loader.dll/exe, alternativ können Sie stattdessen eine C#-Quelldatei angeben, indem Sie die Befehlszeilenoption -c verwenden. |
-c, --csfile=TestAssembly.cs | C#-Quelldatei, Beispiel: -c C:\Users\userX\Desktop\shellcode_loader.cs, stellen Sie sicher, dass Sie Ihren Code im Standardkonstruktor Ihrer Klasse platzieren und alle erforderlichen Abhängigkeiten über die Befehlszeilenoption -d angeben. |
-d, --references=Example.dll | Referenzassemblys, Beispiel: -d System.Window- s.Forms.dll, System.dll |
-b, --bypass | Umgeht die in .NET Version 4.8+ eingeführten Typprüfungskontrollen. Standardmäßig auf false gesetzt; setzen Sie es auf true (--bypass/-b), falls WSH-Skripte zur Ausführung in Umgebungen mit .NET Version > 4.8+ generiert werden. Diese Option sollte nur mit der .NET 4.x G2JS-Executable verwendet werden. |
-e, --encodeType=b64 | VBA-Gadget-Kodierung: b64 oder hex (Standard: b64) |
-o, --output=output | Generierte Payload-Ausgabedatei, Beispiel: -o C:\Users\userX\Desktop\output (Ohne Erweiterung) |
-r, --regfree | Registrierungsfreie Aktivierung von .NET-basierten COM-Komponenten, nur für JS/HTA-Skripte anwendbar. |
-h, --help | Hilfe anzeigen |
Verwenden Sie die .NET 3.5-Version von G2JS, um registrierungsfreie JScript/HTA-WSH-Skripte zu generieren, die die .NET Framework 4.8+ Typprüfung weiterhin umgehen können, ohne diese Abschwächung mithilfe des ersten TextFormattingRunProperties-Stufen-Gadgets deaktivieren zu müssen. Betrachten Sie dies als einen besseren/saubereren Bypass, um Reg-freie JScript/HTA-Payloads auszuführen, die auf .NET 4.8+ Umgebungen abzielen, da er Folgendes nicht erfordert:
Shell-ObjektsCOMPLUS_Version.-> weniger IOCs + zielt auf 3.5 < .NET < 4.x Umgebungen ab.
Das Tool basiert auf der großartigen Forschung/Arbeit von:
GadgetToJScript sollte nur für autorisiertes Red Teaming und/oder gemeinnützige Bildungszwecke verwendet werden. Für jeglichen Missbrauch dieser Software übernimmt der Autor keine Verantwortung. Verwenden Sie es nur in Ihren eigenen Netzwerken und/oder mit Genehmigung des Netzwerkeigentümers.