
모듈형 WAF 우회 퍼저로, 멀티스레딩, 요청 조작, 페이로드 인코딩을 지원하는 레드팀 웹 애플리케이션 테스트 도구입니다.
pFuzz는 우리의 연구를 위해 개발한 고급 레드 팀 퍼징 도구입니다. 동시에 다양한 방법을 사용하여 웹 애플리케이션 방화벽을 우회하는 데 도움을 줍니다.
pFuzz는 웹 애플리케이션 연구를 위해 개발한 고급 퍼징 도구입니다. 다양한 보안 애플리케이션에서 여러 공격 방법을 시도하는 과정을 가속화하기 위해 개발되었습니다.
pFuzz는 웹 애플리케이션 연구에서 고급 퍼징 기능을 갖추기 위해 Python 언어로 개발된 도구입니다. 애플리케이션은 모듈식 구조를 가지므로 새로 발견되거나 발견될 WAF 우회 방법을 pFuzz에 빠르게 추가하고 다른 모든 WAF에서 테스트할 수 있는 기능이 있습니다. 모듈식 구조 외에도 도구를 더 유연하게 만들기 위해 멀티스레딩, 멀티프로세싱, 큐 구조를 사용했으며, 향후 개발을 위한 기반이 마련되었습니다.
이 도구는 주어진 요청을 파싱하여 객체를 통해 쉽게 변경할 수 있도록 프로그래밍되었습니다. 이 구조 덕분에 애플리케이션을 개발할 사람들은 애플리케이션의 핵심 구조를 변경하지 않고 배울 필요 없이 쉽게 기여할 수 있고, 자신의 필요에 맞게 도구를 개발할 수 있습니다.
참고: 개발에 기여하고 싶다면 pFuzz를 개발하는 것뿐만 아니라 새 모듈을 추가하는 방식으로도 할 수 있습니다. 자유롭게 새 PR을 열어주세요 :)
pFuzz, 웹 애플리케이션 연구에서 고급 퍼징 기능을 갖추기 위해 Python 언어로 개발된 도구입니다. 애플리케이션은 모듈식 구조를 가지므로 새로 발견되거나 발견될 WAF 우회 방법을 pFuzz에 빠르게 추가하고 다른 모든 WAF에서 테스트할 수 있는 기능이 있습니다. 모듈식 구조 외에도 멀티스레딩, 멀티프로세싱, 큐와 같은 구조를 사용하여 도구를 더 유연하게 만들었고, 향후 개발을 위한 기반이 마련되었습니다.
애플리케이션은 주어진 요청을 파싱하여 객체를 통해 쉽게 변경할 수 있도록 프로그래밍되었습니다. 이 구조 덕분에 애플리케이션을 개발할 사람들은 애플리케이션의 핵심 구조를 변경하지 않고 배울 필요 없이 쉽게 기여할 수 있고, 자신의 필요에 맞게 애플리케이션을 개발할 수 있습니다.
참고: 개발에 기여하고 싶다면 핵심 '코어' 개발뿐만 아니라 새 모듈을 추가하는 방식으로도 할 수 있습니다. 새 PR을 기다리고 있습니다 :)
_____
_ __ | ___|_ _ ____ ____
| '_ \ | |_ | | | ||_ /|_ /
| |_) || _| | |_| | / / / /
| .__/ |_| \__,_|/___|/___|
|_|

