
Panoptic هي أداة مفتوحة المصدر لاختبار الاختراق تعمل على أتمتة عملية البحث واسترجاع المحتوى لملفات السجلات والإعدادات الشائعة عبر ثغرات اجتياز المسار (Path Traversal).

Panoptic هي أداة اختبار اختراق مفتوحة المصدر تعمل على أتمتة البحث عن ملفات السجلات والإعداد الشائعة واسترجاعها عبر ثغرات اجتياز المسار.

--concurrency)FUZZ
في أي قيمة --header أو --data--base64)/etc/passwd لملفات الدليل الرئيسي،
وmysql-bin.index لملفات binlog--output-format)--resume-file)--config)httpx[socks]، وrich، وrich-argparse، وtomli على Python 3.10git clone https://github.com/lightos/Panoptic.git
cd Panoptic
python3 -m venv .venv
source .venv/bin/activate
python -m pip install -e .
panoptic --version
في موجه أوامر Windows، قم بالتفعيل عبر .venv\Scripts\activate.bat؛ وفي PowerShell استخدم .venv\Scripts\Activate.ps1. التثبيت القابل للتحرير يُبقي Panoptic مرتبطًا بهذا الاستنساخ من أجل --update، لذا أبقِ المجلد في مكانه. لا تشغّل pip install panoptic: هذا الاسم على PyPI يعود لمشروع غير ذي صلة.
للتطوير:
python -m pip install -e ".[dev]"
panoptic --url "http://target/include.php?file=test.txt"
panoptic --url "http://target/include.php?file=test.txt"
panoptic --url "http://target/include.php?file=test.txt&id=1" \
--param file
panoptic --url "http://target/include.php" \
--data "file=test.txt&id=1" --param file
panoptic --url "http://target/view.php/test.txt" --path-based
panoptic --url "http://target/load.php?file=dGVzdC50eHQ=" \
--base64 --auto
panoptic --url "http://target/page.php" \
--header "Cookie: lang=FUZZ" --auto
panoptic --url "http://target/api/load" \
--data '{"file":"FUZZ"}' --auto
panoptic --url "http://target/page.php" \
--header "X-Template: FUZZ" --auto
panoptic --url "http://target/view.php?file=test&type=txt" \
--param file --ext-param type
panoptic --url "http://target/filtered.php?file=test.txt" \
--prefix "....//....//....//....//"
panoptic --url "http://target/include.php?file=test.txt" \
--os "*NIX" --type conf
panoptic --url "http://target/include.php?file=test.txt" \
--software PostgreSQL
panoptic --url "http://target/include.php?file=test.txt" \
--output-format json --output-file results.json \
--resume-file scan.checkpoint
panoptic --url "https://target/include.php?file=test.txt" \
--proxy "socks5://127.0.0.1:9050" --invalid-ssl
panoptic --list software
panoptic --list category
panoptic --list os
panoptic --url "http://target/include.php?file=test.txt" \
--auto --all-versions --concurrency 8
ضع FUZZ في أي مكان داخل قيم --header أو --data لتحديد نقطة الحقن. يستبدل Panoptic FUZZ بكل مسار ملف أثناء الفحص. يتيح هذا اختبار نقاط الحقن التي لا يستطيع --param الوصول إليها:
| نوع الحقن | مثال |
|---|---|
| قيمة ملف تعريف ارتباط | --header "Cookie: theme=FUZZ" |
| ترويسة مخصصة | --header "X-Include: FUZZ" |
عند وجود FUZZ، لا يكون --param مطلوبًا.
يدعم Panoptic ملفات إعداد TOML للإعدادات الدائمة:
panoptic --url "http://target/include.php?file=test.txt" \
--config ~/.config/panoptic/config.toml
موقع الإعداد الافتراضي: ~/.config/panoptic/config.toml (يُحمَّل تلقائيًا عند وجوده، حتى بدون --config).
[defaults]
# Any long option name (with dashes as underscores) is accepted here,
# including the target and output destinations.
url = "http://target/include.php?file=test.txt"
concurrency = 8
verbose = true
automatic = true
all_versions = true
output_format = "json"
output_file = "results.json"
log_file = "scan.log"
resume_file = "scan.checkpoint"
[proxy]
url = "socks5://127.0.0.1:9050"
[headers]
user_agent = "Mozilla/5.0"
cookie = "sid=foobar; auth=1"
values = ["X-Forwarded-For: 127.0.0.1"]
الأولوية: وسائط سطر الأوامر > ملف الإعداد > الإعدادات الافتراضية المدمجة.
يقبل جدول [defaults] أي خيار فحص، وليس فقط ضبط الأداء. ويمكنك على وجه الخصوص حفظ:
url — الهدف الافتراضي (يمكن تجاوزه لكل تشغيل عبر --url)output_format، output_file — أين تُحفظ النتائج القابلة للقراءة آليًاlog_file — مرآة لمخرجات وحدة التحكم في ملفresume_file — موقع نقطة التفتيش للفحوصات القابلة للاستئنافالملفات الحساسة التي يكتبها Panoptic — ملف السجل، وملف مخرجات النتائج/القائمة، وأي ملفات تُحفظ عبر --write-files — تُفرَض لها أذونات 0600 للمالك فقط على POSIX. المنصات التي تعرض O_NOFOLLOW ترفض أيضًا ذريًا أي رابط رمزي موجود مسبقًا في مكوّن المسار النهائي. على المنصات التي لا تحتوي O_NOFOLLOW، يقوم Panoptic بفحص أفضل جهد قبل الفتح للروابط الرمزية/الوصلات، لكن الفحص لا يمكنه إزالة سباق (race). بتات الوضع في Windows لا تهيئ قوائم NTFS ACL، لذا استخدم مجلدًا مقيدًا بشكل مناسب عندما قد تحتوي الملفات على بيانات حساسة.
لكل علامة (flag) منطقية نظير --no-، لذا يمكن إيقاف قيمة مضبوطة على true في ملف الإعداد لتشغيل واحد دون تعديل الملف:
# config.toml sets verbose = true and automatic = true
panoptic --url "http://target/x.php?file=test.txt" --no-verbose --no-auto
لأن العلامة المنطقية المحذوفة تُترك غير معينة (بدلاً من أن تكون افتراضية على false)، تُستخدم قيمة الإعداد ما لم تمرر العلامة أو صيغة --no- الخاصة بها صراحة.
وجّه الحركة عبر بروكسي HTTP(S) أو SOCKS:
panoptic --url "https://target/x.php?file=test.txt" \
--proxy "socks5://127.0.0.1:9050"
http://، https://، socks5://، socks5h://
(socks5h يحل DNS عبر البروكسي — مفيد لتور ولتجنب تسرب DNS المحلي).
لا يدعم عميل HTTP الأساسي SOCKS4. يُتحقق من المخطط والمضيف قبل
بدء الفحص.httpx[socks]، المثبتة افتراضيًا.HTTP_PROXY /
HTTPS_PROXY / NO_PROXY. مرر --ignore-proxy لتجاوزها والاتصال
مباشرة (يعطل هذا أيضًا أي بروكسي مضبوط عبر البيئة).--invalid-ssl عند اعتراض HTTPS عبر بروكسي له شهادة CA
خاصة به. يعطل هذا التحقق من الشهادة وهو غير آمن على الشبكات غير
الموثوقة.--all-versions)بعض المسارات المرفقة هي قوالب إصدارات (مثل مجلدات إصدارات JBoss المكتوبة
كـ [JBOSS]). افتراضيًا تُتخطى صفوف القوالب هذه، لأن مسار [JBOSS]
الحرفي لا يمكن أن يطابق ملفًا حقيقيًا أبدًا. تمرير --all-versions
يوسّع كل قالب مقابل قائمة الإصدارات المرفقة، مضيفًا مسارًا ملموسًا واحدًا
لكل إصدار معروف — فحص أكبر بكثير لكنه أكثر شمولاً:
panoptic --url "http://target/x.php?file=test.txt" --auto --all-versions
لا يعتمد Panoptic في تصنيف مسار على ترويسة Content-Length التي يتحكم فيها الهدف وحدها. يقارن النص الكامل المطبَّع مقابل خط الأساس للمسار غير الصالح. يتجنب حد أعلى رخيص للتشابه المقارنة الكاملة فقط عندما يمكنه بالفعل إثبات اختلاف النصوص؛ وتستخدم الاستجابات الغامضة النسبة الدقيقة لتجنب النتائج السلبية الخاطئة الناتجة عن إعادة ترتيب النص.
يسجل --resume-file PATH الحالات المكتملة حتى يتمكن الفحص المتقطع من الاستمرار من حيث توقف:
panoptic --url "http://target/x.php?file=test.txt" \
--resume-file scan.checkpoint
# ... interrupt with Ctrl-C, then re-run the same command to resume
تخزن نقطة التفتيش معرفات الحالات المكتملة فقط بالإضافة إلى بصمة SHA-256 لتعريف الفحص (URL، ومعاملات الحقن، وخيارات الكشف، والترويسات، وملف تعريف الارتباط، وUser-Agent، ومجموعة الحالات الدقيقة). لا تخزن أبدًا بيانات الاعتماد أو الترويسات أو عناوين URL كنص عادي.
عند الاستئناف، تُعاد حساب البصمة ومقارنتها. إذا اختلف أي شيء من شأنه تغيير معنى الفحص — هدف مختلف، أو معامل، أو ترويسة، أو ملف تعريف ارتباط، أو مجموعة فلاتر، أو تبديل --all-versions — تُرفض نقطة التفتيش مع تحذير ويبدأ الفحص من جديد، بحيث لا يمكن لنقطة تفتيش قديمة تخطي حالات من فحص مختلف بصمت. تُقبل نقاط التفتيش القديمة ذات القائمة البسيطة مع تحذير وتُقيَّد بمعرفات الحالات الموجودة في الفحص الحالي؛ ولأن تلك الصيغة القديمة لا تحتوي بصمة، يجب على المستخدمين استبدالها بالصيغة المكتوبة حديثًا. الطلبات الفاشلة (خطأ شبكة) لا تُسجَّل عمدًا في نقاط التفتيش حتى تُعاد محاولتها عند الاستئناف.
panoptic --version # print the installed version and exit
panoptic --update # fast-forward update from the official GitHub repo
يعمل --update فقط من استنساخ git يكون جهاز التحكم عن بُعد origin فيه يستخدم HTTPS أو SSH ويطابق المصدر الرسمي (يُتحقق منه قبل السحب، لمقاومة إعدادات التحكم عن بُعد غير الآمنة أو العابثة). يجري تقديمًا سريعًا (fast-forward) لفرع main المسحوب من مرجع main الصريح في المصدر. يمكن تحديث التثبيتات غير القائمة على استنساخ بأمان من أرشيف GitHub الرسمي:
python -m pip install --upgrade https://github.com/lightos/Panoptic/archive/refs/heads/main.zip
عند التشغيل من استنساخ، تعرض اللافتة أيضًا مراجعة git القصيرة الحالية.
يستخدم Panoptic رموز خروج تقليدية للعمليات بحيث يمكن برمجته:
0 — نجاح: اكتمل الفحص (أو --list / --update). تُحذَّر الطلبات الفردية التي تستنفد محاولات إعادة المحاولة وتبقى مؤهلة لفحص مستأنف، لكنها لا تفشل تشغيلًا ناجحًا بخلاف ذلك.1 — استخدام غير صالح: وسائط مفقودة أو غير صالحة، أو لا يمكن العثور على معامل قابل للحقن.2 — فشل تشغيلي: تعذر الاتصال، أو لا توجد حالات اختبار مطابقة، أو فشلت جميع الطلبات المجدولة، أو فشل عامل، أو نقطة تفتيش، أو كتابة مخرجات، أو إعداد.130 — قاطعه المستخدم (Ctrl-C / SIGINT).المساهمات مرحب بها! يرجى فتح المشكلات أو طلبات السحب على GitHub.
لإجراء اختبار شامل (end-to-end) آمن وقابل للتكرار، راجع Panoptic LFI Testbed. يوفر endpoints ضعيفة عمدًا تغطي طرق الحقن وتحويلات الاجتياز التي يدعمها Panoptic.
هذا المشروع مرخص بموجب رخصة MIT — راجع ملف LICENSE للتفاصيل.
0600 للمالك فقط على POSIX
وحماية الروابط الرمزية للمكوّن النهائي حيث يدعم نظام التشغيل ذلك--update)| نص JSON | --data '{"template":"FUZZ"}' |
| قيمة متداخلة | --header "Cookie: sid=abc; lang=FUZZ" |