
Fuzzer modular de bypass de WAF con múltiples hilos, manipulación de solicitudes y codificación de payloads para pruebas de aplicaciones web de red team.
pFuzz es una herramienta avanzada de fuzzing para el equipo rojo que desarrollamos para nuestra investigación. Nos ayuda a evadir firewalls de aplicaciones web utilizando diferentes métodos al mismo tiempo.
pFuzz es una herramienta avanzada de fuzzing que desarrollamos para investigaciones de aplicaciones web. Se ha desarrollado para acelerar el proceso de probar varios métodos de ataque en diferentes aplicaciones de seguridad.
pFuzz es una herramienta desarrollada en el lenguaje Python para tener capacidad avanzada de fuzzing en la investigación de aplicaciones web. Dado que la aplicación tiene una estructura modular, tiene la capacidad de añadir rápidamente métodos de evasión de WAF recién encontrados/por encontrar a pFuzz y probarlos en todos los demás WAF. Además de una estructura modular, se han utilizado estructuras como multi-hilo, multiprocesamiento y colas para hacer la herramienta más flexible, y se ha creado la infraestructura para futuros desarrollos.
La herramienta está programada para que una solicitud dada pueda ser analizada y modificada fácilmente a través de un objeto. Gracias a esta estructura, quienes desarrollen la aplicación podrán contribuir fácilmente y desarrollar la herramienta según sus propias necesidades sin cambiar la estructura central de la aplicación y sin tener que aprenderla.
Nota: Si deseas contribuir al desarrollo, no solo puedes hacerlo desarrollando pFuzz, sino también añadiendo nuevos módulos. ¡No dudes en abrir nuevos PR! :)
pFuzz es una herramienta desarrollada en Python para tener capacidad avanzada de fuzzing en investigaciones de aplicaciones web. Dado que la aplicación tiene una estructura modular, tiene la capacidad de añadir rápidamente métodos de evasión de WAF recién encontrados/por encontrar a pFuzz y probarlos en todos los demás WAF. Además de una estructura modular, se han utilizado estructuras como multi-hilo, multiprocesamiento y colas para hacer la herramienta más flexible, y se ha creado la infraestructura para futuros desarrollos.
La herramienta está programada para que una solicitud dada pueda ser analizada y modificada fácilmente a través de un objeto. Gracias a esta estructura, quienes desarrollen la aplicación podrán contribuir fácilmente y desarrollar la herramienta según sus propias necesidades sin cambiar la estructura central de la aplicación y sin tener que aprenderla.
Nota: Si deseas contribuir al desarrollo, no solo puedes hacerlo como desarrollo del núcleo 'core', sino también añadiendo nuevos módulos. ¡Esperamos tus nuevos 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
...
Si deseas obtener tus payloads desde el archivo Excel, puedes usar los métodos getpayloads de modules.exparse.
from modules.exparse import getpayloads
getpayloads(fuzzsheetName, genericcolmnName, fuzzingpayloads)
# Módulo de Fuzzing en static/statics.py
fuzzsheetName = 'Fuzzing'
genericcolmnName = 'Payload'
fuzzingpayloads = []
Ahora, puedes cambiar/añadir/eliminar los atributos como desees.
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:
[OPERACIONES]
from reqsender import sendit
sendit(myreq)
![]() Emre Övünç | ![]() Mert Taşçı | ![]() Evren Yalçın |
| Propósito | Módulo/Clase | Función | Parámetro(s) |
|---|
| Enviar una solicitud | reqsender.py | sendit() | object |
| Usar un objeto de solicitud | reqparser.py/HTTPReq | getobj() | - |
| Añadir una cabecera personalizada | reqparser.py/HTTPReq | OBJECT.addheader() | newHeadername,value |
| Eliminar una cabecera | reqparser.py/HTTPReq | OBJECT.delheader() | headerName |
| Cambiar una cabecera | reqparser.py/HTTPReq | OBJECT.changeheader() | headerName,newHeaderName |
| Obtener un payload del archivo | exparse.py | getpayloads() | sheetName,columnName |
| Escribir un registro info/debug/warning | waflogger.py | loginfo/logdebug/logwarn() | logMessage |