






السمعة:
- إنضم17 يونيو 2023
- المشاركات 519
- الحلول 10
- مستوى التفاعل 1,109
- النقاط 93
Authentication Bypass
راح اشرح كيفية تجاوز وكسر عمليات تسجيل الدخول والأساليب الأخرى للمصادقة على مواقع الويب. هذه الثغرات يمكن أن تكون من بين أخطر الثغرات الأمنية لأنها غالباً ما تؤدي إلى تسريب بيانات العملاء الشخصية.راح نحكي عن كيفية التعامل مع هذه الثغرات وكيفية تجنبها أو إصلاحها.
راح يكون الحكي عن اربع مواضيع بالتحديد :
1. جمع معلومات ( Username Enumeration ).
2. القوة الغاشمة ( Brute Force ).
3. خطأ منطقي ( Logic Flaw ).
4. التلاعب بملفات تعريف الارتباط ( Cookie Tampering ).
الاسئله من TryHackMe | HTTP in detail ,TryHackMe | Authentication Bypass
احدى هذه الرومات تتطلب اشتراك
احدى هذه الرومات تتطلب اشتراك

جمع معلومات ( Username Enumeration )
الـ Username Enumeration ، يعني عملية لما حد بيحاول يدخل على حسابات أو مواقع بتحتاج تسجيل دخول. عشان نعرف إذا كان في أخطاء في النظام ولا لا، بنحتاج نعمل قائمة بأسماء مستخدمين صحيحة.
مثال على ذلك
الشغله الأولى إننا بنستخدم رسائل الخطأ اللي بتظهر لما حد بيحاول يسجل حساب جديد
لما نحاول نسجل باسم “admin” ونملأ باقي البيانات بمعلومات غير صحيحة، هنشوف رسالة خطأ بتقول “حساب بهذا الاسم موجود بالفعل”، هاد بكون مؤشر إن في حساب بالفعل باسم المستخدم موجود في النظام.
بنستخدم أداة اسمها ffuf عشان نعمل عملية Username Enumeration.

