
Загрузчик Beacon Object Files на Python, работающий в памяти и выполняющий COFF-пейлоады, с поддержкой упакованных/сырых аргументов для сценариев red-team и пост-эксплуатации.
PyBOFзагрузка и выполнение BOF в памяти
PyBOF позволяет Python3 загружать Beacon Object Files из байтов и выполнять целевую функцию BOF в интерпретаторе 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")
Существует несколько аргументов, которые можно использовать с PyBOF, они описаны более подробно ниже
Обязательный первый позиционный аргумент, который должен быть байтовым объектом, содержащим исходное содержимое BOF
Необязательный ключевой аргумент, представляющий собой список аргументов для передачи в целевую функцию BOF
Необязательный ключевой аргумент, представляющий собой строковое имя целевой функции для выполнения из предоставленного BOF; по умолчанию используется go
Необязательный ключевой аргумент — это строка, которая сообщает упаковщику аргументов BOF типы аргументов при их упаковке в буфер. Это похоже на аргумент format из struct.pack. Допустимы только следующие варианты формата:
i для целого числа
s для короткого целого
z для строки
b для двоичных данных
Z для широкой строки
Для каждого аргумента в списке args должен быть указан хотя бы один тип формата. Этот ключевой аргумент нельзя использовать вместе с raw
Необязательный ключевой аргумент — это логическое значение, которое передаёт args в виде строки, объединённой пробелами, без упаковки, вместо попытки упаковать форматированные аргументы для функции BOF. Этот ключевой аргумент нельзя использовать вместе с format
Склонируйте этот репозиторий
git clone https://github.com/rkbennett/pybof.git
Соберите C-расширение _bof
cd pybof\src
python .\setup.py build
Скопируйте полученный файл pyd в каталог bof
copy build\lib.win-xxx-cpython-3xx\_bof.cp3xx-win_xxxx.pyd ..\bof\
Перейдите в родительский каталог каталога bof, импортируйте и наслаждайтесь
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")
Если функция BOF не возвращает значение, я выдаю предупреждение, уведомляющее пользователя о том, что ничего не было возвращено. Я предполагаю, что это, скорее всего, не является ожидаемым результатом выполнения, но не хотел вызывать жёсткие ошибки. If you run a BOF function and receive the no output warning, keep in mind that your args formatting may need defined or may be defined incorrectly что может вызвать эту проблему (особенно при использовании string вместо wide)