sudo pip3 install virtualenv
python3 -m venv myvenv
source myvenv/bin/activate
pip3 install -r requirements.txt
python3 pfuzz.py --help
cffi==1.14.3
cryptography==3.1.1
numpy==1.19.2
pandas==1.1.3
pycparser==2.20
pyOpenSSL==19.1.0
python-dateutil==2.8.1
pytz==2020.1
six==1.15.0
xlrd==1.2.0
python3 pfuzz.py --help
python3 pfuzz.py -r request.txt -m
python3 pfuzz.py -r request.txt -cf
python3 pfuzz.py -r request.txt -f
python3 pfuzz.py -r request.txt -f --proxy 127.0.0.1:8080
python3 pfuzz.py -r request.txt -f -d 3
python3 pfuzz.py -r request.txt -f -s
python3 pfuzz.py -r request.txt -f -l
python3 pfuzz.py -r request.txt -f -e
python3 pfuzz.py -r request.txt -f -fe
python3 pfuzz.py -r request.txt -f -t 5
python3 pfuzz.py -r request.txt -f -o terminal
python3 pfuzz.py -r request.txt -f -od terminal
python3 pfuzz.py -r request.txt -f -o ~/Desktop/
python3 pfuzz.py -r request.txt -f -od ~/tmp/
_____
_ __ | ___|_ _ ____ ____
| '_ \ | |_ | | | ||_ /|_ /
| |_) || _| | |_| | / / / /
| .__/ |_| \__,_|/___|/___|
|_|
------------------------------------
@EmreOvunc | @merttasci | @xsuperbug
------------------------------------
v0.2.4
------------------------------------
usage: pfuzz.py [-h] [--request REQUEST] [--proxy PROXY] [--log] [--ssl]
[--threads THREADS] [--output OUTPUT] [--delay TIME]
[--output-details OUTPUT] [--full-encode] [--encode]
[--fuzz] [--charfuzz] [--manipulate] [--version]
optional arguments:
--help/-h show this help message and exit
--proxy/-p PROXY proxy [IP:PORT]
--log/-l enable logging
--ssl/-s enable ssl
--threads/-t NUMBER thread(s) number [default=1]
--version/-v show program's version number and exit
[Request Options]:
--request/-r REQUEST request file
--delay/-d TIME set a delay between requests [default=0.05]
--encode/-e encode space chars in uri/body
--full-encode/-fe encode all chars in uri/body
[Output Options]:
--output/-o OUTPUT output important info [terminal/folder name]
--output-details/-od OUTPUT
output all details [terminal/folder name]
[Modules]:
--fuzz/-f run fuzzing module
--charfuzz/-cf run char fuzzing module
--manipulate/-m run manipulating headers module
Usage: python3 pfuzz.py -r req.txt --log -s --fuzz -d 1 --encode -o terminal --threads 2
Usage: python3 pfuzz.py -r req.txt -f -l --proxy 127.0.0.1:8080 --output-details ~/output
- modules
- charfuzzer.py
- exparse.py
- fuzzer.py
- headeroperations.py
- manupilatingheaders.py
from reqparser import HTTPReq
myreq = HTTPReq.getobj()
...
myreq.uri
myreq.body
myreq.http
myreq.referer
myreq.origin
myreq.host
myreq.cookie
...
Excel에서 페이로드를 가져오려면 modules.exparse의 getpayloads 메서드를 사용할 수 있습니다.
from modules.exparse import getpayloads
getpayloads(fuzzsheetName, genericcolmnName, fuzzingpayloads)
# Fuzzing Module in static/statics.py
fuzzsheetName = 'Fuzzing'
genericcolmnName = 'Payload'
fuzzingpayloads = []
이제 원하는 대로 속성을 변경/추가/삭제할 수 있습니다.
myreq.uri = tmpuri + payload
myreq.addheader(header, "127.0.0.1")
myreq.content_type = "text/html"
from modules.exparse import getpayloads
for payload in fuzzingpayloads:
if payload == '#exitme#':
statics.exitCall = True
else:
[OPERATIONS]
from reqsender import sendit
sendit(myreq)
![]() Emre Övünç | ![]() Mert Taşçı | ![]() Evren Yalçın |
| 목적 | 모듈/클래스 | 함수 | 매개변수 |
|---|
| 요청 보내기 | reqsender.py | sendit() | object |
| 요청 객체 사용 | reqparser.py/HTTPReq | getobj() | - |
| 사용자 정의 헤더 추가 | reqparser.py/HTTPReq | OBJECT.addheader() | 새헤더이름,값 |
| 헤더 삭제 | reqparser.py/HTTPReq | OBJECT.delheader() | 헤더이름 |
| 헤더 변경 | reqparser.py/HTTPReq | OBJECT.changeheader() | 헤더이름,새헤더이름 |
| 파일에서 페이로드 가져오기 | exparse.py | getpayloads() | 시트이름,열이름 |
| 로그 정보/디버그/경고 기록 | waflogger.py | loginfo/logdebug/logwarn() | 로그메시지 |