Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
haptyc — مكتبة بايثون لـ Turbo Intruder تضيف دعم موضع الحمولة وأنواع الهجوم Sniper/Clusterbomb/Pitchfork مع توليد اختبارات قائم على الوسوم لاختبار الاختراق عبر HTTP. | Kitploit
أدوات/GitHubGitHub/defparam/haptyc
توليد الحمولةأمن الويبالاختبار العشوائياختبار الاختراق
GitHubdefparam/haptyc

haptyc

مكتبة بايثون لـ Turbo Intruder تضيف دعم موضع الحمولة وأنواع الهجوم Sniper/Clusterbomb/Pitchfork مع توليد اختبارات قائم على الوسوم لاختبار الاختراق عبر HTTP.

عرض المستودع
9415منذ 4 سنواتتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة


Haptyc


إطار عمل لتوليد الاختبارات

tag

ما هو Haptyc؟

Haptyc هي مكتبة Python تم بناؤها لإضافة دعم مواقع الحمولات (Payload Positions) وأنواع الهجمات Sniper/Clusterbomb/Batteringram/Pitchfork إلى Turbo Intruder. بينما يحقق Haptyc هذه الأهداف بشكل جيد، فإنه يقدم أيضًا طريقة أبسط للتعبير عن تسلسلات الاختبار بشكل عام. على الرغم من أن هذه المكتبة صُممت لاستهداف Turbo Intruder، إلا أنها لا تعتمد بشكل صارم على Turbo Intruder ويمكن استخدامها في أي مكان يتطلب توليد اختبار في سياق Python. للأسف، في الوقت الحالي، نظرًا لأن Haptyc بُنيت لمفسر Jython، فهي تدعم فقط Python 2.7 (على الرغم من أن التغييرات المستقبلية ستعمل على إصلاح ذلك).

ما هي وسوم Haptyc (Haptyc tags)؟

وسوم Haptyc هي وسوم يمكن للمختبر استخدامها لتعليق حمولة إدخال أصلية. يمكن للمختبر استخدام وسوم متعددة لإحاطة أجزاء رئيسية من البيانات في طلب HTTP لتغليفها كحمولة موضعية. عند توليد الاختبارات، سيقوم Haptyc بتحليل جميع الوسوم في الحمولة الأصلية وتوليد اختبارات وفقًا للوظائف المرتبطة بأسماء الوسوم. عندما يقوم Haptyc بتقييم وسم Haptyc، فسينفذ وظيفة الوسم المرتبطة (تسمى هذه تحويل Haptyc) لحمولة اختبار لوضعها في موضع الوسم المقابل في الطلب. تستلم كل وظيفة وسم وسيطه data ووسيطه state. قد يحتوي وسيط data على البيانات الداخلية للوسم أو قد يحتوي على تسلسل حمولة اختبار آخر. وسيط state هو كائن حالة مرتبط بالوسم حيث يمكن تخزين الحالة بين تكرارات الاختبار. دعنا نستعرض مثالاً.

المثال 1: تكرار قائمة بسيط

الحمولة الأصلية:

root@kitploit:~
GET /animal/[+GuessAnimal]dog[+end] HTTP/1.1

فئة Haptyc وتحويل Haptyc:

root@kitploit:~
from haptyc import *

original = "GET /animal/[+GuessAnimal]dog[+end] HTTP/1.1"

class TestLogic(Transform):
	@ApplyList(["snake","cat","owl","lion"])
	def test_GuessAnimal(self, data, state):
		return data + "?original=" + self.inner() + "&attempt=" + str(state.iter)

TestFactory = TestLogic(original)
for test in TestFactory:
	print(test)

الاختبارات المولدة:

root@kitploit:~
GET /animal/snake?original=dog&attempt=0 HTTP/1.1
GET /animal/cat?original=dog&attempt=1 HTTP/1.1
GET /animal/owl?original=dog&attempt=2 HTTP/1.1
GET /animal/lion?original=dog&attempt=3 HTTP/1.1