كود:
ffuf -w /usr/share/wordlists/SecLists/Usernames/Names/names.txt -X POST -d "username=FUZZ&email=x&password=x&cpassword=x" -H "Content-Type: application/x-www-form-urlencoded" -u http://10.10.87.23/customers/signup -mr "username already exists"
الـ -X بيحدد نوع الطلب اللي هنبعثه ( وفي حالتنا هاي حيكون POST ).
الـ -d بيحدد البيانات اللي حنبعثها في الطلب.
الـ FUZZ بنستخدمها في الاسم عشان الأداة تحاول تجرب كل الأسماء من الملف.
الـ -H بيضيف هيدرز إضافية للطلب ( وراح نستخدمه عشان نحكي للموقع إننا راح نبعت بيانات نموذجية ) .
الـ -u بيحدد عنوان الموقع اللي راح نعمله الطلب عليه.
الـ -mr بيحدد النص اللي راح نبحث عنه على الصفحة عشان نتأكد إذا كان في اسم مستخدم صحيح أو لأ.
الملف اللي فيه الأسماء بتقدر تحملها من هنا
القوة الغاشمة ( Brute Force )
بالبدايه راح نستخدم ملف اسمه valid_usernames.txt
الذي يحتوي على
كود:
admin
simon
steve
robert
الآن، نريد استخدام هذا الملف لمحاولة اختراق صفحة تسجيل الدخول على العنوان التالي:
http://10.10.87.23/customers/login
ونريد القيام بذلك باستخدام تقنية تسمى Brute Forceما هو هجوم Brute Force ؟ هو عملية تلقائية تقوم بمحاولة استخدام قائمة من كلمات المرور الشائعة مع اسم مستخدم معين أو، في حالتنا، مع قائمة من الأسماء.
لكي نقوم بهذا الهجوم، يجب أن يكون الترمينال ( النافذة التي نكتب فيها الأوامر ) في نفس المجلد الذي يحتوي على الملف valid_usernames.txt
الآن، دعونا نفحص الأمر الذي سنستخدمه مع أداة ffuf لتنفيذ هذا الهجوم بالتفصيل:
كود:
ffuf -w /location/to/valid_usernames.txt:W1,/location/to/10-million-password-list-top-100.txt:W2 -X POST -d "username=W1&password=W2" -H "Content-Type: application/x-www-form-urlencoded" -u http://( ip )/customers/login -fc 200
- تغير
location/to/valid_usernames.txt/
الى مكان الملف الذي يحتوي على الاربع اسماء الذي تم ذكره سابقا - تغير
location/to/10-million-password-list-top-100.txt/
الى مكان ملف الباسوردات تجده داخلusr/share/wordlists/SecLists/Passwords/Common-Credentials
- تغير
http://( ip )/customers/login
الى الـ ip الخاص بالمشين من موقع TryHackMe
الـ -w بحدد ملف الأسماء اللي بنستخدمه
الـ -X بيحدد نوع الطلب اللي هنبعثه ( وفي حالتنا هاي حيكون POST ).
الـ -d بيحدد البيانات اللي حنبعثها في الطلب.
الـ FUZZ بنستخدمها في الاسم عشان الأداة تحاول تجرب كل الأسماء من الملف.
الـ -H بيضيف هيدرز إضافية للطلب ( وراح نستخدمه عشان نحكي للموقع إننا راح نبعت بيانات نموذجية ) .
الـ -u بيحدد عنوان الموقع اللي راح نعمله الطلب عليه.
الـ 200 fc- هذا الخيار يستخدم لفحص إذا كانت الصفحة ردت برمز استجابة HTTP غير 200.
ببساطة، هذا الأمر يقوم بمحاولة تسجيل الدخول باستخدام قائمة من الأسماء وكلمات المرور على الصفحة المحددة ويتحقق إذا كان هناك رد استجابة غير 200، مما يشير إلى نجاح عملية الدخول بكلمة مرور معينة.
خطأ منطقي ( Logic Flaw )
احيانا، تحتوي عمليات المصادقة على أخطاء منطقية.
الخطأ المنطقي هو عندما يتم تجاوز المسار المنطقي النموذجي للتطبيق أو تجاوزه أو تلاعبه بواسطة هاكر.
يمكن أن تكون الأخطاء المنطقية موجودة في أي جزء من موقع الويب، ولكننا سنركز في هذا الحال على أمثلة تتعلق بعمليات المصادقة.
مثال على الخطأ المنطقي:
الكود الوهمي أدناه يتحقق مما إذا كان بداية المسار الذي يزوره العميل تبدأ بـ /admin وإذا كان الأمر كذلك، يتم إجراء فحوصات إضافية للتحقق مما إذا كان العميل فعلاً مسؤولًا. إذا لم يبدأ الصفحة بـ admin/، يتم عرض الصفحة للعميل.
كود:
if( url.substr(0,6) === '/admin')
{
# الكود للتحقق مما إذا كان المستخدم مسؤولًا
}
else
{
# عرض الصفحة
}
تطبيق الخطأ المنطقي:
سنقوم بفحص وظيفة إعادة تعيين كلمة المرور
نجد نموذجًا يطلب عنوان البريد الإلكتروني المرتبط بالحساب الذي نرغب في إجراء إعادة تعيين كلمة المرور عليه. إذا تم إدخال بريد إلكتروني غير صالح، ستظهر رسالة خطأ تقول “لم يتم العثور على حساب من خلال عنوان البريد الإلكتروني المقدم”.
سنستخدم عنوان البريد الإلكتروني
[email protected]
والذي يتم قبوله. بعد ذلك، سيتم عرض المرحلة التالية من النموذج، الذي يطلب اسم المستخدم المرتبط بهذا عنوان البريد الإلكتروني للدخول. إذا قمنا بإدخال robert كاسم مستخدم وضغطنا على زر التحقق من اسم المستخدم، سيتم عرض رسالة تأكيد بأن بريدًا إلكترونيًا لإعادة تعيين كلمة المرور سيتم إرساله إلى [email protected]
.
في الخطوة الثانية من عملية إعادة تعيين كلمة المرور، يتم إرسال اسم المستخدم في حقل POST إلى خادم الويب، ويتم إرسال عنوان البريد الإلكتروني في طلب السلسلة كحقل GET.
لنوضح ذلك باستخدام أداة Curl لإجراء الطلب يدويًا إلى خادم الويب.
Curl Request 1:
كود:
curl 'http://10.10.251.130/customers/reset?email=robert%40acmeitsupport.thm' -H 'Content-Type: application/x-www-form-urlencoded' -d 'username=robert'
-H
لإضافة رأس إضافي إلى الطلب في هذه الحالة، نقوم بتعيين Content-Type إلىapplication/x-www-form-urlencoded، مما يخبر خادم الويب أننا نرسل بيانات نموذج حتى يفهم طلبنا بشكل صحيح.
في التطبيق، يتم استرجاع حساب المستخدم باستخدام سلسلة الاستعلام، ولكن فيما بعد، في منطق التطبيق، يتم إرسال رسالة إعادة تعيين كلمة المرور باستخدام البيانات الموجودة في المتغير PHP $_REQUEST .
متغير PHP $_REQUEST :هي مصفوفة تحتوي على البيانات التي تم استلامها من سلسلة الاستعلام وبيانات POST. إذا تم استخدام نفس اسم المفتاح لكل من سلسلة الاستعلام وبيانات POST، فإن منطق التطبيق لهذا المتغير يميل إلى حقول بيانات POST بدلاً من سلسلة الاستعلام، لذا إذا قمنا بإضافة معلمة أخرى إلى نموذج POST، يمكننا التحكم في مكان تسليم رسالة إعادة تعيين كلمة المرور.
Curl Request 2:
كود:
curl 'http://10.10.251.130/customers/reset?email=robert%40acmeitsupport.thm' -H 'Content-Type: application/x-www-form-urlencoded' -d 'username=robert&[email protected]'

