مضى على الشبكة و يوم من العطاء.
  • تحذير: يجب على كل روّاد الشبكة تشغيل برامج الاختراق داخل الأنظمة الوهمية وهي بهدف التعلم وحماية الأعضاء والتوعية بها

Broken Access Control

Ahmad105Ahmad105 is verified member.

./عضو نشيط
.:: كاتب تقني ::.
>:: v1p ::<

السمعة:

Broken Access Control

9063

ما نوع تلك Vulnerability ؟ قبل أن نحدد ذلك، دعونا نرى أولاً ما هو access control بحد ذاته.
Access control : هو كيفية منح تطبيق الويب للمستخدمين إمكانية الوصول إلى المحتوى وfunctions ، لاحظ أنه يتم ذكره لبعض المستخدمين وليس كلهم.
Access control هو جزء من التطبيق يقرر من يحصل على رؤية أي محتوى ومن لا يحصل،أحيانًا يمكن أن يكون Access Control مرتبطًا بشكل صارم بالـauthorization و Session.
وفي بعض الحالات، قد يكون حتى نفس Vulnerability الذي نواجهه في Broken authentication ، والتي غطيناها بالفعل ومع ذلك، هناك المزيد.



1709630172693.png

بمجرد أن غطينا الBroken authentication، كان تركيزنا في الغالب على Break the session وتمثيل المستخدم.
Broken Access Control على الجانب الآخر، يمكن أن يستهدف Access Control أيضًا ليس فقط الجلسات ولكن على سبيل المثال، ملفات مختلفة أو Directory على الصفحة , ربما يكون بعض المستخدمين لديهم وصول إلى بعض الملفات الموجودة على الصفحة والآخرين لا يملكون.
إذا لم يتم تنفيذ Access Control بشكل صحيح، يمكننا أيضًا الحصول على وصول إلى تلك الملفات.
الأمر نفسه ينطبق على Directories.
ربما هناك بعض Directories التي تم تخصيصها فقط لاستخدام Admin وزيارتها، لكنها لا تملك تحكم في الوصول ويمكن زيارتها بسهولة عن طريق إضافة اسم Directory إلى الرابط.
هذا أيضًا Broken access control, vulnerability بالإضافة إلى ملفات مختلفة قد يسمح لنا أيضًا برؤية معلومات المستخدم الآخر.
الآن كل هذا مرة أخرى بسبب خطأ للمطورين.
إذا لم يتم تنفيذ
Access Control بشكل صحيح، فقد تحصل على Broken Access Control vulnerability وقد يبدو أمرًا كهذا.
لنفترض أن لدينا موقعًا عشوائيًا يحتوي على function لاختيار ملف وربما تنزيله على جهازك.


1709631275314.png

يجب أن يكون لاختيار الملف التحكم الخاص به، يمكننا أن نفترض أن هذا الملف العشوائي مخزنًا في مكان ما على الخادم، لكن كذلك جميع الملفات الأخرى التي ليس لدينا خيار لتنزيلها. فهل قاموا بتنفيذ Filter جيد وصحيح سيسمح لنا فقط بتنزيل الملفات التي يقدمونها؟ حسنًا، إذا استطعنا معرفة ذلك جربنا شيئًا من هذا القبيل , ماذا لو كتبنا بدلاً من الملف الذي نريده /etc/passwd ماذا سيحدث؟

1709631801608.png

إذا حصلنا على إخراج ملف Credentials أو إذا قام بتنزيله إلى صفحتنا، لدينا مثال على Broken access control , لقد قمنا بتنزيل شيء يجب ألا نكون قادرين على تنزيله.

هذا النوع من Vulnerability يمكن أيضًا أن يُسمى بعبارة أخرى إشارة مراجع الكائنات المباشرة غير الآمنة, ويحدث هذا Vulnerability عندما يستخدم التطبيق user supplied input للوصول إلى objects directly , وسنرى المزيد من الأمثلة حول ذلك في الدروس العملية. لذا دعونا أولاً نبدأ بمنصة TryHackMe الخاصة بنا.

حسنًا، ها نحن هنا على منصتنا ولدينا تحدي Broken
Access Control ، الذي هو المهمة رقم 18 الآن , كالعادة، أنصحك بقراءة جميع تحديات التحكم في الوصول المكسور، والتي في هذه الحالة هي المهمة رقم 17 والمهمة رقم 18 , وبالتالي اختصر الموضوع

ولكن الآن علينا متابعة المصادر الخاصة بنا وننتقل إلى هذا في وقت لاحق


1709634692427.png

رابط الآله
لنقم بتشغيلها ثم سأًعطيك عنوان ip لذا دعنا أولاً، نتصفح إلى هذه الصفحة عن طريق نسخ عنوان IP ولصقه هنا.

