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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
JAW — JAW: إطار تحليل أمني قائم على الرسوم البيانية لجافا سكريبت من جانب العميل | Kitploit
أدوات/GitHubGitHub/soheilkhodayari/jaw
التحليل الثابتالتحليل الديناميكي (عزل)تحليل الثغرات الأمنيةتحليل الكودأمن الويباختبار الاختراقزاحف الويبأمن قواعد البيانات
GitHubsoheilkhodayari/jaw

JAW

JAW: إطار تحليل أمني قائم على الرسوم البيانية لجافا سكريبت من جانب العميل

عرض المستودع
11821منذ 6 أشهرتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

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

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

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

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

JAW

جيه إيه دبليو

الموقع الإلكتروني | الوثائق | الإعداد | الزاحف | بداية سريعة دوكر (مثال)

جيه إيه دبليو

Node Platform Open Source Love Tweet

إطار عمل مفتوح المصدر، ونموذج أولي لرسوم الخصائص البيانية (property graphs) للجافا سكريبت استناداً إلى محلل esprima، ومواصفات EsTree SpiderMonkey. يمكن استخدام JAW لتحليل الجانب العميل من تطبيقات الويب والبرامج المستندة إلى JavaScript.

هذا المشروع مرخص بموجب GNU AFFERO GENERAL PUBLIC LICENSE V3.0. راجع هنا لمزيد من المعلومات.

يحتوي JAW على موقع إلكتروني على صفحات Github متاح على https://soheilkhodayari.github.io/JAW/.

ملاحظات الإصدارات:

  • سبتمبر 2025، JAW-v5: دعم اكتشاف أدوات DOM gadget عبر هذا fork.
  • ديسمبر 2024، JAW-v4: تم تحديث JAW مع استعلامات اكتشاف إعادة التوجيه المفتوحة.
  • أكتوبر 2023، JAW-v3 (Sheriff): تم تحديث JAW لاكتشاف ثغرات اختراق الطلب من جانب العميل.
  • يوليو 2022، JAW-v2 (TheThing): تم تحديث JAW إلى إصداره الرئيسي التالي مع القدرة على اكتشاف ثغرات DOM Clobbering. راجع فرع JAW-V2.
  • ديسمبر 2020، JAW-v1: الإصدار النموذجي الأول. راجع فرع JAW-V1.

المحتويات

نظرة عامة على JAW

  1. مدخلات الاختبار
  2. جمع البيانات
  3. بناء HPG
  4. التحليل والمخرجات

الإعداد

  1. التثبيت

بداية سريعة

  1. تشغيل خط الأنابيب
  2. مثال سريع
  3. الزحف وجمع البيانات
    • واجهة سطر الأوامر Playwright مع Foxhound
    • الزاحف المستند إلى Puppeteer
    • الزاحف المستند إلى Selenium
  4. بناء الرسم البياني
    • واجهة سطر الأوامر لبناء HPG
    • واجهة سطر الأوامر لاستيراد HPG
  5. التحليل الأمني
    • تشغيل عمليات اجتياز الرسم البياني المخصصة
    • اكتشاف الثغرات الأمنية
  6. تطبيق ويب للاختبار

معلومات إضافية

  1. توثيق مفصل
  2. المساهمة ومدونة السلوك
  3. المنشورات الأكاديمية

نظرة عامة على JAW

هندسة JAW موضحة أدناه.

مدخلات الاختبار

يمكن استخدام JAW بطريقتين مختلفتين:

  1. تحليل جافا سكريبت عشوائي: استخدم JAW لنمذجة وتحليل أي برنامج جافا سكريبت عن طريق تحديد path (مسار) نظام الملفات للبرنامج.

  2. تحليل تطبيق ويب: تحليل تطبيق ويب من خلال توفير عنوان URL بذرة واحد.

جمع البيانات

  • يتميز JAW بالعديد من زاحفات الويب الممكّنة لجافا سكريبت لجمع موارد الويب على نطاق واسع.

