
Esegui eseguibili Windows non gestiti nei Beacon di CobaltStrike
Inline-Execute-PE è una suite di file oggetto Beacon (BOF) e un corrispondente script Aggressor per CobaltStrike che consente agli Operatori di caricare eseguibili Windows non gestiti nella memoria del Beacon ed eseguirli, recuperando l'output e visualizzandolo nella console del Beacon.
Questo consente agli Operatori di utilizzare molti strumenti di terze parti (Mimikatz, Dsquery, strumenti Sysinternals, ecc.) senza doverli scrivere su disco, riformattarli in codice indipendente dalla posizione usando uno strumento come Donut, o creare un nuovo processo per eseguirli.
Questi eseguibili vengono mappati nella memoria del Beacon in modo da poter essere eseguiti ripetutamente senza doverli inviare sulla rete, allocare nuova memoria e creare un nuovo processo conhost.exe ogni volta.
Gli eseguibili caricati nei Beacon sono accessibili e possono essere eseguiti da tutti i client CobaltStrike connessi al Team Server di CobaltStrike.
Inline-Execute-PE è stato progettato per Beacon x64 ed eseguibili Windows C o C++ x64 compilati con Mingw o Visual Studio. Questo progetto non supporta eseguibili x86 o eseguibili x64 scritti in un linguaggio diverso o compilati con un compilatore diverso.

Clona il repository ed esegui opzionalmente make per ricompilare i BOF.
Carica Inline-Execute-PE.cna nel client CobaltStrike. Assicurati che la directory in cui è in esecuzione CobaltStrike sia scrivibile dal tuo utente; Inline-Execute-PE crea lì un file di testo (petable.txt) per garantire la disponibilità dei dati necessari al funzionamento di Inline-Execute-PE.
Inline-Execute-PE comprende 3 comandi orientati al target che eseguono BOF e 3 comandi interni che manipolano la struttura dati del progetto:
Orientati al target:
Struttura dati interna:
peload è l'inizio di Inline-Execute-PE. Questo comando viene utilizzato per caricare un PE nella memoria del Beacon. Esegue le seguenti azioni principali:
perun è il secondo passo di Inline-Execute-PE. Esegue le seguenti azioni principali:
peunload viene chiamato per rimuovere il PE dalla memoria del Beacon quando un Operatore ha finito o desidera caricare un PE diverso. Esegue le seguenti azioni principali:
petable viene utilizzato per visualizzare informazioni riguardanti tutti i PE attualmente caricati nei Beacon.
Ogni client CobaltStrike ha il proprio petable; Inline-Execute-PE fa di tutto per garantire la sincronizzazione dei suoi dati tra tutti i client CobaltStrike connessi in modo che i PE possano essere utilizzati da tutti gli Operatori. Per maggiori informazioni, vedi "Considerazioni progettuali e commento".

peconfig viene utilizzato per configurare le opzioni relative al funzionamento di Inline-Execute-PE. Le due opzioni attuali che possono essere modificate sono:
pebroadcast può essere utilizzato per trasmettere manualmente il contenuto del petable di un client a tutti gli altri client CobaltStrike connessi.
Ogni altro client CobaltStrike aggiornerà il proprio petable con i dati trasmessi. Non dovrebbe mai essere realmente necessario, ma la funzione esiste per sicurezza.
Usa peload per caricare un PE nella memoria del Beacon

In alternativa, se c'è un PE sulla macchina target che vuoi usare senza creare un nuovo processo, fornisci il percorso e lo switch --local

Chiama perun, passando eventuali argomenti al PE caricato

I doppi apici negli argomenti devono essere escaped con backslash

Se hai identificato che un PE causa problemi quando si tenta di liberare le DLL durante lo scaricamento, usa peconfig per impostare unloadlibraries su false

Una volta che hai finito di usare un PE, chiama peunload per pulirlo dal Beacon

Un PE diverso ora può essere caricato nel Beacon
