
사용하고자 하는 네트워크 프로토콜 퍼저
█ █
████████
██████████
██ ████ ██
██ ████ ██
████ ████
█ ████████████ █
█ ██████████ █ Fuzzowski Network Fuzzer
█ █ █ █ 🄯 Fuzzers, inc.
██ ██ by Mario Rivas
아이디어는 우리가 사용하고 싶은 네트워크 프로토콜 퍼저가 되는 것입니다.
이 도구의 목표는 네트워크 프로토콜 퍼징의 전체 과정을 지원하고, 통신을 정의하며, 서비스를 충돌시키는 '용의자'를 식별하는 데 도움을 주는 등 다양한 기능을 제공하는 것입니다.
[16/12/2019]
virtualenv venv -p python3
source venv/bin/activate
pip install -r requirements.txt
usage: python -m fuzzowski [-h] [-p {tcp,udp,ssl}] [-b BIND] [-st SEND_TIMEOUT]
[-rt RECV_TIMEOUT] [--sleep-time SLEEP_TIME] [-nc] [-tn]
[-nr] [-nrf] [-cr]
[--threshold-request CRASH_THRESHOLD_REQUEST]
[--threshold-element CRASH_THRESHOLD_ELEMENT]
[--ignore-aborted] [--ignore-reset] [--error-fuzz-issues]
[-c CALLBACK | --file FILENAME] -f
{cops,dhcp,ipp,lpd,netconf,telnet_cli,tftp,raw}
[-r FUZZ_REQUESTS [FUZZ_REQUESTS ...]]
[--restart module_name [args ...]]
[--restart-sleep RESTART_SLEEP_TIME]
[--monitors {IPPMon} [{IPPMon} ...]] [--path PATH]
[--document_url DOCUMENT_URL]
host port
█ █
████████
██████████
██ ████ ██
██ ████ ██
████ ████
█ ████████████ █
█ ██████████ █ Fuzzowski Network Fuzzer
█ █ █ █ 🄯 Fuzzers, inc.
██ ██
필수 인수:
host 대상 호스트
port 대상 포트
선택적 인수:
-h, --help 이 도움말 메시지를 표시하고 종료
연결 옵션:
-p {tcp,udp,ssl}, --protocol {tcp,udp,ssl}
프로토콜 (기본값 tcp)
-b BIND, --bind BIND 포트 바인딩
-st SEND_TIMEOUT, --send_timeout SEND_TIMEOUT
send() 타임아웃 설정 (기본값 5초)
-rt RECV_TIMEOUT, --recv_timeout RECV_TIMEOUT
recv() 타임아웃 설정 (기본값 5초)
--sleep-time SLEEP_TIME
각 테스트 사이의 대기 시간 (기본값 0)
-nc, --new-conns 동일한 테스트의 각 패킷 후 새 연결 열기
-tn, --transmit-next-node
퍼징된 노드의 그래프에서 다음 노드 전송
RECV() 옵션:
-nr, --no-recv 각 전송 후 소켓에서 recv() 하지 않음
-nrf, --no-recv-fuzz 퍼징된 요청 전송 후 소켓에서 recv() 하지 않음
-cr, --check-recv recv() 에서 데이터 수신 확인
크래시 옵션:
--threshold-request CRASH_THRESHOLD_REQUEST
Request에서 허용되는 크래시 수를 설정한 후 건너뜁니다 (기본값 9999)
--threshold-element CRASH_THRESHOLD_ELEMENT
Primitive에서 허용되는 크래시 수를 설정한 후 건너뜁니다 (기본값 3)
--ignore-aborted ECONNABORTED 오류 무시
--ignore-reset ECONNRESET 오류 무시
--error-fuzz-issues 퍼징된 노드에 연결 문제가 있을 때 오류로 기록
퍼즈 옵션:
-c CALLBACK, --callback CALLBACK
일반 변형 대신 콜백 생성기로 퍼징할 콜백 주소 설정
--file FILENAME 퍼즈 변형에 파일 내용 사용
퍼저:
-f {cops,dhcp,ipp,lpd,netconf,telnet_cli,tftp,raw}, --fuzz {cops,dhcp,ipp,lpd,netconf,telnet_cli,tftp,raw}
사용 가능한 프로토콜
-r FUZZ_REQUESTS [FUZZ_REQUESTS ...], --requests FUZZ_REQUESTS [FUZZ_REQUESTS ...]
퍼징할 프로토콜의 요청, 기본값 모두
dhcp: [opt82]
ipp: [http_headers, get_printer_attribs, print_uri_message, send_uri, get_jobs, get_job_attribs]
lpd: [long_queue, short_queue, ctrl_file, data_file, remove_job]
telnet_cli: [commands]
tftp: [read]
raw: ['\x01string\n' '\x02request2\x00' ...]
재시작 옵션:
--restart module_name [args ...]
재시작 모듈:
run: '<실행 파일> [<인수> ...]' (명령과 인수를 하나의 인수로 묶어 따옴표 안에 전달)
smartplug: 스마트 플러그를 껐다가 켭니다
teckin: <PLUG_IP>
--restart-sleep RESTART_SLEEP_TIME
크래시 후 계속하기 전 대기 시간 설정 (기본값 5)
모니터 옵션:
--monitors {IPPMon} [{IPPMon} ...], -m {IPPMon} [{IPPMon} ...]
모니터 모듈:
IPPMon: 대상에 get-attributes IPP 메시지 전송
기타 옵션:
--path PATH HTTP 기반 프로토콜 퍼징 시 경로 설정 (기본값 /)
--document_url DOCUMENT_URL
print_uri를 위한 문서 URL 설정
기본 옵션으로 IPP get_printer_attribs 작업 퍼징:
python -m fuzzowski printer1 631 -f ipp -r get_printer_attribs --restart smartplug
IPP의 raw 기능을 사용하여 finger 프로토콜 퍼징:
python -m fuzzowski printer 79 -f raw -r '{{root}}\n'
IPP의 raw 기능을 사용하여 finger 프로토콜 퍼징, 하지만 미리 정의된 변형 대신 파일 사용:
python -m fuzzowski printer 79 -f raw -r '{{root}}\n' --file 'path/to/my/fuzzlist'
상태 저장 퍼저 예제: s_response와 s_variable을 사용하여 요청을 퍼징하는 데 필요한 토큰을 얻는 방법을 보여줍니다. 이 예제는 mock http server test case를 기반으로 합니다.