1709724565906.png
ما هو المستخدم الذي ستستخدمه لدينا حقل لتسجيل الدخول بالاسم وكلمة المرور , دعونا نتحقق مما إذا كانوا قد قدموا لنا بعض المعلومات حول كيفية تسجيل الدخول إلى هذه الصفحة وها هي.

1709724391779.png
اسم المستخدم هو noot وكلمة المرور هي test1234 لنجرب ذلك ولنقم بإرساله , ويعطينا صفحة بسيطة تظهر الجملة I am noot مع علامة التعجب.

1709724755628.png
لكن إذا نظرنا إلى الرابط، لدينا هذا parameter هنا التي تقول note يساوي واحد، و هذه هي parameter التي يمكننا محاولة Tamper بها.

1709724845390.png

يمكننا أن نستنتج أن هذه parameter قد تكون لها علاقة بـ User ID، على سبيل المثال ربما تكون هذه parameter التي تساوي واحد مخصصة بشكل صارم لحسابنا noot , فماذا سيحدث إذا قمنا بتغييرها إلى اثنين؟

1709725040850.png

حسنًا، لا نحصل على أي شيء. ماذا سيحدث إذا قمنا بتغييرها إلى ثلاثة، على سبيل المثال؟

1709725097715.png

ما زلنا لا نحصل على أي شيء لنجرب تغييرها إلى الصفر , اضغط على Enter وها هو flag لقد حصلنا على flag من حساب مختلف، مما يعني أن لدينا مثالًا على ثغرة Broken Access Control في هذه الآلة الافتراضية

1709725621277.png

كان هذا سهلًا نوعًا ما كل ما علينا فعله هو تغيير هذا parameter هنا

1709725400398.png

ولكن كل هذا ممكن بسبب عدم تصفية إدخالنا بشكل صحيح من قبلهم ليس لديهم أي تحكم على هذا parameter فيما يتعلق بما يمكن للمستخدم القيام به بها , في تطبيقات الويب الحقيقية، يجب أن يتم تصفية هذا الإدخال بشكل جيد جدًا بحيث إذا حاولت تغيير session أو تغيير user ID، فإنه يعود فقط إلى حسابك الخاص , لا يسمح لك برؤية المعلومات من مستخدمين مختلفين وفي حالتنا، هذا هو flag الذي نحتاج إلى تحديده كإجابة.

flag{fivefourthree}
1709725783789.png


الآن دعونا نلقي نظرة على بعض الأمثلة الأكثر صعوبة قليلاً على آلتنا الافتراضية OWASP

Accessing passwd With BAC
دعونا نرى مثالاً آخر على ثغرة (IDOR), في الجزء السابق، رأينا مثالاً بسيطاً على Tampering مع Parameter واحدة لتغيير
User ID أو لتمكيننا من رؤية Private information لمستخدم مختلف الآن، دعونا نرى ما هي الأمثلة التي يمكننا الحصول عليها لعدد OWASP BVA.

أول شيء أو أول مثال أريد أن أعرضه لك هو OWASP لدينا لذا دعونا ننقر على ذلك. owasp mutillidae II

1710248866123.png

وهنا، كالمعتاد، تحت نظام التشغيل 2013، سنجد هذه الVulnerability Insecure direct object reference التي تقول (IDOR) أو بعبارة أخرى، إنها ثغرة

1710249184167.png

هذا مثال على Vulnerability أظهرتها لك في الجزء النظري الآن دعونا نضعها في العملي لنذهب إلى أي منها لذا، على سبيل المثال، دعونا نذهب إلى Source viewer.

1710249402800.png

وفي هذه الصفحة البسيطة، لدينا اختيار view file المصدر وتخبرنا برؤية SOURCE FILE NAME , لاحظ أنه لا تظهر كل الملفات.

1710249452446.png

حسناً، لنختار أي منها على سبيل المثال، دعونا نذهب مع register.php

1710249672604.png

انقر على view file و يعطينا الإخراج السابق لهذا، فمن القياسي تماماً، ولكن مرة أخرى، تذكر من محاضرتنا النظرية

1710249818571.png

يجب أن نسأل أنفسنا السؤال، هل هذه الملفات التي لدينا في هذه القائمة هي فقط الملفات التي يمكننا قراءتها؟

1710249878169.png

حسناً، في هذا الصندوق

1710249925036.png
لا يمكننا حقاً كتابة أي اسم ملف آخر، ومع ذلك، يمكننا Intercept this Request مع تطبيقنا ومحاولة تغيير الملف , لنذهب إلى burp suite، ونضغط intercept is off
1710250561609.png
ولنختار أي ملف من تلك القائمه لنذهب ونختاره وننقر على view file.

1710251582888.png