بناء HPG

  • استخدم موارد الويب التي تم جمعها لإنشاء رسم بياني للبرنامج الهجين (HPG)، والذي سيتم استيراده إلى قاعدة بيانات Neo4j.

  • اختيارياً، قم بتزويد وحدة بناء HPG بتعيين من الأنواع الدلالية (semantic types) إلى رموز لغة جافا سكريبت المخصصة، مما يسهل تصنيف دوال جافا سكريبت بناءً على غرضها (على سبيل المثال، دوال طلبات HTTP).

التحليل والمخرجات

  • استعلم عن قاعدة بيانات الرسم البياني Neo4j التي تم بناؤها لإجراء تحليلات متنوعة. يقدم JAW عمليات اجتياز مساعدة لتحليل تدفق البيانات، وتحليل تدفق التحكم، وتحليل الوصول، ومطابقة الأنماط. يمكن استخدام هذه العمليات لتطوير تحليلات أمنية مخصصة.

  • يتضمن JAW أيضاً عمليات اجتياز مدمجة لاكتشاف ثغرات CSRF من جانب العميل، و DOM Clobbering واختراق الطلبات.

  • سيتم تخزين المخرجات في نفس مجلد الإدخال.

الإعداد

يعتمد نص التثبيت على المتطلبات الأساسية التالية:

  • أحدث إصدار من npm package manager (node js)
  • أي إصدار مستقر من python 3.x
  • مدير حزم Python pip

بعد ذلك، قم بتثبيت التبعيات اللازمة عبر:

root@kitploit:~
$ ./install.sh

للحصول على تعليمات تثبيت مفصلة، يرجى الاطلاع هنا.

بداية سريعة

تشغيل خط الأنابيب

يمكنك تشغيل مثيل من خط الأنابيب في شاشة خلفية عبر:

root@kitploit:~
$ python3 -m run_pipeline --conf=config.yaml

توفر واجهة سطر الأوامر الخيارات التالية:

root@kitploit:~
$ python3 -m run_pipeline -h

usage: run_pipeline.py [-h] [--conf FILE] [--site SITE] [--list LIST] [--from FROM] [--to TO]

This script runs the tool pipeline.

optional arguments:
  -h, --help            show this help message and exit
  --conf FILE, -C FILE  pipeline configuration file. (default: config.yaml)
  --site SITE, -S SITE  website to test; overrides config file (default: None)
  --list LIST, -L LIST  site list to test; overrides config file (default: None)
  --from FROM, -F FROM  the first entry to consider when a site list is provided; overrides config file (default: -1)
  --to TO, -T TO        the last entry to consider when a site list is provided; overrides config file (default: -1)

تكوين الإدخال: يتوقع JAW ملف تكوين .yaml كإدخال. راجع config.yaml للحصول على مثال.

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

مثال سريع

لتشغيل مثال سريع يوضح كيفية بناء رسم بياني للخصائص وتشغيل استعلامات Cypher عليه، قم بما يلي:

root@kitploit:~
$ python3 -m analyses.example.example_analysis --input=$(pwd)/data/test_program/test.js

الزحف وجمع البيانات

تقوم هذه الوحدة بجمع البيانات (أي كود جافا سكريبت وقيم حالة صفحات الويب) اللازمة للاختبار. إذا كنت تريد اختبار ملف جافا سكريبت محدد لديك بالفعل على نظام الملفات الخاص بك، يمكنك تخطي هذه الخطوة.

يحتوي JAW على زاحفات تعتمد على Selenium (JAW-v1)، و Puppeteer (JAW-v2, v3) و Playwright (JAW-v3). للحصول على أحدث الميزات، يوصى باستخدام الإصدارات المستندة إلى Puppeteer أو Playwright.

واجهة سطر الأوامر Playwright مع Foxhound

يستخدم زاحف الويب هذا foxhound، وهو إصدار معدّل من Firefox، لأداء تتبع التلوث الديناميكي (dynamic taint tracking) أثناء تنقله عبر صفحات الويب. لبدء الزاحف، قم بما يلي:

root@kitploit:~
$ cd crawler
$ node crawler-taint.js --seedurl=https://google.com --maxurls=100 --headless=true --foxhoundpath=<optional-foxhound-executable-path>

