
Modularer WAF-Bypass-Fuzzer mit Multi-Threading, Request-Manipulation und Payload-Kodierung für Webanwendungstests durch Red Teams.
pFuzz ist ein fortgeschrittenes Fuzzing-Tool für Red Teaming, das wir für unsere Forschung entwickelt haben. Es hilft uns, Web Application Firewalls zu umgehen, indem es gleichzeitig verschiedene Methoden einsetzt.
pFuzz ist ein fortschrittliches Fuzzing-Tool, das wir für die Forschung an Webanwendungen entwickelt haben. Es wurde entwickelt, um den Prozess des Testens verschiedener Angriffsmethoden auf unterschiedliche Sicherheitsanwendungen zu beschleunigen.
pFuzz ist ein in Python entwickeltes Tool, das eine erweiterte Fuzzing-Funktionalität für die Forschung an Webanwendungen bietet. Da die Anwendung eine modulare Struktur hat, können neu gefundene/zu findende WAF-Umgehungsmethoden schnell zu pFuzz hinzugefügt und auf allen anderen WAFs getestet werden. Neben einer modularen Struktur wurden Multi-Threading, Multi-Processing und Queue-Strukturen verwendet, um das Tool flexibler zu machen, und die Infrastruktur für zukünftige Entwicklungen wurde geschaffen.
Das Tool ist so programmiert, dass eine gegebene Anfrage analysiert und einfach über ein Objekt geändert werden kann. Dank dieser Struktur können diejenigen, die die Anwendung entwickeln, leicht beitragen und das Tool entsprechend ihren eigenen Bedürfnissen weiterentwickeln, ohne die Kernstruktur der Anwendung ändern oder erlernen zu müssen.
Hinweis: Wenn Sie zur Entwicklung beitragen möchten, können Sie dies nicht nur durch die Entwicklung des Kerns (Core) von pFuzz tun, sondern auch durch das Hinzufügen neuer Module. Wir freuen uns auf neue PRs :)
pFuzz ist ein in Python entwickeltes Tool, das eine erweiterte Fuzzing-Funktionalität für die Forschung an Webanwendungen bietet. Da die Anwendung eine modulare Struktur hat, können neu gefundene/zu findende WAF-Umgehungsmethoden schnell zu pFuzz hinzugefügt und auf allen anderen WAFs getestet werden. Neben einer modularen Struktur wurden Multi-Threading, Multi-Processing und Queue-Strukturen verwendet, um das Tool flexibler zu machen, und die Infrastruktur für zukünftige Entwicklungen wurde geschaffen.
Das Tool ist so programmiert, dass eine gegebene Anfrage analysiert und einfach über ein Objekt geändert werden kann. Dank dieser Struktur können diejenigen, die die Anwendung entwickeln, leicht beitragen und das Tool entsprechend ihren eigenen Bedürfnissen weiterentwickeln, ohne die Kernstruktur der Anwendung ändern oder erlernen zu müssen.
Hinweis: Wenn Sie zur Entwicklung beitragen möchten, können Sie dies nicht nur durch die Entwicklung des Kerns (Core) tun, sondern auch durch das Hinzufügen neuer Module. Wir freuen uns auf Ihre neuen PRs :)
_____
_ __ | ___|_ _ ____ ____
| '_ \ | |_ | | | ||_ /|_ /
| |_) || _| | |_| | / / / /
| .__/ |_| \__,_|/___|/___|
|_|

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
...
Wenn Sie Ihre Payloads aus der Excel-Tabelle beziehen möchten, können Sie die getpayloads-Methoden aus modules.exparse verwenden.
from modules.exparse import getpayloads
getpayloads(fuzzsheetName, genericcolmnName, fuzzingpayloads)
# Fuzzing Module in static/statics.py
fuzzsheetName = 'Fuzzing'
genericcolmnName = 'Payload'
fuzzingpayloads = []
Jetzt können Sie Attribute nach Belieben ändern/hinzufügen/löschen.
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 |
| Ziel | Modul/Klasse | Funktion | Parameter(s) |
|---|
| Eine Anfrage senden | reqsender.py | sendit() | object |
| Ein Anfrageobjekt verwenden | reqparser.py/HTTPReq | getobj() | - |
| Einen benutzerdefinierten Header hinzufügen | reqparser.py/HTTPReq | OBJECT.addheader() | newHeadername,value |
| Einen Header löschen | reqparser.py/HTTPReq | OBJECT.delheader() | headerName |
| Einen Header ändern | reqparser.py/HTTPReq | OBJECT.changeheader() | headerName,newHeaderName |
| Eine Payload aus der Datei abrufen | exparse.py | getpayloads() | sheetName,columnName |
| Eine Log-Info/Debug/Warning schreiben | waflogger.py | loginfo/logdebug/logwarn() | logMessage |