
pFuzzは、私たちが研究用に開発した高度なレッドチームファジングツールです。異なる手法を同時に使用することで、Webアプリケーションファイアウォールをバイパスするのに役立ちます。
pFuzzは、Webアプリケーション研究のために開発した高度なファジングツールです。さまざまなセキュリティアプリケーション上で多様な攻撃手法を試すプロセスを高速化するために開発されました。
pFuzzは、Webアプリケーション研究において高度なファジング機能を実現するためにPython言語で開発されたツールです。アプリケーションはモジュラー構造を持っているため、新しく発見された/発見されるであろうWAFバイパス手法をpFuzzに迅速に追加し、他のすべてのWAFでテストする機能を備えています。モジュラー構造に加え、マルチスレッド、マルチプロセス、キュー構造を使用してツールをより柔軟にし、将来の開発のための基盤が構築されています。
このツールは、与えられたリクエストを解析し、オブジェクトを介して簡単に変更できるようにプログラムされています。この構造により、アプリケーションを開発する人は、アプリケーションのコア構造を変更したり学んだりすることなく、簡単に貢献でき、自分のニーズに合わせてアプリケーションを開発することができます。
注記: 開発に貢献したい場合は、pFuzzのコア開発だけでなく、新しいモジュールを追加することでも貢献できます。 お気軽に新しいPRを開いてください :)
pFuzz、Webアプリケーション研究において高度なファジング能力を持つために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)
| 目的 | モジュール/クラス | 関数 | パラメータ |
|---|
| リクエストを送信する | 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() | シート名,列名 |
| ログ情報/デバッグ/警告を書き込む | waflogger.py | loginfo/logdebug/logwarn() | ログメッセージ |