يتم تعيين foxhoundpath افتراضياً إلى الدليل التالي: crawler/foxhound/firefox والذي يحتوي على ثنائي باسم firefox.

ملاحظة: تحتاج إلى بناء foxhound لاستخدام هذا الإصدار. يتم تضمين بناء أوبونتو في إصدار JAW-v3.

واجهة سطر الأوامر Puppeteer

لبدء الزاحف، قم بما يلي:

root@kitploit:~
$ cd crawler
$ node crawler.js --seedurl=https://google.com --maxurls=100 --browser=chrome --headless=true

انظر هنا لمزيد من المعلومات.

واجهة سطر الأوامر Selenium

لبدء الزاحف، قم بما يلي:

root@kitploit:~
$ cd crawler/hpg_crawler
$ vim docker-compose.yaml # قم بتعيين مواقع الويب التي تريد الزحف إليها هنا واحفظ
$ docker-compose build
$ docker-compose up -d

يرجى الرجوع إلى توثيق hpg_crawler هنا لمزيد من المعلومات.

بناء الرسم البياني

واجهة سطر الأوامر لبناء HPG

لإنشاء HPG لمجموعة (مجموعات) من ملفات جافا سكريبت، قم بما يلي:

root@kitploit:~
$ node engine/cli.js  --lang=js --graphid=graph1 --input=/in/file1.js --input=/in/file2.js --output=$(pwd)/data/out/ --mode=csv

optional arguments:
  --lang: 	لغة برنامج الإدخال
  --graphid:  معرف لـ HPG الذي تم إنشاؤه
  --input: 	مسار برنامج (برامج) الإدخال
  --output: 	مسار HPG الناتج، يجب أن يكون i
  --mode: 	يحدد تنسيق الإخراج (csv أو graphML)

واجهة سطر الأوامر لاستيراد HPG

لاستيراد HPG داخل قاعدة بيانات رسوم بيانية neo4j (مثيل docker)، قم بما يلي:

root@kitploit:~
$ python3 -m hpg_neo4j.hpg_import --rpath=<path-to-the-folder-of-the-csv-files> --id=<xyz> --nodes=<nodes.csv> --edges=<rels.csv>
$ python3 -m hpg_neo4j.hpg_import -h

usage: hpg_import.py [-h] [--rpath P] [--id I] [--nodes N] [--edges E]

This script imports a CSV of a property graph into a neo4j docker database.

optional arguments:
  -h, --help  show this help message and exit
  --rpath P   relative path to the folder containing the graph CSV files inside the `data` directory
  --id I      an identifier for the graph or docker container
  --nodes N   the name of the nodes csv file (default: nodes.csv)
  --edges E   the name of the relations csv file (default: rels.csv)

واجهة سطر الأوامر لبناء واستيراد HPG (v1)

من أجل إنشاء رسم بياني هجين للخصائص لمخرجات hpg_crawler واستيراده داخل مثيل neo4j محلي، يمكنك أيضاً القيام بما يلي:

root@kitploit:~
$ python3 -m engine.api <path> --js=<program.js> --import=<bool> --hybrid=<bool> --reqs=<requests.out> --evts=<events.out> --cookies=<cookies.pkl> --html=<html_snapshot.html>

تحديد المعاملات:

  • <path>: المسار المطلق للمجلد الذي يحتوي على ملفات البرنامج للتحليل (يجب أن يكون تحت مجلد engine/outputs).
  • --js=<program.js>: اسم برنامج جافا سكريبت للتحليل (الافتراضي: js_program.js).
  • --import=<bool>: ما إذا كان يجب استيراد الرسم البياني للخصائص الذي تم إنشاؤه إلى قاعدة بيانات neo4j نشطة (الافتراضي: true).
  • --hybrid=bool>: ما إذا كان الوضع الهجين ممكّناً (الافتراضي: false). هذا يعني أن المختبر يريد إثراء الرسم البياني للخصائص عن طريق إدخال ملفات لأي من لقطة HTML، والأحداث التي تم إطلاقها، وطلبات HTTP وملفات تعريف الارتباط، كما تم جمعها بواسطة زاحف JAW.
  • --reqs=<requests.out>: لوضع الهجين فقط، اسم الملف الذي يحتوي على تسلسل طلبات الشبكة المرصودة، قم بتمرير السلسلة false لاستبعاد (الافتراضي: request_logs_short.out).
  • --evts=<events.out>: لوضع الهجين فقط، اسم الملف الذي يحتوي على تسلسل الأحداث التي تم إطلاقها، قم بتمرير السلسلة false لاستبعاد (الافتراضي: ).

