
Модульный фаззер для обхода WAF с поддержкой многопоточности, манипуляции запросами и кодирования полезной нагрузки для тестирования веб-приложений «красной команды».
pFuzz — это продвинутый инструмент фаззинга для Red Teaming, разработанный для наших исследований. Он помогает обходить веб-файрволы, используя одновременно различные методы.
pFuzz — это продвинутый инструмент фаззинга, разработанный для исследований веб-приложений. Он создан для ускорения процесса тестирования различных методов атак на разных механизмах безопасности.
pFuzz — это инструмент, написанный на Python, предназначенный для продвинутого фаззинга в исследованиях веб-приложений. Благодаря модульной структуре, в pFuzz можно быстро добавлять новые (как уже найденные, так и будущие) методы обхода WAF и тестировать их на всех остальных WAF. Помимо модульности, для повышения гибкости инструмента используются многопоточность, многопроцессорность и очереди; создана инфраструктура для будущих улучшений.
Инструмент спроектирован таким образом, что переданный запрос можно разобрать и легко изменить через объект. Благодаря этой структуре разработчики смогут легко вносить вклад и дорабатывать инструмент под свои нужды, не изменяя ядро приложения и не изучая его досконально.
Примечание: Если вы хотите внести свой вклад в разработку, вы можете сделать это не только дорабатывая ядро pFuzz, но и добавляя новые модули. Не стесняйтесь открывать новые PR :)
pFuzz — это инструмент, разработанный на Python для обеспечения продвинутых возможностей фаззинга при исследовании веб-приложений. Благодаря модульной структуре, в pFuzz можно быстро добавлять новые (как уже найденные, так и будущие) методы обхода WAF и тестировать их на всех остальных WAF. Помимо модульности, для повышения гибкости инструмента используются многопоточность, многопроцессорность и очереди; создана инфраструктура для будущих улучшений.
Инструмент спроектирован таким образом, что переданный запрос можно разобрать и легко изменить через объект. Благодаря этой структуре разработчики смогут легко вносить вклад и дорабатывать инструмент под свои нужды, не изменяя ядро приложения и не изучая его досконально.
Примечание: Если вы хотите внести свой вклад в разработку, вы можете сделать это не только через разработку ядра (core), но и добавляя новые модули. Ждём ваших новых 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, вы можете использовать методы getpayloads из modules.exparse.
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() | объект |
| Использовать объект запроса | reqparser.py/HTTPReq | getobj() | - |
| Добавить собственный заголовок | reqparser.py/HTTPReq | OBJECT.addheader() | имя_нового_заголовка,значение |
| Удалить заголовок | reqparser.py/HTTPReq | OBJECT.delheader() | имя_заголовка |
| Изменить заголовок | reqparser.py/HTTPReq | OBJECT.changeheader() | имя_заголовка,новое_имя |
| Получить полезную нагрузку из файла | exparse.py | getpayloads() | имя_листа,имя_столбца |
| Записать лог (info/debug/warning) | waflogger.py | loginfo/logdebug/logwarn() | сообщение_лога |