لذا، فإننا intercept the request هنا وفي الأسفل هناك parameter باسم phpfile قيمته login.php

1710252593852.png

التي تحدد أي صفحة نريد، أن نعرف، حيث أننا لا يمكننا حقاً كتابتها هنا

1710252479333.png
لذا لنقوم بتغير في ال parameter باسم phpfile لنكتب

1710253124938.png

لنرى ما إذا كان هذا سيعمل، إذا قمنا بتوجيه هذا request ، نضغط intercept is off ، والذهاب مباشرةً هنا , حسنا لدينا output لل etc/passwd/

1710253422212.png
ومرة أخرى، هذه هي Broken Access Control Vulnerability , حصلنا على إخراج ملف لا ينبغي لنا أن نراه الآن، نفس الأمر ينطبق على هذه الParameter هنا في page.

1710253743808.png
هذه ببساطة Parameter تحدد أي مهمة نقوم بتنفيذها , لذا إذا ذهبنا إلى Insecure direct object reference، سترى أن اسم الصفحة هو Source viewer،
1710253906371.png

وربما لديه بعض الشفرة التي تعالج هذه الصفحة.

1710253986564.png

ولكن يمكننا أيضاً أن نحاول الذهاب وتنفيذ Broken Access Control مباشرة هنا إذا كتبنا etc/passwd/ في هذا الParameter .

1710254119603.png
حسنًا، نحصل على إخراج آخر و Broken Access Control Vulnerabilityأخرى حيث يخرج مرة أخرى ملف passwd

1710254330646.png

وهو نفس الأمر مع جميع الأمثلة الأخرى , لذا، على سبيل المثال، إذا ذهبنا إلى cookies هنا،

1710254411561.png

يمكننا مجددا كتابة etc/passwd/ هنا في هذه الصفحة

1710254708013.png
1710254672581.png

إذاً، هذا النوع من الثغرات ليس من الصعب تنفيذه بالطبع، قد يكون لديه بعض filters التي قد تحميه إلى حد ما وسنرى هذه filters في الجزء التالي مع مثال مختلف بإذن الله.
ومع ذلك، عادةً بمجرد وجود هذه الثغرة الأمنية، فمن المرجح ألا يكون لديها اي access control على الإطلاق
لذا، ستتمكن من الوصول إلى أشياء مختلفة يجب ألا تكون قادرًا على رؤيتها.

Ticket Price IDOR
لنناقش مثالًا آخر في جهازنا الوهمي OWASP Broken wep-apps-cl1
لذا في الجزء السابقة، قمنا بمراجعة تحدي Idor حيث قمنا بتغيير الملف الذي نريد أن نقوم بتجربته.
تغيريه الى (/etc/passwd) وبهذه الطريقة قمنا بعرض الملف الذي لم ينبغي لنا الوصول إليه.
الآن دعونا نلقي نظرة على نوع آخر من التحديات داخل تطبيقنا BWAPP انقر على ذلك.


1710257486308.png

وكالعادة، دعونا نقوم بتسجيل الدخول باستخدامCredentials، التي هي bee و bug، وانقر على تسجيل الدخول.

1710257552172.png

لدينا مستويات الأمان الحالية مضبوطة على Low Level وسنتركها على هذا النحو

1710257711238.png
والآن لنختار bug لذا توجه إلى التحديات IDOR التي تكون هنا , ومن بين هذه الثلاثة، سنذهب إلى هذا الذي يقول "insecure DOR (order Tickets)"، انقر على hack.

1710258056961.png

وسوف يوجهنا هذا التحدي، إنه تطبيق بسيط، يطلب كم عدد تذاكر السينما التي ترغب في طلبها، 15 يورو لكل تذكرة

1710258224698.png

وهنا يمكننا كتابة عدد التذاكر التي نريد طلبها على سبيل المثال، إذا كنت أرغب في طلب 10 منها وانقر على confirm،
سيخبرني أنني قد طلبت 10 تذاكر سينمائية وأن المبلغ الإجمالي المستحق من حسابك هو مئة وخمسون يورو أو ببساطة 10 مرات 15 يورو لكل تذكرة.


1710258403094.png
حسنًا، دعنا نرى ما إذا كان بإمكاننا Manipulate بهذا وربما تغيير السعر.
لذلك أول شيء سنفعله هو الضغط على intercept is off .داخل
burp
1710258595438.png
وهنا دعونا نذهب مع عشرة تذاكر مرة أخرى، انقر على تأكيد.

1710258711689.png

وهذا هو request الذي نحصل عليه هنا وفي الاسفل يمكننا رؤية جميع المعلمات التي يتم إرسالها مع هذا request .

