
متصفح وسيط مسلح (BitM) لمختبري الاختراق

متصفح-في-الوسط (BitM) متعدد المستخدمين مسلح لمختبرى الاختراق. يمكن استخدام هذا الهجوم لتجاوز المصادقة متعددة العوامل في العديد من تطبيقات الويب عالية القيمة. يعمل حتى مع التطبيقات التي لا تستخدم رموز الجلسة، وبالتالي لن تكون قابلة للاستغلال باستخدام هجمات سرقة الرموز التقليدية. هذه أداة هندسة اجتماعية ولا تستغل أي ثغرات تقنية في الخدمة المستهدفة.
هذه الأداة هي خادم ويب متخصص. صُممت لتشغيل على خادم Linux Debian 11 (Bullseye) وتعتمد على معلومات IP العامة لحماية وظائف الإدارة. لا تتوقع أن تتمكن من الاختبار محليًا دون تجاوز بعض العقبات الكبيرة.
تحذير: Chromium غير مدعوم على ARM. بينما من الممكن تقنيًا فرض استخدام ثنائي Chromium لـ ARM، ستفقد جميع الميزات/الحماية الإضافية لـ puppeteer-extra.
يستخدم هذا الإعداد المثال Caddy للتعامل مع TLS و SNI وإضافة بعض الرؤوس المخصصة مثل 'X-Real-IP' لكل طلب. ليس عليك استخدام Caddy مع Cuddlephish، حيث يمكن إعداد نفس الوكيل العكسي باستخدام Nginx أو Apache إلخ. أنا أفضل Caddy لأنه سهل التثبيت باستخدام Docker ويحتوي على إضافات لإدارة شهادات Letsencrypt لمعظم مسجلي النطاقات. يُظهر مثال Caddyfile كيفية إعداده لـ Gandi. راجع الوثائق الخاصة بمسجلك.
قم بتثبيت Docker و Node و XVFB وبعض التبعيات الأخرى:
git clone https://github.com/fkasler/cuddlephish
cd cuddlephish
sudo bash install_deps.sh
يمكنك بعد ذلك استخدام Docker لبناء Caddy مع إضافة شهادة أحرف بدل لمسجلك. المثال لـ Gandi. راجع الوثائق هنا وقائمة وحدات موفري DNS هنا. يمكنك تعديل Dockerfile لمسجلك قبل البناء:
sudo docker build -t caddy .
الآن قم بتعديل ملف Caddyfile لاستبدال نطاقك ومفتاح API لـ Gandi (أو أي مسجل آخر)، ثم ابدأ Caddy. أوصي ببدء تشغيله في نافذة screen أو tmux حتى تتمكن من تشغيل خادم Node في نافذة أخرى بعد قليل:
sudo docker run -p 80:80 -p 443:443 -p 2019:2019 -v $PWD/Caddyfile:/etc/caddy/Caddyfile --network=host caddy:latest
بعد أن يتولى Caddy حركة المرور على المنفذين 80 و 443، يمكننا أخيرًا تشغيل الأداة!
قم بتثبيت تبعيات Node:
npm install
بعض التعديلات على الإعدادات: خطوة حاسمة: تأكد من تعديل ملف config.json لإضافة عناوين IP العامة المعتمدة لديك للوصول الإداري. قائمة IP البيضاء هذه هي التي تتحكم في الوصول إلى واجهة الويب "/admin". يجب أيضًا تغيير مفتاح المقبس الافتراضي إلى شيء أكثر أمانًا.
الأداة ليست مهيأة لاستهداف أي صفحات تسجيل دخول افتراضيًا، لذا ستحتاج إلى إضافة بعضها. يوجد نص برمجي 'add_target.js' لتسهيل هذه الخطوة. فقط قم بتشغيل النص والصق عنوان URL لبوابة تسجيل الدخول التي تريد استهدافها عند الطلب:
node add_target.js
سيقوم هذا بجلب اسم الخدمة وعنوان التبويب والأيقونة المفضلة لك وإضافة إدخال إلى 'targets.json'. يمكنك تشغيل هذا النص عدة مرات وسيقوم بإلحاق الأهداف الجديدة. سيقوم النص بتسمية كل خدمة بناءً على النطاق، بدون المستوى الأعلى. لذا، بالنسبة لـ 'https://www.example.com/login.php' ستكون الخدمة مجرد 'example' عند تحديد هدفك عندما...
قم بتشغيلها!
node index.js example
بعد بضع ثوانٍ، يجب أن ترى رسالة في وحدة التحكم عندما يتصل أول مثيل Chrome آلي لديك عبر websockets. الآن يجب أن يرى زوار موقع التصيد الخاص بك ما يبدو وكأنه صفحة تسجيل الدخول الهدف ولكنها في الواقع بث فيديو لمثيل المتصفح الآلي لديك. يمكنهم أيضًا التفاعل مع مثيل المتصفح لديك وتسجيل الدخول نيابة عنك.
إذا قمت بتكوين عناوين IP الإدارية بشكل صحيح في config.json، يجب أن تكون قادرًا على عرض واجهة ويب خاصة '/admin' لتتبع المستخدمين وعرض سجلات المفاتيح والسيطرة على مثيلات المتصفح المسجلة الدخول وسرقة ملفات تعريف الارتباط وحذف مثيلات المتصفح غير المرغوب فيها.
ملاحظة: لن ترى أي شيء في صفحة الإدارة حتى يكون لديك بعض الضحايا. بمجرد أن يكون لديك ضحية، يجب أن يظهر مثيل المتصفح الخاص به في واجهة المستخدم الإدارية.
واجهت عدة أشخاص يفتحون مشكلات حول "صفحة بيضاء فارغة"، وهو عرض للعديد من المشكلات المحتملة، وليس مشكلة في حد ذاتها. يرجى عدم فتح مشكلات تحت أسماء أعراض غامضة. بدلاً من ذلك، إذا كانت لديك صفحة فارغة على جانب المستخدم، فحاول أولاً النظر في ما يلي:
على مستوى عالٍ، إذا رأيت فقط صفحة فارغة على الواجهة الأمامية، فهذا يعني أن هناك خللاً يحدث في سلسلة تدفق البيانات من "بدء WebRTC" > "حدد تبويب للبث" > "تفاوض ICE مع متصفح الضحية" > "بث الفيديو". خطوات استكشاف الأخطاء وإصلاحها أعلاه تهدف إلى مساعدتك في تتبع البيانات عبر هذه العملية. عند العمل بشكل صحيح، يجب أن تتوقع رؤية تدفق سجل على الخادم مشابه لما يلي:
آمل أن يساعد هذا في أي مشكلات، وكما هو الحال دائمًا، المعلومات الكافية لتكرار المشكلة باستمرار هي شرط أساسي لتقديم المشكلات لمزيد من التحقيق.
قم بتشغيل حمولة يدويًا لتنزيلها على نظام الضحية عبر JavaScript. يبدأ كل هدف بـ 'payload.txt' كحمولة اختبار. فقط قم بتبديل موقع الملف في targets.json لإرسال حمولة مخصصة.
يرسل تغيير window.location للضحية لإرساله إلى بوابة تسجيل الدخول الحقيقية. سيبدو كما لو أنه يجبر على إعادة المصادقة ويمنعه من مشاهدتك وأنت تتولى زمام الأمور. إذا قمت بتعديل الكود، يمكنك القيام ببعض الأشياء الفاخرة الأخرى بهذه التقنية العامة ;)
يسمح لك بالتدخل والتحكم في مثيل المتصفح مباشرة من بوابة الإدارة. لإيقاف التحكم في المثيل، اضغط على مفتاح ESCAPE. ملاحظة، سيؤدي هذا إلى سحب التحكم من ضحية التصيد وسيكون قادرًا على مشاهدة تحركاتك إذا لم تقم بطرده أولاً. لقد تم تحذيرك.
يسمح لك بإعادة التحكم يدويًا للمستخدم في مثيل المتصفح الآلي. قد يكون هذا مفيدًا في بعض سيناريوهات الهندسة الاجتماعية عند انتحال صفة تكنولوجيا المعلومات. يمكنك إخبار المستخدم بأنك تبدأ جلسة مساعدة، وتتولى التحكم وتنتقل إلى الخدمة الهدف، ثم تعيد التحكم وتجعلهم يسجلون الدخول، ثم تتولى التحكم مرة أخرى، إلخ.
يستخرج جميع عناصر ملفات تعريف الارتباط والتخزين المحلي من مثيل المتصفح، ويقوم بتنزيلها كملف JSON. لحقن هذه المواد المعتمدة مرة أخرى في مثيل متصفح يعمل على نظامك المحلي، يوجد نص برمجي في المشروع يسمى 'stealer.js'. من المفترض أن يتم تشغيله من جهازك، وليس من الخادم، لذا لاستخدامه ستحتاج أيضًا إلى تثبيت مكونات Node الخاصة بالمشروع على نظامك.
node stealer.js ~/Downloads/cuddle_asdf1234.json