الآن، بإعادة تشغيل Curl Request 2 ولكن باستخدام حسابك الخاص في حقل البريد الإلكتروني ستحصل على تذكرة تم إنشاؤها في حسابك تحتوي على رابط لتسجيل الدخول باسم Robert. باستخدام حساب Robert، يمكنك عرض تذاكر الدعم الخاصة به والعثور على علم.
Curl Request 2 ( لكن باستخدام حسابك )
كود:
curl 'http://10.10.251.130/customers/[email protected]' -H 'Content-Type: application/x-www-form-urlencoded' -d 'username=robert&[email protected]'
ونجد الرساله لتسجيل الدخول تلقائي
عند تسجيل الدخول نجد تذكره داخلها الحل
التلاعب بملفات تعريف الارتباط ( Cookie Tampering )
الكوكيز هي عبارة عن قطع صغيرة من البيانات تُخزَّن على جهاز الكمبيوتر الخاص بك. تُحفظ الكوكيز عندما تتلقى رأس Set-Cookie من خادم الويب. بعد ذلك، في كل طلب تقوم به على الإنترنت، ستقوم بإرسال بيانات الكوكيز إلى خادم الويب. نظرًا لأن HTTP لا يحتفظ بسجل لطلباتك السابقة، يمكن استخدام الكوكيز لتذكير خادم الويب بمن أنت، وببعض الإعدادات الشخصية للموقع، أو ما إذا كنت قد قمت بزيارة الموقع من قبل. لنلقي نظرة على طلب HTTP كمثال:
في هذا الطلب، تُظهر الرسمة كيفية إدخال الكوكيز في طلبات HTTP للسماح بتخزين معلومات المستخدم
عرض الكوكيز
يمكنك بسهولة عرض الكوكيز التي يرسلها متصفحك إلى موقع الويب عن طريق استخدام أدوات المطور المتاحة في متصفحك.عندما تفتح أدوات المطور، انتقل إلى علامة التبويب “الشبكة” (Network ). ستظهر لك هذه التبويب قائمة بجميع الموارد التي طلبها متصفحك. يمكنك النقر على كل طلب للحصول على تفصيل مفصل عن الطلب والاستجابة. إذا قام متصفحك بإرسال كوكيز، ستجدها في علامة التبويب “الكوكيز” (Cookies) للطلب.
هذا يسمح لك برؤية وفهم الكوكيز التي يتم إرسالها من متصفحك إلى مواقع الويب التي تزورها.
مثال: لنفترض أنك دخلت إلى موقع وسجلت دخولًا وحصلت على كوكيز تشير إلى أنك مستخدم عادي. إذا قمت بتعديل هذه الكوكيز لتجعل نفسك مديرًا، فيمكنك الآن الوصول إلى صفحات خاصة للمديرين.
Plain Text (النص العادي)
بعض الكوكيز تكون مفتوحة المحتوى ومفهومة بسهولة. مثل كوكيز تشير إلى ما إذا كنت مسجل الدخول أو إذا كنت مديرًا.مثل كوكي logged_in=true تعني أنك مسجل الدخول، وكوكي admin=false تعني أنك لست مديرًا. بتغيير قيم هذه الكوكيز، يمكنك التحكم في صلاحياتك على الموقع.
Hashing (التجزئة)
التجزئة هي عملية تحويل نص إلى سلسلة أحرف أو أرقام. هذا التحويل غالبًا ما يتم باستخدام خوارزميات معينة ويُنتج هاش (سلسلة حرفية) فريدة لكل نص. هذا الهاش لا يمكن عكسه للحصول على النص الأصلي.
لمعرفه معنى الهاش بشكل مفصل بالمقال التالي