لمزيد من المعلومات، يمكنك استخدام واجهة سطر الأوامر المساعدة المقدمة مع واجهة برمجة تطبيقات بناء الرسم البياني:

root@kitploit:~
$ python3 -m engine.api -h

التحليل الأمني

يمكن بعد ذلك الاستعلام عن HPG الذي تم بناؤه باستخدام Cypher أو NeoModel ORM.

تشغيل عمليات اجتياز الرسم البياني المخصصة

يجب عليك وضع وتشغيل استعلاماتك في analyses/<ANALYSIS_NAME>.

الخيار 1: استخدام NeoModel ORM (مهمل)

يمكنك استخدام NeoModel ORM للاستعلام عن HPG. لكتابة استعلام:

  • (1) اطّلع على نموذج بيانات HPG و شجرة بناء الجملة.
  • (2) اطّلع على نموذج ORM لـ HPGs.
  • (3) انظر إلى ملف الاستعلام المثال المقدم؛ example_query_orm.py في مجلد analyses/example.
root@kitploit:~
$ python3 -m analyses.example.example_query_orm  

لمزيد من المعلومات، يرجى الاطلاع هنا.

الخيار 2: استخدام استعلامات Cypher

يمكنك استخدام Cypher لكتابة استعلامات مخصصة. لهذا:

  • (1) اطّلع على نموذج بيانات HPG و شجرة بناء الجملة.
  • (2) انظر إلى ملف الاستعلام المثال المقدم؛ example_query_cypher.py في مجلد analyses/example.
root@kitploit:~
$ python3 -m analyses.example.example_query_cypher

لمزيد من المعلومات، يرجى الاطلاع هنا.

اكتشاف الثغرات الأمنية

يصف هذا القسم كيفية تكوين JAW واستخدامه لاكتشاف الثغرات الأمنية، وكيفية تفسير المخرجات. يحتوي JAW، من بين أمور أخرى، على استعلامات مكتفية بذاتها لاكتشاف CSRF من جانب العميل و DOM Clobbering.

الخطوة 1. قم بتمكين مكون التحليل لفئة الثغرة الأمنية في ملف config.yaml للإدخال:

root@kitploit:~
request_hijacking:
  enabled: true 
  # [...]

open_redirect:
  enabled: false 
  # [...]
  
domclobbering:
  enabled: false
  # [...]

cs_csrf:
  enabled: false
  # [...]

الخطوة 2. قم بتشغيل مثيل من خط الأنابيب مع:

root@kitploit:~
$ python3 -m run_pipeline --conf=config.yaml

تلميح. يمكنك تشغيل مثيلات متعددة من خط الأنابيب تحت screens مختلفة:

root@kitploit:~
$ screen -dmS s1 bash -c 'python3 -m run_pipeline --conf=conf1.yaml; exec sh'
$ screen -dmS s2 bash -c 'python3 -m run_pipeline --conf=conf2.yaml; exec sh'
$ # [...]

لإنشاء ملفات تكوين متوازية تلقائياً، يمكنك استخدام برنامج generate_config.py.

كيفية تفسير مخرجات التحليل؟

سيتم تخزين المخرجات في ملف يسمى sink.flows.out في نفس مجلد الإدخال. بالنسبة لـ CSRF من جانب العميل، على سبيل المثال، لكل طلب HTTP تم اكتشافه، يخرج JAW إدخالاً يحدد مجموعة الأنواع الدلالية (المعروفة أيضاً باسم العلامات أو التسميات الدلالية) المرتبطة بالعناصر التي تشكل الطلب (أي شرائح البرنامج). على سبيل المثال، طلب HTTP مميز بالنوع الدلالي ['WIN.LOC'] يمكن تزويره من خلال نقطة حقن window.location. ومع ذلك، فإن الطلب المميز بـ ['NON-REACH'] لا يمكن تزويره.