في المثال أعلاه، نرى كيف يمكن التعبير عن الاختبارات بطريقة بسيطة باستخدام Haptyc. أولاً، يتم استيراد مكتبة Haptyc. ثانيًا، قمنا بتعريف البيانات الأصلية مع تعليقات وسوم Haptyc (GuessAnimal). بعد ذلك، يتم تعريف فئة TestLogic وتمديدها كفئة Transform. داخل هذه الفئة، يتم تسجيل كل طريقة تبدأ بـ test_ كوسم Haptyc للتقييم في الحمولة الأصلية. نستخدم مزخرف منطق (decorator) لتطبيق منطق الحالة لهذا التحويل Haptyc. في هذه الحالة، نستخدم المزخرف @ApplyList(list) لإخبار Haptyc بتوليد اختبار لكل عنصر في القائمة المحددة ووضع ذلك العنصر في تحويل Haptyc كوسيط data. داخل التحويل، نعيد نسخة مطفرة (mutated) من البيانات لإدراجها مرة أخرى في موضع الوسم. في هذه الحالة، يكون التحوير هو عنصر القائمة كبيانات متسلسلة مع البيانات المحاطة بالوسم (dog) ثم متسلسلة مع قيمة iter في كائن الحالة. أخيرًا، يظهر باقي كود Python إنشاء كائن TestFactory وتوليد جميع الاختبارات في حلقة for. هذا مثال على هجوم نمط Sniper القياسي الذي يستهدف موضع حمولة واحد. لنلق نظرة بعد ذلك على أنماط هجوم أخرى.

المثال 2: Clusterbomb

الحمولة الأصلية:

root@kitploit:~
GET /animal?type=[%type]dog[%end]&name=[%name]fido[%end] HTTP/1.1

فئة Haptyc وتحويل Haptyc:

root@kitploit:~
from haptyc import *

original = "GET /animal?type=[%type]dog[%end]&name=[%name]fido[%end] HTTP/1.1"

class TestLogic(Transform):
	@ApplyList("snake","cat","owl","lion")
	def test_type(self, data, state):
		return data
		
	@ApplyList("Frank", "Lisa", "Jin", "Tooth")
	def test_name(self, data, state):
		return data

TestFactory = TestLogic(original)
for test in TestFactory:
	print(test)

الاختبارات المولدة:

root@kitploit:~
GET /animal?type=snake&name=Frank HTTP/1.1
GET /animal?type=snake&name=Lisa HTTP/1.1
GET /animal?type=snake&name=Jin HTTP/1.1
GET /animal?type=snake&name=Tooth HTTP/1.1
GET /animal?type=cat&name=Frank HTTP/1.1
GET /animal?type=cat&name=Lisa HTTP/1.1
GET /animal?type=cat&name=Jin HTTP/1.1
GET /animal?type=cat&name=Tooth HTTP/1.1
GET /animal?type=owl&name=Frank HTTP/1.1
GET /animal?type=owl&name=Lisa HTTP/1.1
GET /animal?type=owl&name=Jin HTTP/1.1
GET /animal?type=owl&name=Tooth HTTP/1.1
GET /animal?type=lion&name=Frank HTTP/1.1
GET /animal?type=lion&name=Lisa HTTP/1.1
GET /animal?type=lion&name=Jin HTTP/1.1
GET /animal?type=lion&name=Tooth HTTP/1.1

أظهر المثال 1 كيفية تقييم التحويلات بنمط Sniper باستخدام علامة '+' في الوسم [+tag][+end]. يوضح المثال 2 كيف يمكننا استخدام تحويلين/موضعين لشن هجوم بنمط Clusterbomb. كما ترى، نستخدم وسطين تحويل منفصلين يسمى [%type][%end] و [%name][%end]. تخبر علامة '%' Haptyc بتقييم هذه التحويلات بنمط Clusterbomb، أي لكل حمولة في التحويل الأول يتم إنشاء اختبار مع الحمولة من التحويل الثاني. عدد الاختبارات هو عدد اختبارات كل تحويل مضروبًا في بعضها البعض.

المثال 3: Pitchfork/BatteringRam

باستخدام نفس كود Python تمامًا، يمكننا تغيير نمط الهجوم من Clusterbomb إلى Pitchfork عن طريق تغيير '%' إلى '#'. تضع هجمات نمط Pitchfork الحمولات الموضعية بالتوازي. عدد الاختبارات هو أقل عدد اختبارات بين جميع التحويلات المشاركة.

الحمولة الأصلية:

root@kitploit:~
GET /animal?type=[#type]dog[#end]&name=[#name]fido[#end] HTTP/1.1

الاختبارات المولدة:

root@kitploit:~
GET /animal?type=snake&name=Frank HTTP/1.1
GET /animal?type=cat&name=Lisa HTTP/1.1
GET /animal?type=owl&name=Jin HTTP/1.1
GET /animal?type=lion&name=Tooth HTTP/1.1

المثال 4: التحويلات الثابتة (Persistent Transforms)

الحمولة الأصلية:

root@kitploit:~
GET /animal?type=dog&id=[+idor]0[+end]&process=[@randbool]False[@end] HTTP/1.1

فئة Haptyc وتحويل Haptyc:

root@kitploit:~
from haptyc import *
import random

original = "GET /animal?type=dog&id=[+idor]0[+end]&process=[@randbool]False[@end] HTTP/1.1"

class TestLogic(Transform):
        @ApplyIteration(10)
        def test_idor(self, data, state):
                return str(state.iter)

        def per_randbool(self, data):
                return random.choice(["True", "False"])

TestFactory = TestLogic(original)
for test in TestFactory:
        print(test)

الاختبارات المولدة:

root@kitploit:~
GET /animal?type=dog&id=0&process=False HTTP/1.1
GET /animal?type=dog&id=1&process=True HTTP/1.1
GET /animal?type=dog&id=2&process=False HTTP/1.1
GET /animal?type=dog&id=3&process=True HTTP/1.1
GET /animal?type=dog&id=4&process=False HTTP/1.1
GET /animal?type=dog&id=5&process=True HTTP/1.1
GET /animal?type=dog&id=6&process=False HTTP/1.1
GET /animal?type=dog&id=7&process=True HTTP/1.1
GET /animal?type=dog&id=8&process=False HTTP/1.1
GET /animal?type=dog&id=9&process=False HTTP/1.1

التحويلات الثابتة يُشار إليها بعلامة '@' ووظائف التحويل تبدأ دائمًا بـ per_ لأن هذه التحويلات ليست تكرارية، فهي لا تنشئ اختبارات أو تحتفظ بحالة. هذه التحويلات هي مجرد تحويلات بسيطة (naive) يمكنك تطبيقها في أي مكان في الحمولة لتحويل بدون حالة دون التأثير على التحويلات الحافظه للحالة. نظرًا لأنها لا تفرض أي اختبارات، فلا يمكنك توليد اختبارات باستخدام التحويلات الثابتة وحدها، فهي مصممة ليتم خلطها مع التحويلات التكرارية. في المثال أعلاه، لدينا تحويل بنمط Snipe مكون من 10 اختبارات يضع معرفًا متزايدًا. لدينا أيضًا تحويل ثابت يضع قيمة منطقية عشوائية في موضعه.

المثال 5: استخدام state و state.init

قد تكون هناك حالات يرغب فيها المختبر في إجراء بعض المعالجة/التهيئة قبل بدء تسلسل الاختبار. لدعم ذلك، يقوم Haptyc بتنفيذ جميع التحويلات المشاركة لمرحلة تهيئة قبل تنفيذ التحويل لتوليد الاختبار. يمكن استخدام خطوة التهيئة لأداء أي تهيئة يطلبها المختبر ووضعها في كائن الحالة. لهذا، يمكن للمختبر استخدام state.init كقيمة منطقية لتحديد ما إذا كان التنفيذ في مرحلة التهيئة. سيتم تجاهل أي بيانات يتم إرجاعها من خطوة التهيئة.

الحمولة الأصلية:

root@kitploit:~
GET /animal?data=[+b64mutate]SGVsbG8gSGFja2VyIQ==[+end] HTTP/1.1

فئة Haptyc وتحويل Haptyc:

root@kitploit:~
from haptyc import *
import base64

original = "GET /animal?data=[+b64mutate]SGVsbG8gSGFja2VyIQ==[+end] HTTP/1.1"

class TestLogic(Transform):
        @ApplyIteration(10)
        def test_b64mutate(self, data, state):
                if state.init:
                        state.decoded = base64.b64decode(data)
                        return
                return base64.b64encode(random_insert(state.decoded, ["'"]))

TestFactory = TestLogic(original)
for test in TestFactory:
        print(test)

الاختبارات المولدة:

root@kitploit:~
GET /animal?data=SGVsbG8gSCdhY2tlciE= HTTP/1.1
GET /animal?data=SGVsbG8gSGFja2VyISc= HTTP/1.1
GET /animal?data=SGVsbG8gSGFjaydlciE= HTTP/1.1
GET /animal?data=SGVsbG8gSGEnY2tlciE= HTTP/1.1
GET /animal?data=SCdlbGxvIEhhY2tlciE= HTTP/1.1
GET /animal?data=SGVsbG8gSGFjaydlciE= HTTP/1.1
GET /animal?data=SGVsbG8gSGFja2VyISc= HTTP/1.1
GET /animal?data=SCdlbGxvIEhhY2tlciE= HTTP/1.1
GET /animal?data=SGVsbG8gSGFjJ2tlciE= HTTP/1.1
GET /animal?data=SGVsbG8gSGFjJ2tlciE= HTTP/1.1

في المثال أعلاه، يستخدم الاختبار state.init لفك تشفير base64 للحمولة الداخلية المغلفة مرة واحدة فقط في بداية تسلسل الاختبار وتخزين تلك النتيجة في state.decoded. ثم لجميع عمليات توليد الاختبار العادية، يتم استخدام state.decoded كالبيانات الداخلية المفككة ليتم معالجتها. هذا النوع من الأنماط مفيد لتحسين أداء التحويل نظرًا لأن عملية فك تشفير واحدة فقط تحدث في البداية (بدلاً من فك تشفير نفس الحمولة عند توليد كل اختبار).

التوثيق

أنواع الوسوم

  1. [+tag]inner[+end] - تحويل تكرار بنمط Sniper
  2. [%tag]inner[%end] - تحويل تكرار بنمط Clusterbomb
  3. [#tag]inner[#end] - تحويل تكرار بنمط Batteringram/Pitchfork
  4. [@tag]inner[@end] - تحويل ثابت بدون حالة

مزخرفات المنطق (Logic Decorators)

مزخرفات فئة Haptyc

الاسمالوسائطالوصف
@CloneTransform(srcname, destname)srcname=سلسلة لاسم طريقة تحويل للنسخ منها، destname=سلسلة لاسم تحويل غير موجود للنسخ إليهيُستخدم CloneTransform لنسخ تنفيذ تحويل واحد إلى مساحة اسم أخرى دون الحاجة إلى نسخ/لصق. هذا مفيد في هجمات نمط '%' و '#' عندما تحتاج إلى إعادة استخدام نفس تنفيذ التحويل في مواضع متعددة

طرق مساعدة لفئة Transform

الاسمالوصف
self.inner()يسترجع الحمولة الداخلية للوسم
self.stop()سيوقف فورًا توليد الاختبار لهذا التحويل

سمات الحالة المساعدة للتحويل

الاسمالوصف
state.iterعدد التكرارات الحالي للتحويل (يبدأ من 0)
state.initقيمة منطقية تشير إلى ما إذا كان في مرحلة التهيئة

دوال التحوير المساعدة

الاسمالوصف
radamsa(data)هذه الدالة تنفذ radamsa على بيانات الإدخال وتعيد نتيجتها (مطلوب تثبيت radamsa)
index_insert(data, list, index)هذه الدالة تقوم بإدراج حمولة من القائمة في البيانات المقدمة في الفهرس المحدد
random_insert(data, list)هذه الدالة تقوم بإدراج حمولة من القائمة في البيانات المقدمة في فهرس عشوائي

قوائم الكلمات المدمجة (Built-in Wordlists)

  • @ApplyPayloads("0-9")
  • @ApplyPayloads("10 letter words")
  • @ApplyPayloads("11 letter words")
  • @ApplyPayloads("12 letter words")
  • @ApplyPayloads("3 letter words")
  • @ApplyPayloads("4 letter words")
  • @ApplyPayloads("5 letter words")
  • @ApplyPayloads("6 letter words")
  • @ApplyPayloads("7 letter words")
  • @ApplyPayloads("8 letter words")
  • @ApplyPayloads("9 letter words")
  • @ApplyPayloads("a-z")
  • @ApplyPayloads("CGI scripts")
  • @ApplyPayloads("Directories - long")
  • @ApplyPayloads("Directories - short")
  • @ApplyPayloads("dirsearch")
  • @ApplyPayloads("Extensions - long")
  • @ApplyPayloads("Extensions - short")
  • @ApplyPayloads("Filenames - long")
  • @ApplyPayloads("Filenames - short")
  • @ApplyPayloads("Format strings")
  • @ApplyPayloads("Form field names - long")
  • @ApplyPayloads("Form field names - short")
  • @ApplyPayloads("Form field values")
  • @ApplyPayloads("Fuzzing - full")
  • @ApplyPayloads("Fuzzing - JSON_XML injection")
  • @ApplyPayloads("Fuzzing - out-of-band")
  • @ApplyPayloads("Fuzzing - path traversal")
  • @ApplyPayloads("Fuzzing - path traversal (single file)")
  • @ApplyPayloads("Fuzzing - quick")
  • @ApplyPayloads("Fuzzing - SQL injection")
  • @ApplyPayloads("Fuzzing - template injection")
  • @ApplyPayloads("Fuzzing - XSS")
  • @ApplyPayloads("HTTP headers")
  • @ApplyPayloads("HTTP verbs")
  • @ApplyPayloads("IIS files and directories")
  • @ApplyPayloads("Interesting files and directories")
  • @ApplyPayloads("Local files - Java")
  • @ApplyPayloads("Local files - Linux")
  • @ApplyPayloads("Local files - Windows")
  • @ApplyPayloads("Passwords")
  • @ApplyPayloads("Server-side variable names")
  • @ApplyPayloads("Short words")
  • @ApplyPayloads("SSRF targets")
  • @ApplyPayloads("User agents - long")
  • @ApplyPayloads("User agents - short")
  • @ApplyPayloads("Usernames")

كيفية التثبيت

هناك طريقتان لتثبيت Haptyc

  1. الطريقة السهلة باستخدام الإصدار turbo-intruder-all_w_haptyc.jar المرفق بهذا المستودع
  2. الطريقة اليدوية

أيًا كانت الطريقة التي تختارها، فإن هذه الإصدارات لا تتضمن radamsa، وإذا كنت تريد دعم radamsa فيجب عليك تثبيته من هذا المستودع: (اختياري) قم بتثبيت radamsa عبر https://gitlab.com/akihe/radamsa

كيفية التثبيت - المُعدّ مسبقًا (سهل)

  1. استنساخ هذا المستودع ولاحظ turbo-intruder-all_w_haptyc.jar في دليل الإصدارات
  2. افتح Burp
  3. اذهب إلى علامة التبويب Extender
  4. انقر على زر Add
  5. انقر على زر Select File ... واختر turbo-intruder-all_w_haptyc.jar

كيفية التثبيت - يدويًا (تحديث turbo-intruder-all.jar)

  1. استنساخ هذا المستودع
  2. في bash قم بتنفيذ ./install.sh <المسار المطلق الذي يحتوي على turbo-intruder-all.jar>
  3. في Burp قم بإعادة تحميل Turbo Intruder
تنزيل الأداة
الاسمالوسائطالإدخال dataالوصف
@ApplyIteration(n)n= عدد التكراراتالقيمة الداخلية لوسم haptycمنطق لتوليد N اختبار مع inner كـ data
@ApplyRange(b,e,s=1)b = قيمة البداية، e = القيمة القصوى، s = الخطوةالقيمة المولدة من النطاقمنطق لتوليد اختبار لكل قيمة يتم التدرج بها مع إعطاء القيمة كـ data
@ApplyList(L)L = قائمة Pythonعنصر القائمةمنطق لتوليد اختبار لكل قيمة في القائمة مع إعطاء القيمة كـ data
@ApplyFilelist(path)path = مسار نظام الملفاتعنصر القائمةمنطق لتوليد اختبار لكل قيمة في قائمة الملفات مع إعطاء القيمة كـ data
@ApplyPayloads(name)name = اسم قائمة مدمجةعنصر القائمةمنطق لتوليد اختبار لكل قيمة في القائمة المدمجة مع إعطاء القيمة كـ data
self.me()سيعيد اسم سياق التحويل الحالي
self.set_label(label)سيضع التسمية لهذا الاختبار الحالي
self.get_label(label)سيحصل على التسمية لهذا الاختبار الحالي