السلام عليكم ، أثناء فحصي لجهاز التوجيه Router من إصدار شركة Huawei بهدف بعض عمليات الأتمتة ، اكتشفت أنك عندما تحاول تسجيل الدخول تقوم الصفحة بإرسال Request للـ Mini web server المدمج في الراوتر ، ويحتوي على بعض البيانات منها CSRF token و CSRF parameter واسم المستخدم ، وكلمة المرور لكن مشفرة ...
عندما بحثت عن الدالة المسئولة عن تشفير كلمة المرور وجدتها في ملف Javascript وبطبيعة الحال هذا الملف متاح للمستخدم بمجرد فتح صفحة الويب ، تلك هي طريقة التشفير:
var plaintPwd = this.content.get("UserName") + base64Encode(SHA256(this.content.get("Password"))) + csrf_obj.csrf_param + csrf_obj.csrf_token;
post_data["data"]["Password"] = SHA256(plaintPwd);
هذه هي الدوال المصممة خصيصا للتشفير ->
كما تلاحظون ، يتم التشفير على أربع مراحل:
1- يتم تشفير كلمة المرور باستخدام دالة SHA256
2- يتم تشفير الناتج السابق عن طريق دالة base64Encode
3 - يتم إضافة اسم المستخدم (غالبا admin) مع الناتج السابق وإضافة ناتج الدمج إلى اثنين من CSRF tokens يتم توليدهم بشكل عشوائي بمجرد تحميل الصفحة.
4- يتم تشفير الناتج السابق بواسطة SHA256 مرة أخرى
السؤال هو ، لماذا كل هذا الصداع ، ألم يكن من الممكن استخدام خوارزميات جاهزة ومعروفة مثل SHA256 مثلا واستخدامها مع كلمة المرور فقط (أعتقد جافا سكربت مليئة بالمكتبات المختصة بالتشفير) ؟؟
أنا لم أستطع قراءة الدوال جيدا ، لكن أليس استخدام تلك الطريقة يعد Over Engineering ؟
التعليقات