يظهر أدناه مثال على إدخال مخرجات:

root@kitploit:~
[*] Tags: ['WIN.LOC']
[*] NodeId: {'TopExpression': '86', 'CallExpression': '87', 'Argument': '94'}
[*] Location: 29
[*] Function: ajax
[*] Template: ajaxloc + "/bearer1234/"
[*] Top Expression: $.ajax({ xhrFields: { withCredentials: "true" }, url: ajaxloc + "/bearer1234/" })

1:['WIN.LOC'] variable=ajaxloc
	0 (loc:6)- var ajaxloc = window.location.href

يُظهر هذا الإدخال أنه في السطر 29، يوجد تعبير استدعاء $.ajax، ويقوم تعبير الاستدعاء هذا بتشغيل طلب ajax بقيمة قالب url لـ ajaxloc + "/bearer1234/"، حيث المعامل ajaxloc هو شريحة برنامج تقرأ قيمتها في السطر 6 من window.location.href، وبالتالي يمكن تزويره من خلال ['WIN.LOC'].

تطبيق ويب للاختبار

من أجل تبسيط عملية اختبار JAW والتأكد من صحة الإعداد الخاص بك، نقدم تطبيق ويب بسيط node.js يمكنك اختبار JAW به.

أولاً، قم بتثبيت التبعيات عبر:

root@kitploit:~
$ cd tests/test-webapp
$ npm install

ثم، قم بتشغيل التطبيق في شاشة جديدة:

root@kitploit:~
$ screen -dmS jawwebapp bash -c 'PORT=6789 npm run devstart; exec sh'

توثيق مفصل.

لمزيد من المعلومات، قم بزيارة صفحة الويكي الخاصة بنا هنا. فيما يلي جدول محتويات للوصول السريع.

زاحف الويب الخاص بـ JAW

  • زاحفات الويب

نموذج بيانات رسوم الخصائص الهجينة (HPGs)

  • عُقد الرسم البياني للخصائص
  • القواعد وشجرة بناء الجملة
  • حواف الرسم البياني للخصائص

بناء الرسم البياني

  • بناء رسم بياني للخصائص
  • استخدام JAW مع حاوية Neo4j Docker

عمليات اجتياز الرسم البياني

  • تشغيل الاستعلامات على رسوم الخصائص البيانية

المساهمة ومدونة السلوك

طلبات السحب (Pull requests) مرحب بها دائماً. هذا المشروع يهدف إلى أن يكون مساحة آمنة ومرحبة، ومن المتوقع أن يلتزم المساهمون بمدونة سلوك المساهم.

المنشورات الأكاديمية

إذا كنت تستخدم JAW لأغراض البحث الأكاديمي، فإننا نشجعك على الاستشهاد بالورقة التالي:

root@kitploit:~
@inproceedings{JAW,
  title = {JAW: Studying Client-side CSRF with Hybrid Property Graphs and Declarative Traversals},
  author= {Soheil Khodayari and Giancarlo Pellegrino},
  booktitle = {30th {USENIX} Security Symposium ({USENIX} Security 21)},
  year = {2021},
  address = {Vancouver, B.C.},
  publisher = {{USENIX} Association},
}   

شكر وتقدير

لقد قطع JAW شوطاً طويلاً ونريد أن نوجه تحية خاصة لمساهمينا هنا!

@tmbrbr، @c01gide، @jndre، و Sepehr Mirzaei.

تنزيل الأداة
events.out
  • --cookies=<cookies.pkl>: لوضع الهجين فقط، اسم الملف الذي يحتوي على ملفات تعريف الارتباط، قم بتمرير السلسلة false لاستبعاد (الافتراضي: cookies.pkl).
  • --html=<html_snapshot.html>: لوضع الهجين فقط، اسم الملف الذي يحتوي على لقطة شجرة DOM، قم بتمرير السلسلة false لاستبعاد (الافتراضي: html_rendered.html).