Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
VBA-RunPE — Eine VBA-Implementierung der RunPE-Technik oder wie man die Anwendungs-Whitelist umgeht. | Kitploit
Tools/GitHubGitHub/itm4n/vba-runpe
ExploitationIDS/IPS-UmgehungPost-ExploitationPenetrationstestsRed TeamingPayload-EntwicklungArchived
GitHubitm4n/vba-runpe

VBA-RunPE

Eine VBA-Implementierung der RunPE-Technik oder wie man die Anwendungs-Whitelist umgeht.

Repository anzeigen
815173vor 6 JahrenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

VBA RunPE

Beschreibung

Eine einfache, aber effektive Implementierung der RunPE-Technik in VBA. Dieser Code kann verwendet werden, um ausführbare Dateien aus dem Arbeitsspeicher von Word oder Excel auszuführen. Er ist sowohl mit 32-Bit- als auch mit 64-Bit-Versionen von Microsoft Office 2010 und höher kompatibel.

Weitere Informationen hier:
https://itm4n.github.io/vba-runpe-part1/
https://itm4n.github.io/vba-runpe-part2/

Win10_x64_Office2016_x64_PowerShell

Verwendung 1 – PE-Datei auf der Festplatte

  1. Setzen Sie in der Exploit-Prozedur am Ende des Codes den Pfad der Datei, die Sie ausführen möchten.
root@kitploit:~
strSrcFile = "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"

/!\ Wenn Sie eine 32-Bit-Version von Microsoft Office auf einem 64-Bit-Betriebssystem verwenden, müssen Sie 32-Bit-Binärdateien angeben.

root@kitploit:~
strSrcFile = "C:\Windows\SysWOW64\cmd.exe"
strSrcFile = "C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe"
  1. Geben Sie die Befehlszeilenargumente an (optional).
root@kitploit:~
strArguments = "-exec Bypass"

Dies wird verwendet, um eine Befehlszeile zu bilden, die Folgendem entspricht:

root@kitploit:~
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -exec Bypass
  1. (Optional) Aktivieren Sie Ansicht > Direktfenster (Strg+G), um Ausführungs- und Fehlerprotokolle zu überprüfen.

  2. Führen Sie das Exploit-Makro aus!

Verwendung 2 – Eingebettetes PE

  1. Verwenden Sie pe2vba.py, um eine PE-Datei in VBA zu konvertieren. Auf diese Weise kann sie direkt in das Makro eingebettet werden.
root@kitploit:~
user@host:~/Tools/VBA-RunPE$ ./pe2vba.py meterpreter.exe 
[+] Datei 'meterpreter.exe.vba' erstellt.
  1. Ersetzen Sie den folgenden Code in RunPE.vba durch den Inhalt der .vba-Datei, die im vorherigen Schritt erstellt wurde. Das Python-Skript konvertiert das PE in VBA und wendet die RunPE-Vorlage automatisch an (kein manuelles Kopieren/Einfügen erforderlich).
root@kitploit:~
' ================================================================================
'                                ~~~ EINGEBETTETES PE ~~~
' ================================================================================

' VON PE2VBA GENERIERTER CODE
' ===== BEGINN PE2VBA =====
Private Function PE() As String
    Dim strPE As String
    strPE = ""
    PE = strPE
End Function
' ===== ENDE PE2VBA =====
  1. (Optional) Aktivieren Sie Ansicht > Direktfenster (Strg+G), um Ausführungs- und Fehlerprotokolle zu überprüfen.

  2. Führen Sie das Exploit-Makro aus!

/!\ Bei Verwendung eines eingebetteten PE wechselt das Makro automatisch in diesen Modus, da die Methode PE() einen nicht leeren String zurückgibt.

Bekannte Probleme

  • GetThreadContext() schlägt fehl mit Fehlercode 998.

Dieser Fehler kann auftreten, wenn Sie dieses Makro aus einer 64-Bit-Version von Office ausführen. Als Workaround können Sie den Code in ein Modul verschieben, anstatt ihn aus den Word-Objektverweisen auszuführen. Danke an @joeminicucci für den Tipp.

