
Carregador Python em memória para Beacon Object Files que executa payloads COFF, com suporte a argumentos empacotados/brutos para fluxos de trabalho de red-team e pós-exploração.
PyBOFcarregamento e execução em memória de BOFs
O PyBOF permite que o Python3 carregue Beacon Object Files via bytes e execute uma função BOF alvo em um interpretador 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")
Existem vários args que podem ser usados com o PyBOF; eles são descritos em mais detalhes abaixo.
Argumento posicional obrigatório que deve ser um objeto de bytes contendo o conteúdo bruto de um BOF.
Keyword arg opcional que é uma lista de argumentos a serem passados para a função BOF alvo.
Keyword arg opcional que é o nome formatado como string da função alvo a ser executada a partir do BOF fornecido; o padrão é go.
O keyword arg opcional é uma string que informa ao empacotador de argumentos do BOF os tipos de argumento conforme são empacotados no buffer. Isso é semelhante ao arg format do struct.pack. As únicas opções de formato válidas são as seguintes:
i para inteiro
s para short
z para string
b para binário
Z para wide
Pelo menos um tipo de formato deve ser fornecido para cada arg na lista de args. Este keyword arg não pode ser usado em conjunto com raw.
Keyword arg opcional que é um booleano: passa os args como uma string unida por espaços, sem empacotá-la, em vez de tentar empacotar argumentos formatados para a função BOF. Este keyword arg não pode ser usado em conjunto com format.
Clone este repositório
git clone https://github.com/rkbennett/pybof.git
Compile a extensão C _bof
cd pybof\src
python .\setup.py build
Copie o arquivo pyd resultante para o diretório bof
copy build\lib.win-xxx-cpython-3xx\_bof.cp3xx-win_xxxx.pyd ..\bof\
Mude o diretório para o pai do diretório bof, importe e divirta-se
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 uma função BOF não retornar um valor, eu emito um aviso alertando o usuário para o fato de que nada foi retornado. Presumo que isso provavelmente não seja o resultado pretendido de uma execução, mas não quis lançar erros graves. Se você executar uma função BOF e receber o aviso de nenhuma saída, lembre-se de que a formatação dos seus args pode precisar ser definida ou pode estar definida incorretamente, o que pode causar esse problema (especificamente usar string em vez de wide).