
Python module for running BOFs
PyBOFchargement et exécution en mémoire des BOFs
PyBOF permet à Python3 de charger des fichiers Beacon Object via des octets et d'exécuter une fonction BOF cible dans un interpréteur 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")
Plusieurs arguments peuvent être utilisés avec PyBOF, ils sont décrits plus en détail ci-dessous
Argument positionnel obligatoire qui doit être un objet octet contenant le contenu brut d'un BOF
Argument nommé facultatif qui est une liste d'arguments à transmettre à la fonction BOF cible
Argument nommé facultatif qui est le nom sous forme de chaîne de la fonction cible à exécuter à partir du BOF fourni, il est défini par défaut sur go
Argument nommé facultatif qui est une chaîne indiquant au packer d'arguments du BOF les types d'arguments tels qu'ils sont empaquetés dans le tampon. C'est similaire à l'argument format de struct.pack. Les seules options de format valides sont les suivantes :
i pour entier
s pour short
z pour chaîne
b pour binaire
Z pour chaîne large
Au moins un type de format doit être fourni pour chaque argument de la liste args. Cet argument nommé ne peut pas être utilisé conjointement avec raw
Argument nommé facultatif qui est un booléen transmettant les arguments sous forme de chaîne jointe par des espaces sans les empaqueter, au lieu de tenter d'empaqueter les arguments formatés pour la fonction BOF. Cet argument nommé ne peut pas être utilisé conjointement avec format
Clonez ce dépôt
git clone https://github.com/rkbennett/pybof.git
Compilez l'extension C _bof
cd pybof\src
python .\setup.py build
Copiez le fichier pyd résultant dans le répertoire bof
copy build\lib.win-xxx-cpython-3xx\_bof.cp3xx-win_xxxx.pyd ..\bof\
Déplacez-vous dans le répertoire parent du répertoire bof, importez et amusez-vous
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")
Si une fonction BOF ne renvoie pas de valeur, je lève un avertissement informant l'utilisateur que rien n'a été retourné. Je suppose que ce n'est probablement pas le résultat attendu d'une exécution, mais je ne voulais pas lever d'erreurs fatales. Si vous exécutez une fonction BOF et recevez l'avertissement de sortie vide, gardez à l'esprit que le formatage de vos arguments doit peut-être être défini ou peut être défini incorrectement, ce qui peut causer ce problème (notamment si vous utilisez une chaîne au lieu d'une chaîne large)