root@kitploit:~
================================================================================
[*] Quelldatei: 'C:\Windows\System32\cmd.exe'
[*] Überprüfung des Quell-PE...
[*] Erstellen eines neuen Prozesses im angehaltenen Zustand...
[*] Abrufen des Kontextes des Hauptthreads...
    |__ GetThreadContext() fehlgeschlagen (Fehler: 998)

Ich habe keine Ahnung, warum dieser Workaround momentan funktioniert. Ich habe das jedoch etwas untersucht. Dieser Fehler scheint dadurch verursacht zu werden, dass die CONTEXT-Struktur in der 64-Bit-Version nicht richtig ausgerichtet ist. Mir ist aufgefallen, dass die Größe der Struktur ebenfalls falsch ist ([VBA] LenB(CONTEXT) != [C++] sizeof(CONTEXT)), während sie in der 32-Bit-Version korrekt ist. Ich habe eine funktionierende Lösung, die ein korrektes Zurückgeben von GetThreadContext() ermöglicht, aber dann bricht sie andere Dinge im weiteren Verlauf der Ausführung.

Bearbeitung 15.12.2019: Die Definition der 64-Bit-Version der CONTEXT-Struktur war tatsächlich falsch, aber die Behebung hat den Fehler nicht behoben. Daher habe ich einen Workaround für die 64-Bit-Version implementiert. Ich habe das CONTEXT-Strukturargument der Funktionen GetThreadContext() und SetThreadContext() durch ein Byte-Array derselben Größe ersetzt.

Bearbeitung 17.12.2019: Ich habe das Problem endlich gefunden. Meine erste Annahme war richtig: Die CONTEXT-Struktur muss im Speicher 16-Byte-ausgerichtet sein. Das kann man in C mit align(16) in der Definition der Struktur steuern, aber in VBA kann man das nicht steuern. Daher können GetThreadContext() und SetThreadContext() "zufällig" fehlschlagen. Byte-Arrays hingegen scheinen immer 16-Byte-ausgerichtet zu sein, daher ist dieser Workaround effektiv, aber es gibt keine Garantie, es sei denn, ich reverse-engineere den VBA-Interpreter/Compiler und finde es heraus?!

  • LongPtr – Benutzerdefinierter Typ nicht definiert

Wenn Sie diesen Fehler erhalten, bedeutet dies, dass Sie das Makro aus einer alten Version von Office (<=2007) ausführen. Der Typ LongPtr wurde in VBA7 (Office 2010) zusammen mit der Unterstützung der 64-Bit-Windows-API eingeführt. Er ist sehr nützlich für die Handhabung von Zeigern, ohne sich um die Architektur (32-Bit/64-Bit) kümmern zu müssen.

Als Workaround können Sie alle Vorkommen von LongPtr durch Long (32-Bit) oder LongLong (64-Bit) ersetzen. Verwenden Sie Strg+H in Ihrem bevorzugten Texteditor.

Danksagungen

@hasherezade – Vollständige RunPE-Implementierung (https://github.com/hasherezade/)

@Zer0Mem0ry – 32-Bit-RunPE in C++ geschrieben (https://github.com/Zer0Mem0ry/RunPE)

@DidierStevens – PE-Einbettung in VBA

Sonstiges

Tests

Dieser Code wurde auf folgenden Plattformen getestet:

  • Windows 7 Pro 32 Bit + Office 2010 32 Bit
  • Windows 7 Pro 64 Bit + Office 2016 32 Bit
  • Windows 2008 R2 64 Bit + Office 2010 64 Bit
  • Windows 10 Pro 64 Bit + Office 2016 64 Bit

Randbemerkungen

Hier ist eine Tabelle der Entsprechungen einiger Win32- und VBA-Typen:

(*) LongPtr ist ein "dynamischer" Typ, er ist 4 Bytes lang in Office 32 Bit und 8 Bytes lang in Office 64 Bit. https://msdn.microsoft.com/fr-fr/library/office/ee691831(v=office.14).aspx

Tool herunterladen
C++VBAArch
BYTEByte32 & 64
WORDInteger32 & 64
DWORD, ULONG, LONGLong32 & 64
DWORD64LongLong64
HANDLELongPtr(*)32 & 64
LPSTRString32 & 64
LPBYTELongPtr(*)32 & 64