
PyJFuzz - أداة تشويش JSON بلغة بايثون

PyJFuzz هو إطار عمل صغير وقابل للتوسيع وجاهز للاستخدام يُستخدم لـ اختبار إدخالات JSON، مثل REST API لنقاط النهاية المحمولة، وتطبيقات JSON، والمتصفحات، والملفات القابلة للتنفيذ عبر CLI، وغير ذلك الكثير.
| الإصدار | 1.1.0 |
|---|---|
| الصفحة الرئيسية | http://www.mseclab.com/ |
| جيتهاب | https://github.com/mseclab/PyJFuzz |
| المؤلف | Daniele Linguaglossa (@dzonerzy) |
| الترخيص | MIT - (انظر ملف LICENSE) |
التبعيات
لكي يعمل PyJFuzz، يحتاج إلى بعض التبعيات: bottle, netifaces, GitPython و gramfuzz، يمكنك تثبيتها من خلال التثبيت التلقائي setup.py.
التثبيت
يمكنك تثبيت PyJFuzz بالأمر التالي
git clone https://github.com/mseclab/PyJFuzz.git && cd PyJFuzz && sudo python setup.py install
أداة CLI
بمجرد التثبيت، سينشئ PyJFuzz مكتبة بايثون وأداة سطر أوامر تُسمى pjf (لقطة شاشة أدناه)
المكتبة
يمكن أن يعمل PyJFuzz أيضًا كمكتبة، يمكنك استيرادها في مشروعك كما يلي
from pyjfuzz.lib import *
الفئات
الكائنات/الفئات المتاحة هي كما يلي:
أمثلة
فيما يلي بعض الأمثلة البسيطة حول كيفية تنفيذ برنامج يعمل بـ PyJFuzz
simple_fuzzer.py
from argparse import Namespace
from pyjfuzz.lib import *
config = PJFConfiguration(Namespace(json={"test": ["1", 2, True]}, nologo=True, level=6))
fuzzer = PJFFactory(config)
while True:
print fuzzer.fuzzed
custom_techniques.py
from argparse import Namespace
from pyjfuzz.lib import *
# يمكن تعريف التقنيات حسب المجموعة، أو حسب رقم التقنية
# المجموعات هي CHTPRSX، لفهم ما هي، يرجى تشغيل pyjfuzz مع المفتاح -h أو الاطلاع على لقطة شاشة سطر الأوامر
# هذا أدناه سيهيئ كائن config يستخدم فقط هجمات المجموعة P حيث P تعني Path Traversal
config = PJFConfiguration(Namespace(json={"test": ["1", 2, True]}, nologo=True, level=6, techniques="P"))
# بمجرد تعريف كائن config، يمكنك الوصول إلى config.techniques لعرض التقنيات المحددة لمجموعتك
print("معرفات التقنيات: {0}".format(str(config.techniques)))
# يمكنك تعديلها في النهاية!
config.techniques = [2]
# بهذه الطريقة، سيتم تنفيذ الهجوم رقم 2 فقط (هجوم LFI)!
fuzzer = PJFFactory(config)
while True:
print fuzzer.fuzzed
simple_server.py
from argparse import Namespace
from pyjfuzz.lib import *
config = PJFConfiguration(Namespace(json={"test": ["1", 2, True]}, nologo=True, level=6, debug=True, indent=True))
PJFServer(config).run()
قد تحتاج أحيانًا إلى تعديل الإعدادات القياسية غير القابلة للتخصيص مثل منفذ خادم HTTPS أو HTTP، يمكن القيام بذلك بالطريقة التالية
from argparse import Namespace
from pyjfuzz.lib import *
config = PJFConfiguration(Namespace(json={"test": ["1", 2, True]}, nologo=True, level=6, indent=True))
print config.ports["servers"]["HTTP_PORT"] # 8080
print config.ports["servers"]["HTTPS_PORT"] # 8443
print config.ports["servers"]["TCASE_PORT"] # 8888
config.ports["servers"]["HTTPS_PORT"] = 443 # تغيير منفذ HTTPS إلى 443
تذكر: عند تغيير المنافذ الافتراضية، يجب عليك دائمًا معالجة الاستثناءات بسبب الصلاحيات المطلوبة!
فيما يلي قائمة شاملة بجميع الإعدادات/التخصيصات المتاحة لكائن PJFConfiguration:
جدول التكوين
جدول التقنيات
فيما يلي بعض لقطات الشاشة فقط لتوضيح ما يمكن توقعه من PyJFuzz
يأتي PyJFuzz مزودًا بأداة مدمجة تُسمى PyJFuzz Web Fuzzer، توفر هذه الأداة وحدة تحكم تشويش تلقائية عبر خادم HTTP و HTTPS، ويمكن استخدامها لتشويش أي متصفح ويب تقريبًا بسهولة حتى عندما لا تستطيع التحكم في حالة العملية!
يوجد مفتاحان لاستخدام هذه الأداة (--browser-auto و --fuzz-web)، الأول يقوم بإعادة تشغيل المتصفح تلقائيًا عند حدوث تعطل، والآخر يحاول اكتشاف متى يتوقف المتصفح عن إرسال الطلبات. كلاهما يحفظ دائمًا حالات الاختبار، فيما يلي بعض لقطات الشاشة.
المشكلاتيرجى إرسال أي مشكلة هنا عبر GitHub وسأقوم بتوفير إصلاح في أسرع وقت ممكن.
فيما يلي قائمة بالمشكلات المعروفة التي وجدها PyJFuzz، سيتم تحديث القائمة أسبوعيًا
شكرًا لاستخدام PyJFuzz!
تشويش سعيد من mseclab
| الاسم | النوع | الوصف |
|---|---|---|
| json | dict | كائن JSON المراد تشويشه |
| json_file | str | المسار إلى ملف JSON |
| parameters | list<str> | قائمة المعلمات المراد تشويشها (مأخوذة من كائن JSON) |
| techniques | str<int> | سلسلة من الهجمات الممكّنة، تُستخدم لإنشاء JSON مشوش، مثل XSS, LFI إلخ. على سبيل المثال "CHPTRSX" (انظر جدول التقنيات) |
| level | int | مستوى التشويش في النطاق 0-6 |
| utf8 | bool | إذا كان صحيحًا، قم بالتبديل من تشفير unicode إلى تمثيل بايت نقي |
| indent | bool | تحديد ما إذا كان سيتم إضافة مسافة بادئة لكائن النتيجة |
| url_encode | bool | تحديد ما إذا كان سيتم ترميز URL للكائن الناتج |
| strong_fuzz | bool | تحديد ما إذا كان سيتم استخدام التشويش القوي (لن يحافظ التشويش القوي على بنية JSON، مفيد لتشويش المحلل اللغوي) |
| debug | bool | تحديد ما إذا كان سيتم تمكين طباعة التصحيح |
| exclude | bool | استبعاد المعلمات المحددة بواسطة خيار المعلمات من التشويش |
| notify | bool | تحديد ما إذا كان سيتم إخطار مراقب العملية عند حدوث تعطل، يُستخدم فقط مع PJFServer |
| html | str | المسار إلى دليل HTML لخدمته داخل PJFServer |
| ext_fuzz | bool | تحديد ما إذا كان سيتم استخدام ثنائي من "command" كمشوش خارجي |
| cmd_fuzz | bool | تحديد ما إذا كان سيتم استخدام ثنائي من "command" كهدف للمشوش |
| content_type | str | تعيين نوع المحتوى الناتج لـ PJFServer (الافتراضي application/json) |
| command | list<str> | الأمر المراد تنفيذه، كل معلمة هي عنصر في القائمة، يمكنك استخدام shlex.split من بايثون |
| الفهرس | الوصف |
|---|---|
| 0 | حقن XSS (متعدد اللغات) |
| 1 | حقن SQL (متعدد اللغات) |
| 2 | هجوم LFI |
| 3 | حقن SQL متعدد اللغات (2) |
| 4 | حقن XSS متعدد اللغات (2) |
| 5 | حقن RCE (متعدد اللغات) |
| 6 | هجوم LFI (2) |
| 7 | هجوم Data URI |
| 8 | هجوم LFI و HREF |
| 9 | حقن الترويسة (Header injection) |
| 10 | حقن RCE متعدد اللغات (2) |
| 11 | حقن قوالب عام (Generic template injection) |
| 12 | حقن قوالب Flask |
| 13 | هجوم الأحرف العشوائية |