1710258930854.png
لدينا كمية التذاكر تساوي 10، لدينا سعر التذكرة يساوي 15، action=order
الآن، هذا ثابت نعرف أن سعر التذكرة هو 15.


1710259107476.png

يمكننا محاولة تغيير سعر هذه التذكرة بدلاً من 15 لنجعل سعر التذكرة يكون فقط يورو واحد ولنرى ما إذا كان سيعمل إذا قمنا بتقديم بارسال request
1710259331201.png
العودة إلى صفحتنا , حسنًا، ها هو.
1710259486169.png
عمل بنجاح، طلبنا 10 تذاكر سينمائية والمبلغ الإجمالي الذي تم تحصيله كان عشرة يورو. لقد طلبنا بشكل أساسي 10 تذاكر بسعر يورو واحد لكل تذكرة.
لنرى أيضًا كيف سيبدو هذا على مستوى الأمان المتوسط لنقم بالنقر فوق المتوسط ولنقم بتحديد الإعدادات.


1710263271012.png

ما زلنا قمنا بتشغيل اعتراضنا لنقم بإيقافه ولنعود إلى الصفحة.

1710263335925.png

والآن دعنا نرى كيف يتصرف تطبيقنا إذا قمنا مرة أخرى بتحديد عشرة تذاكر وننقر على تأكيد

9218
حسنًا، لا يبدو حقًا أن هناك أي تغييرات من مستوى الأمان المنخفض الذي كان لدينا سابقًا.
كان لدينا للحصول على الناتج لقد طلبت 10 تذاكر سينمائية والمبلغ الإجمالي المطلوب هو مئة وخمسون يورو.
ولكن دعونا نرى، هل هناك أي فروقات في Request HTTP بمجرد أن قمنا Intercept ON.


1710268283035.png

دعونا مرة أخرى نحاول شراء 10 تذاكر ولنؤكد ذلك، وهذا هو طلبنا، ستلاحظ أنه لم يعد لدينا Parameter سعر التذاكر داخل طلبنا.
1710268456249.png
إذًا كيف سنقوم بتغيير السعر؟
حسنًا، يمكننا أن نلقي نظرة على كمية التذاكر هذه. "ticket_quantity"
كمية التذاكر هي Parameter لعدد التذاكر التي نرغب في شرائها ونحن يمكن أن نفترض أنه ربما يمكن أن يكون هناك Parameter سعر التذكر التي يمكن تعيينها إلى سعر التذكرة الواحدة.
ربما يمكننا أن نحاول إدخالها بأنفسنا هنا ونرى ما إذا كانت ستعمل كما يمكننا رؤية، تتم فصل هذه Parameter بواسطة هذا الرمز &
لنجرب إذا كتبنا هذا الرمز ومن ثم سعر التذكرة يساوي واحد، لنجرب تعيينه ليكون مساويًا لواحد.

ticket_price=1&
1710268944078.png

لنرى إذا كان حقًا سيعمل إذا قمنا Resend this request , إذا أعدنا ها هو لقد جعلنا هذا يعمل بنجاح.

1710269049573.png
لقد طلبنا عشرة تذاكر سينمائية بسعر عشرة يورو ومرة أخرى نجحنا في تنفيذ Vulnerability ايضا على مستوى المتوسط.
وبالنسبه الى high فهي كالمرحلة السابقة وتحتاج الى التخمين وقد لا تنجح بسبب ان الموقع عليه filter ولكن التجربه لا تخسر منها شئ وتطور المهارات



يرجى مراجعة الموضوع وتصحيح الاخطاء ان كان يوجد @King.Of.Noobs
المصادر
هنا
 

المرفقات

  • 1709627371197.png
    1709627371197.png
    325.1 KB · المشاهدات: 379
  • 1709630313342.png
    1709630313342.png
    54.7 KB · المشاهدات: 125
  • 1709725610449.png
    1709725610449.png
    17.9 KB · المشاهدات: 128
  • 1710252927868.png
    1710252927868.png
    4.4 KB · المشاهدات: 131
  • 1710253867534.png
    1710253867534.png
    50.8 KB · المشاهدات: 127
  • 1710259350211.png
    1710259350211.png
    2.9 KB · المشاهدات: 130
  • 1710263440375.png
    1710263440375.png
    114.1 KB · المشاهدات: 123
  • 1710263502048.png
    1710263502048.png
    90.4 KB · المشاهدات: 329
التعديل الأخير بواسطة المشرف:
بارك الله فيك يا احمد على هذا الطرح الرائع والشرح البسيط والمفهوم جداً
ابدعت صدقاً
استمر وننتظر جديدك​
 
لا تتوقف عن إبهارنا كالعادة، أحسنت الشرح، مجهود جبار الصراحة ❤️ 🔥
 

آخر المشاركات

فانوس

رمضان
عودة
أعلى