Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
VBA-RunPE — Un'implementazione VBA della tecnica RunPE o come bypassare l'application whitelisting. | Kitploit
Strumenti/GitHubGitHub/itm4n/vba-runpe
ExploitEvasione IDS/IPSPost-ExploitPenetration TestingRed TeamingSviluppo PayloadArchived
GitHubitm4n/vba-runpe

VBA-RunPE

Un'implementazione VBA della tecnica RunPE o come bypassare l'application whitelisting.

Vedi Repository
8151736 anni faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

VBA RunPE

Descrizione

Un'implementazione semplice ma efficace della tecnica RunPE in VBA. Questo codice può essere utilizzato per eseguire eseguibili dalla memoria di Word o Excel. È compatibile sia con le versioni a 32 bit che a 64 bit di Microsoft Office 2010 e successive.

Maggiori informazioni qui:
https://itm4n.github.io/vba-runpe-part1/
https://itm4n.github.io/vba-runpe-part2/

Win10_x64_Office2016_x64_PowerShell

Utilizzo 1 - File PE su disco

  1. Nella procedura Exploit alla fine del codice, imposta il percorso del file che desideri eseguire.
root@kitploit:~
strSrcFile = "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"

/!\ Se stai usando una versione a 32 bit di Microsoft Office su un sistema operativo a 64 bit, devi specificare i binari a 32 bit.

root@kitploit:~
strSrcFile = "C:\Windows\SysWOW64\cmd.exe"
strSrcFile = "C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe"
  1. Specifica gli argomenti della riga di comando (opzionale).
root@kitploit:~
strArguments = "-exec Bypass"

Questo verrà utilizzato per formare una riga di comando equivalente a:

root@kitploit:~
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -exec Bypass
  1. (Opzionale) Abilita Visualizza > Finestra Immediata (Ctrl+G) per controllare i log di esecuzione ed errori.

  2. Esegui la macro Exploit!

Utilizzo 2 - PE Incorporato

  1. Usa pe2vba.py per convertire un file PE in VBA. In questo modo, può essere direttamente incorporato nella macro.
root@kitploit:~
user@host:~/Tools/VBA-RunPE$ ./pe2vba.py meterpreter.exe 
[+] Created file 'meterpreter.exe.vba'.
  1. Sostituisci il seguente codice in RunPE.vba con il contenuto del file .vba generato nel passaggio precedente. Lo script Python converte il PE in VBA e applica automaticamente il template RunPE (non è necessario copiare/incollare manualmente).
root@kitploit:~
' ================================================================================
'                                ~~~ EMBEDDED PE ~~~
' ================================================================================

' CODE GENRATED BY PE2VBA
' ===== BEGIN PE2VBA =====
Private Function PE() As String
    Dim strPE As String
    strPE = ""
    PE = strPE
End Function
' ===== END PE2VBA =====
  1. (Opzionale) Abilita Visualizza > Finestra Immediata (Ctrl+G) per controllare i log di esecuzione ed errori.

  2. Esegui la macro Exploit!

/!\ Quando si utilizza un PE incorporato, la macro passerà automaticamente a questa modalità perché il metodo PE() restituirà una stringa non vuota.

Problemi noti

  • GetThreadContext() fallisce con codice errore 998.

Potresti ottenere questo errore se esegui questa macro da una versione a 64 bit di Office. Come soluzione alternativa, puoi spostare il codice in un modulo piuttosto che eseguirlo dai riferimenti dell'oggetto Word. Grazie a @joeminicucci per il suggerimento.

root@kitploit:~
================================================================================
[*] Source file: 'C:\Windows\System32\cmd.exe'
[*] Checking source PE...
[*] Creating new process in suspended state...
[*] Retrieving the context of the main thread...
    |__ GetThreadContext() failed (Err: 998)

Non ho idea del perché questa soluzione alternativa funzioni per il momento. L'ho comunque investigata un po'. Questo errore sembra essere causato dal fatto che la struttura CONTEXT non è allineata correttamente nella versione a 64 bit. Ho notato che anche la dimensione della struttura è errata ([VBA] LenB(CONTEXT) != [C++] sizeof(CONTEXT)) mentre va bene nella versione a 32 bit. Ho una soluzione funzionante che permette a GetThreadContext() di restituire correttamente, ma poi rompe altre cose durante l'esecuzione.

Modifica 2019-12-15: la definizione della versione a 64 bit della struttura CONTEXT era effettivamente errata, ma risolvere ciò non ha risolto il bug. Quindi, ho implementato una soluzione alternativa per la versione a 64 bit. Ho sostituito l'argomento della struttura CONTEXT delle funzioni GetThreadContext() e SetThreadContext() con un array Byte della stessa dimensione.

Modifica 2019-12-17: Ho finalmente trovato il problema. La mia prima ipotesi era corretta, la struttura CONTEXT deve essere allineata a 16 byte in memoria. Questo è qualcosa che puoi controllare in C usando align(16) nella definizione della struttura, ma non puoi controllarlo in VBA. Pertanto, GetThreadContext() e SetThreadContext() potrebbero fallire "casualmente". Gli array Byte d'altra parte sembrano essere sempre allineati a 16 byte, ecco perché questa soluzione alternativa è efficace ma non c'è garanzia, a meno che non faccia reverse engineering dell'interprete/compilatore VBA e lo capisca?!

  • LongPtr - Tipo definito dall'utente non definito

Se ricevi questo errore, significa che stai eseguendo la macro da una versione obsoleta di Office (<=2007). Il tipo LongPtr è stato introdotto in VBA7 (Office 2010) insieme al supporto dell'API Windows a 64 bit. È molto utile per gestire i puntatori senza doversi preoccupare dell'architettura (32 bit / 64 bit).

Come soluzione alternativa, puoi sostituire tutte le occorrenze di LongPtr con Long (a 32 bit) o LongLong (a 64 bit). Usa Ctrl+H nel tuo editor di testo preferito.

Crediti

@hasherezade - Implementazione completa di RunPE (https://github.com/hasherezade/)

@Zer0Mem0ry - RunPE a 32 bit scritto in C++ (https://github.com/Zer0Mem0ry/RunPE)

@DidierStevens - Incorporamento PE in VBA

Varie

Test

Questo codice è stato testato sulle seguenti piattaforme:

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

Note secondarie

Ecco una tabella di corrispondenza tra alcuni tipi Win32 e VBA:

(*) LongPtr è un tipo "dinamico", è lungo 4 byte in Office a 32 bit e 8 byte in Office a 64 bit. https://msdn.microsoft.com/fr-fr/library/office/ee691831(v=office.14).aspx

Scarica lo strumento
C++VBAArch
BYTEByte32 & 64
WORDInteger32 & 64
DWORD, ULONG, LONGLong32 & 64
DWORD64LongLong64
HANDLELongPtr(*)32 & 64
LPSTRString32 & 64
LPBYTELongPtr(*)32 & 64