مثال: إذا قمت بتجزئة كلمة “Hello”، فإن الهاش الناتج سيكون مثل “2ef7bde608ce5404e97d5f042f95f89f1”.
الكوكيز المشفرة تحتوي على بيانات مشفرة بطريقة تجعلها صعبة للغاية للقراءة أو التفكيك.
اذا سألت ليش بتقدر تعرف الجواب عن طريق المقال التالي

مثال: كوكي مشفر يحمل قيمة “6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b”، وهذا النص هو نتيجة تجزئة (تشفير) معينة لمعلومة ما.
Encoding (الترميز)
الترميز هو عملية تحويل البيانات من شكل إلى آخر. على عكس التجزئة، يمكن عكس عملية الترميز للحصول على البيانات الأصلية.
لمعرفه معنى الترميز او الـ Encoding بشكل مفصل بالمقال التالي

مثال: الترميز بنظام Base64 يحول البيانات الثنائية (الأصفار والواحدات) إلى سلسلة نصية تحتوي على أحرف وأرقام معينة. مثلاً، ترميز النص “Hello” بواسطة Base64 سيعطيك “SGVsbG8=”، ويمكن فك الترميز للحصول على النص “Hello” مرة أخرى.
في العادة، الكوكيز لا تُشفر (Encoding)، بل تُستخدم لتخزين بيانات نصية واضحة يمكن قراءتها بسهولة. ومع ذلك، هناك حالات استثنائية يتم فيها تشفير بعض محتوى الكوكيز لزيادة الأمان.
مثال: على ذلك هو استخدام التشفير عند تخزين معرِّف الجلسة (Session ID) في الكوكيز. في بعض الأنظمة، يمكن تشفير معرِّف الجلسة لمنع الوصول غير المصرح به إليه.
على سبيل المثال:
- الكوكيز العادية:
session_id=12345
(نص واضح) - الكوكيز المشفرة:
session_id=7YhG9C6T8p8ZGK0S
(مشفرة بطريقة تجعلها صعبة للقراءة والفهم)
Encoding VS Hashing
في الغالب، يتم استخدام التجزئة (Hashing) للكوكيز الحساسة مثل معرفات الجلسة.
بينما يتم استخدام التشفير (Encoding) لتمثيل البيانات بشكل قابل للقراءة بسهولة مثل الإعدادات الشخصية للمستخدم على الموقع.
اسئله
- ما هو الرأس المستخدم لحفظ ملفات تعريف الارتباط على جهاز الكمبيوتر الخاص بك؟
Set-Cookie
الجواب

يجب اول شيء تجربه عمل ريكويست
- ما هي قيمة تجزئة md5 3b2a1053e3270077456a79192070aa78 ؟

نستخدم موقع Crack Station
- ما هي القيمة المشفرة الأساسية 64 لـ VEhNe0JBU0U2NF9FTkNPRElOR30= ؟

نستخدم موقع Base64 decode
- قم بتشفير القيمة التالية باستخدام base64 هذه هي
{"id":1,"admin":true}

نستخدم موقع Crack Station
المرفقات
التعديل الأخير: