
Fuzzer modulare per bypass WAF con multi-threading, manipolazione delle richieste e codifica dei payload per test di applicazioni web per red team.
pFuzz è uno strumento avanzato di fuzzing per red teaming sviluppato per la nostra ricerca. Ci aiuta a bypassare i web application firewall utilizzando diversi metodi contemporaneamente.
pFuzz è uno strumento di fuzzing avanzato che abbiamo sviluppato per la ricerca su applicazioni web. È stato sviluppato per accelerare il processo di test di diversi metodi di attacco su varie applicazioni di sicurezza.
pFuzz è uno strumento sviluppato in Python per avere capacità avanzate di fuzzing nella ricerca su applicazioni web. Poiché l'applicazione ha una struttura modulare, è in grado di aggiungere rapidamente nuovi metodi di bypass WAF trovati/da trovare a pFuzz e testarli su tutti gli altri WAF. Oltre a una struttura modulare, sono state utilizzate strutture come multi-threading, multi-processing e code per rendere lo strumento più flessibile e creare l'infrastruttura per sviluppi futuri.
Lo strumento è programmato in modo che una richiesta data possa essere analizzata e modificata facilmente tramite un oggetto. Grazie a questa struttura, coloro che svilupperanno l'applicazione potranno contribuire facilmente e sviluppare lo strumento in base alle proprie esigenze senza dover modificare la struttura principale dell'applicazione e senza doverla imparare.
Nota: Se vuoi contribuire allo sviluppo, puoi farlo non solo sviluppando pFuzz ma anche aggiungendo nuovi moduli. Sentiti libero di aprire nuove PR :)
pFuzz è uno strumento sviluppato in Python per avere capacità avanzate di fuzzing nella ricerca su applicazioni web. Poiché l'applicazione ha una struttura modulare, è in grado di aggiungere rapidamente nuovi metodi di bypass WAF trovati/da trovare a pFuzz e testarli su tutti gli altri WAF. Oltre a una struttura modulare, sono state utilizzate strutture come multi-threading, multi-processing e code per rendere lo strumento più flessibile e creare l'infrastruttura per sviluppi futuri.
Lo strumento è programmato in modo che una richiesta data possa essere analizzata e modificata facilmente tramite un oggetto. Grazie a questa struttura, coloro che svilupperanno l'applicazione potranno contribuire facilmente e sviluppare lo strumento in base alle proprie esigenze senza dover modificare la struttura principale dell'applicazione e senza doverla imparare.
Nota: Se vuoi contribuire allo sviluppo, puoi farlo non solo sviluppando il nucleo 'core', ma anche aggiungendo nuovi moduli. Aspettiamo le tue nuove 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 mostra questo messaggio di aiuto ed esci
--proxy/-p PROXY proxy [IP:PORT]
--log/-l abilita logging
--ssl/-s abilita ssl
--threads/-t NUMBER numero di thread [default=1]
--version/-v mostra il numero di versione del programma ed esci
[Opzioni Richiesta]:
--request/-r REQUEST file di richiesta
--delay/-d TIME imposta un ritardo tra le richieste [default=0.05]
--encode/-e codifica gli spazi nell'uri/body
--full-encode/-fe codifica tutti i caratteri nell'uri/body
[Opzioni Output]:
--output/-o OUTPUT output informazioni importanti [terminale/nome cartella]
--output-details/-od OUTPUT
output tutti i dettagli [terminale/nome cartella]
[Moduli]:
--fuzz/-f esegue il modulo di fuzzing
--charfuzz/-cf esegue il modulo di char fuzzing
--manipulate/-m esegue il modulo di manipolazione degli header
Esempio: python3 pfuzz.py -r req.txt --log -s --fuzz -d 1 --encode -o terminal --threads 2
Esempio: 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
...
Se vuoi ottenere i tuoi payload dal file Excel, puoi utilizzare i metodi getpayloads provenienti da modules.exparse.
from modules.exparse import getpayloads
getpayloads(fuzzsheetName, genericcolmnName, fuzzingpayloads)
# Modulo di Fuzzing in static/statics.py
fuzzsheetName = 'Fuzzing'
genericcolmnName = 'Payload'
fuzzingpayloads = []
Ora puoi modificare/aggiungere/eliminare attributi come desideri.
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:
[OPERAZIONI]
from reqsender import sendit
sendit(myreq)
![]() Emre Övünç | ![]() Mert Taşçı | ![]() Evren Yalçın |
| Scopo | Modulo/Classe | Funzione | Parametro(i) |
|---|
| Per inviare una richiesta | reqsender.py | sendit() | oggetto |
| Per utilizzare un oggetto richiesta | reqparser.py/HTTPReq | getobj() | - |
| Per aggiungere un header personalizzato | reqparser.py/HTTPReq | OBJECT.addheader() | nomeNuovoHeader,valore |
| Per eliminare un header | reqparser.py/HTTPReq | OBJECT.delheader() | nomeHeader |
| Per modificare un header | reqparser.py/HTTPReq | OBJECT.changeheader() | nomeHeader,nomeNuovoHeader |
| Per ottenere un payload dal file | exparse.py | getpayloads() | nomeFoglio,nomeColonna |
| Per scrivere un log info/debug/warning | waflogger.py | loginfo/logdebug/logwarn() | messaggioLog |