الوحدة 2
التحقق من صحة البيانات
آخر تحديث في: 28 ديسمبر 2024
GitHub تعديل هذه الصفحة علىالوحدة 2
آخر تحديث في: 28 ديسمبر 2024
GitHub تعديل هذه الصفحة علىبطريقة أو بأخرى يقبل كل تطبيق ويب المدخلات غير الموثوقة ويعالجها، وعادة ما يأتي هذا الإدخال من المستخدمين النهائيين ومتصفحاتهم ولكن قد يأتي أيضًا من مواقع ويب أخرى أو أنظمة خلفية. وحسب المكان الذي تتدفق إليه هذه المعلومات قد يكون لمعالجة البيانات تأثيرات غير مرغوب فيها على موقع الويب أو مستخدميه.
بعد استكمال هذا الموضوع الفرعي، سيتمكن الممارسون من العثور على طرق قد تؤدي بها صيغة أو هيكل البيانات المرسلة إلى موقع ويب إلى كشف الثغرات الأمنية واستغلالها.
يجب أن يكونوا قادرين أيضًا على العثور على الأنواع التالية من ثغرات التحقق من صحة البيانات واستغلالها:
كما قد تتذكر من مسار تعلم أساسيات أمان تطبيقات الويب، يمكن أن تتخذ ثغرات التحقق من صحة البيانات أشكالًا عديدة، وفي تطبيقات الويب عادة ما تأتي في شكل أحرف معينة عندما تُفسر البيانات في سياق متغير. على سبيل المثال، قد يكون رمزا < أو > غير ضارين في التعليمات البرمجية للتطبيق، ولكن يمكن أن تؤدي إلى ثغرة في البرمجة النصية عبر المواقع عند وضعها في صفحة ويب. قد تكون أحرف الاقتباس المفردة أو أحرف المسافة غير ضارة في صفحة ويب أو التعليمات البرمجية للتطبيق، ولكن يمكن أن تؤدي إلى ثغرة أمنية في حقن لغة الاستعلامات البنيوية عند تضمينها في استعلام قاعدة بيانات. بشكل عام لكل نظام معني بتطبيق ويب (لغة تمييز النص التشعبي، جافا سكريبت، لغة الاستعلامات البنيوية، أنظمة الملفات، يونكس شل (unix shell)، وما إلى ذلك) هناك نوع مختلف من الثغرات الأمنية المحتملة للتحقق من صحة البيانات.
تُعدّ البرمجة النصية عبر المواقع (يشار إليها عادة باسم Cross-site scripting أو XSS) هي عمومًا أسهل نوع من ثغرات التحقق من صحة البيانات التي يمكن التعامل معها، فالمدخلات والمخرجات مرئية للشخص الفاحص وتتطلب فقط معرفة لغة تمييز النص التشعبي وجافا سكريبت. وهي شائعة للغاية حيث يمكن العثور عليه في 1 من كل 5 مواقع تم اختبارها من قبل شركة تقييم مواقع كبرى، وبالتالي سنبدأ هنا.
توجه إلى موضوع البرمجة النصية عبر المواقع في أكاديمية بورت سويغر وأكمل القراءة والمخابر.
من الشائع لاختبار البرمجة النصية عبر المواقع هو إدخال عبارة “><{3>script>alert(‘xss’)</{8>script> في معلمات طلب مختلفة وانتظار انبثاق نافذة جافا سكريبت عند عودة الصفحة، ولكن ينجم عن ذلك مشكلتان:
تتمثل المشكلة الأولى بأنه في موقع يحتوي على الكثير من الثغرات المخزنة في البرمجة النصية عبر المواقع، قد ينتهي المطاف بك في النقر على نوافذ جافا سكريبت منبثقة متعددة في كل صفحة تزورها، وهذا أمر مزعج ومشتت للانتباه وسيؤدي إلى إبطاء الاختبار بشكل كبير.
بينما تتمثل المشكلة الثانية في أنه إذا استخدمت السلسلة ذاتها لكل إدخال فلن تعرف على الفور أي مدخلات تتوافق مع المخرجات، وإذا كان لديك برمجة نصية عبر المواقع مخزنة تظهر في أجزاء متعددة من الموقع، فقد تجد سلسلة اختبار البرمجة النصية عبر المواقع الخاصة بك في مكان ما على الموقع ولكنك لا تعرف مصدرها.
يمكنك بدلاً من ذلك القيام بشيء أكثر خفية ويوفر معلومات أكثر، تتمثل إحدى الطرق في استخدام سلسلة اختبار مثل “><{3>i>xss test - pagename - fieldname</{5>i><{6>q z=” حيث يكون pagename و fieldname هما الصفحة والمعلمة التي تجربها. إذا رأيت هذه السلسلة بالخط المائل في الموقع فستعرف على الفور أن البرمجة النصية عبر المواقع موجودة وستعرف مصدر إدخالها.
من المواضيع ذات الصلة بالبرمجة النصية عبر المواقع هي الثغرات المتعلقة بمشاركة الموارد عبر الأصول. لربما تساءلت عن سبب عدم قدرة تعليمات جافا سكريبت التي تعمل على موقع واحد على التفاعل مع موقع آخر يفتحه المستخدم في متصفحه (على سبيل المثال، في نافذة متصفح أخرى أو علامة تبويب أو حتى في إطار آي فريم (iframe))، ويرجع سبب ذلك إلى أن كل جافا سكريبت في المتصفح مرتبطة ب_أصل مما يعني تقريبًا ذات الشيء كموقع ويب. لا يمكن أن يتفاعل جافا سكريبت على أصل واحد مع صفحات الويب أو البيانات على أصل آخر.
لكن توجد استثناءات لذلك، وتسمى أكثرها شيوعًا مشاركة الموارد عبر الأصول (CORS) التي تسمح للموقع بأن يتيح للجافا سكريبت الخاصة بالمواقع الأخرى التفاعل مع الموقع نفسه. من الأمثلة المفيدة للغاية لذلك هي على سبيل المثال السماح لجافا سكريبت على www.example.com بالتفاعل مع api.example.com. قد يكون لتكوين مشاركة الموارد عبر الأصول بشكل غير صحيح تأثير مؤسف يتمثل في السماح للمهاجمين بتجاوز بعض الضوابط الأمنية للموقع. ليست الثغرات الأمنية المتعلقة بمشاركة الموارد عبر الأصول ثغرات تحقق من صحة البيانات، ولكن من المنطقي التعرّف عليها بعد التعلّم عن البرمجة النصية عبر المواقع.
توجه إلى موضوع مشاركة الموارد عبر الأصول على أكاديمية بورت سويغر وأكمل القراءة والمخابر.
يتميز حقن لغة الاستعلامات البنيوية (SQL Injection أو يشار إليه اختصارًا SQLi) بميزة كونه شائعًا نسبيًا في تطبيقات الويب ويؤدي أيضًا عادةً إلى اختراق كامل للتطبيق وبياناته وفي حين أنه من الأصعب قليلاً العثور عليه واستغلاله مقارنة بالبرمجة النصية عبر المواقع، إلا أنه توجد بعض التقنيات التي تجعل تحديد قابلية الاستغلال وإثباتها موثوقًا إلى حد ما ونظرًا لأهميته سيكون فئة الثغرات التالية التي سنركز عليها.
توجه إلى موضوع حقن لغة الاستعلامات البنيوية في أكاديمية بورت سويغر وأكمل القراءة والمخابر. بمجرد استكمالك المخابر يمكنك الاطلاع على بعض النصائح للتعرّف بأمان وموثوقية على حقن لغة الاستعلامات البنيوية.
تتمثل إحدى الطرق الشائعة لاختبار حقن لغة الاستعلامات البنيوية في المرور على موقع وإضافة ’ أو –;1=1 إلى نهايات المعلمات، ولكن ليس هذا أمرًا مثاليًا لأسباب عديدة. يتمثل الأول في عبارات التحديث، مثل عبارة لغة الاستعلامات البنيوية التالية:
update users set password='Password1!' where username='alice'
ماذا يحدث بالنسبة لاسم المستخدم إذا مررّت alice’ or –;1=1 بدلاً من alice’؟
update users set password='Password1!' where username='alice' or 1=1;--'
فجأة، يصبح لدى كل مستخدم في قاعدة البيانات كلمة المرور ذاتها، ولا يمكنك أبدًا معرفة (ما لم تكن قد راجعت التعليمات البرمجية المصدر بعناية فائقة) إلى أين ستذهب مدخلاتك ولذلك قد يكون استخدام عبارات or عند محاولة العثور على حقن لغة الاستعلامات البنيوية خطيرًا للغاية.
قد تواجه مشكلات أخرى حتى إذا لم تستبدل المعلومات في قاعدة البيانات باستخدام سلسلة الاختبار هذه. إليك استعلامًا متعدد الأسطر:
select *
from comments
where username = 'alice'
and draft=0
عندما تمرّر في معلمة استم مستخدم alice’ or 1=1;–ستكون نتيجة الاستعلام ما يلي:
select *
from comments
where username = 'alice' or 1=1;--'
and draft=0
لاحظ الفاصلة المنقوطة المتسللة هناك والتي تتسبب بقيام قاعدة البيانات بتفسير الاستعلام في البداية على أنه استعلام select (select * from comments where username = ‘alice’ or 1=1;) وثم استعلامًا من نوعand (and draft=0) . وتنبع المشكلة من حقيقة أنه لا يوجد استعلام and وبالتالي سيؤدي إلى حدوث خطأ، وقد يؤدي إلى حدوث خطأ لأسباب أخرى أيضًا حسب قاعدة البيانات. إذا قدم تطبيق الويب الاستجابة ذاتها لخطأ في قاعدة البيانات كما هو الحال بالنسبة لعدم وجود بيانات (وهو أمر يجب أن يحدث)، فلن تعرف أن بوجود حقن لغة الاستعلامات البنيوية في معلمة اسم المستخدم.
يتمثل الأمر الصحيح عند اختبار حقن لغة الاستعلامات البنيوية في معلمة السلسلة في إنشاء معلمة اختبار تعمل بغض النظر عن الاستعلام الموجود فيها، وأفضل ما يمكنك فعله هو استخدام طلبين أحدهما سيؤدي إلى إرجاع البيانات الأصلية من الاستعلام والآخر لن يؤدي إلى أي بيانات من الاستعلام. يمكنك بعدها مقارنة الإجابات الثلاث (الأصلية والتجربة 1 والتجربة 2). إذا أعادت الإجابة الأصلية والتجربة 1 ذات الإجابة، وأعادت التجربة 2 إجابة مختلفة، تكون قد حددت حقن لغة الاستعلامات البنيوية، وإليك مجموعة من السلاسل التي يمكنك استخدامها:
بالنسبة للتجربة 1، أضف ما يلي إلى المعلمة: ’ and ‘a’ like ‘%a
بالنسبة للتجربة 2، أضف ما يلي إلى المعلمة: ’ and ‘a’ like ‘%b
فيما يلي بعض الأمثلة على الاستعلامات التي تحتوي على هذه المعلمات:
select * from comments where username = 'alice' and 'a' like '%a'
select * from comments where username = 'alice' and 'a' like '%b'
لاحظ أن الاستعلام الأول سيعيد النتائج ذاتها كما لو تم تمرير alice على أنها معلمة في حين لن يعيد الاستعلام الثاني أي صفوف، وبالتالي لا يوجد خطر حدوث كارثة في حال وجود عبارة تحديث أو حذف يمكن حقنها. لاحظ أيضًا أن تغييرات بنية الاستعلام هي بالحد الأدنى وستعمل الاختبارات حتى في الاستعلامات متعددة الأسطر.
قد تتساءل عن سبب استخدام الأمثلة لعملية like بدلًا من =، وذلك لأن الاستعلام الذي تقوم بحقنه قد يستخدم عملية like، وإليك استعلام بحث مستند:
select * from documents where title like '%user text%'
تسمح عملية like باستخدام أحرف البدل وعادة ما تكون هي علامة النسبة المئوية. سيتطابق الاستعلام أعلاه مع أي مستندات تحتوي على سلسلة “user text” في أي مكان في عنوانها سواء كان ذلك في البداية أو الوسط أو النهاية. إذا استخدمنا شيئًا مثل ’ and ‘a’=‘a في عملية الحقن الخاصة بنا، فسيكون استعلام التجربة 1 هو:
select * from documents where title like '%user text' and 'a'='a%'
لن يُعيد ذلك أي صفوف، لأن “a” لا تساوي “%a” أبدًا وإذا استخدمنا التجربة 1 أعلاه، فسيكون الاستعلام:
select * from documents where title like '%user text' and 'a' like 'a%'
على الرغم من أنها غير متساوية، إلا أن “a” تشابه “a%"، وبالتالي يجب أن تعمل التجربتان 1 و2 أعلاه تقريبًا في أي موقف قائم على السلاسل، ولاحظ أنه إذا كنت تختبر ميزة البحث، فقد ترغب أيضًا في تجربة سلسلة تجربة 1 إضافية: %’ and ‘a’ like ‘%a. لاحظ أنه في الاستعلامات أعلاه، تم تغيير البحث الأصلي قليلاً، فقد تم حذف % بعد نص المستخدم، وإذا كنت تشك في وجود عملية مماثلة قيد الاستخدام، فيجب أن يعوض اختبار سلسلة 1 هذا عن ذلك.
في بعض الأحيان عندما يُمرر المتصفح قيمة عددية إلى خادم الويب يقوم الخادم بتضمينها في لغة الاستعلامات البنيوية على شكل سلسلة، ولكن في بعض الأحيان تُضمّن بشكل قيمة عددية وعادةً ما تكون لغة الاستعلامات البنيوية لعملية بحث بسيطة عن معلمة رقمية شيئًا يشابه ما يلي:
select * from stories where story_id=5
من الواضح أن إرسال story_id تتضمن 5’ and ‘1’ like ‘1 لن تنجح بسبب وجود خطأ في بناء الجملة. بدلاً من ذلك حاول إرسال طلبين أحدهما يحتوي على story_id يشمل 5 والآخر يحتوي على story_id يشمل 6-1. إذا لم ينتج عن الثاني أي نتيجة أو خطأ أو story مختلفة عن الطلب الذي يحتوي على story_id التي تشمل 5، يعني ذلك عدم وجود دليل على حقن لغة الاستعلامات البنيوية. لكن إذا نتج عن تمرير story_id يشمل 6-1 نفس استجابة story_id الذي يشمل 5 فهذا دليل قوي على وجود حقن لغة الاستعلامات البنيوية، ومن المرجح أن يبدو الاستعلام كما يلي:
select * from stories where story_id=6-1
في هذا المثال يُقيّم محرك قاعدة البيانات 6-1 باعتبارها رمزًا ويسترجع story التي يكون معرفها 5، ويمكنك عند هذه النقطة التوجه نحو استغلال الثغرة.
بالطبع لا يمكنك أبدًا معرفة ما يفعله التطبيق بالضبط بمدخلاتك أو كيفية استخدامه ولكن يجب أن تُعزز النصائح المذكورة أعلاه بشكل كبير من سلامة وفعالية تصيد حقن لغة الاستعلامات البنيوية الخاص بك.
يحدث اجتياز المسار عادةً في مواقع الويب التي تُدير الملفات التي يوفرها المستخدم أو الواجهات الإدارية ولكن يمكن أن يحدث في أي مكان يقوم فيه تطبيق الويب من جانب الخادم نفسه بفتح الملفات، وحسب ما قد يفعله الخادم بالملفات المعنية يمكن أن يتراوح التأثير من الكشف عن التعليمات البرمجية المصدر من ناحية وصولًا إلى الاستيلاء الكامل على خادم الويب من ناحية أخرى. من بين تطبيقات الويب الحديثة تعد أكثر الأماكن شيوعًا التي يمكن العثور فيها على نقاط ضعف اجتياز المسار هي برامج المدونات وأنظمة إدارة المحتوى الأخرى، مما يعرض الصحفيين المستقلين والمؤسسات الإعلامية الصغيرة للخطر بشكل خاص.
توجه إلى موضوع اجتياز المسار لدى أكاديمية بورت سويغر وأكمل القراءة والمخابر.
على الرغم من أن حقن الأوامر غير شائع نسبيًا في تطبيقات الويب الحديثة إلا أنه يؤدي في جميع الحالات تقريبًا إلى اختراق كامل لتطبيق الويب في حالة العثور عليه واستغلاله، وعندما يظهر عادةً ما يكون في واجهات الإدارة وبدرجة أقل في أنظمة إدارة المحتوى. توجه إلى موضوع حقن أوامر أكاديمية بورت سويغر وأكمل القراءة والمخابر.
تتمثل فكرة تزييف الطلب من جانب الخادم (عادةً ما يعرف اختصارًا باسم SSRF) بأنه يمكن لخادم تطبيق الويب إرسال طلب بروتوكول نقل النص التشعبي إلى أي خادم آخر، وفي بعض الأحيان يمكن للتطبيق عرض الرد على العميل. ولسنوات عديدة اعتبر تزييف الطلب من جانب الخادم ثغرة غير ذات أهمية إلى حد ما، وعند العثور عليها كان من الصعب استغلاله بأي طريقة ذات مغزى، ولكن مع ظهور الحوسبة السحابية أصبح تزييف الطلب من جانب الخادم فجأة مشكلة حرجة.
في البيئات السحابية يمكن للمسؤولين تعيين أذونات للخوادم الظاهرية بأنفسهم، ويُستخدم هذا عادةً لمنح الوصول إلى مجموعات تخزين البيانات وقواعد البيانات وخدمات الشبكة وما إلى ذلك. عادة ما تكون الموارد المعنية متاحة عبر الإنترنت مما يجعل أذونات الخادم طريقة التحكم الوحيدة في الوصول.
الطريقة التي تعمل بها أذونات الخادم هذه (التي تسمى أحيانًا هوية المثيل، ومفاتيح الآلة، ومفاتيح حساب الخدمة، والهويات المدارة، وما إلى ذلك) هي في الواقع بسيطة للغاية، وفي البيئة السحابية تكون الخوادم عبارة عن أجهزة ظاهرية تعمل على أجهزة فعلية. هناك خدمة ويب تعمل على الخادم الفعلي الذي يقبل فقط اتصالات الشبكة من الأجهزة الظاهرية التي تعمل على الخادم نفسه. عندما يتلقى طلبًا، يبحث عن الجهاز الظاهري عن طريق عنوان بروتوكول الإنترنت ويسترد معلومات حول الجهاز الظاهري بما في ذلك دور العميل والأذونات المرتبط بالجهاز الظاهري، ثم يُنشئ بيانات اعتماد سحابية لهذا الدور ويرسلها مرة أخرى في الاستجابة. يمكن للبرامج الموجودة على الجهاز الظاهري بعد ذلك استخدام بيانات الاعتماد هذه للمصادقة على الخدمات السحابية الأخرى. إذا كان بإمكان المهاجم أن يتسبب في قيام تطبيق ويب مستضاف على السحابة بإرسال طلبات بروتوكول نقل نص تشعبي عشوائي والرد بإجابات، فيمكن للمهاجم في كثير من الأحيان رؤية المثيلات السحابية للخادم، وإذا حدث ذلك، يمكن للمهاجم انتحال شخصية خادم الويب. أحد الأمثلة على ذلك هو اختراق كابيتال ون (Capital One) في عام 2019 الذي أدى إلى اختراق المعلومات الحساسة لأكثر من 100 مليون شخص.
توجه إلى موضوع تزييف الطلبات من جانب الخادم في أكاديمية بورت سويغر وأكمل القراءة والمخابر.
كانت تطبيقات الويب تقليديًا تستخدم قواعد بيانات لغة الاستعلامات البنيوية لتخزين بياناتها واسترجاعها. بالنسبة للعديد من استخدامات تطبيقات الويب، أصبح المطورون يفضلون قواعد بيانات غير لغة الاستعلامات البنيوية (على سبيل المثال مونغو دي بي (MongoDB)، ولكن يوجد العديد منها). تستخدم قواعد بيانات غير لغة الاستعلامات البنيوية بناء استعلامات مختلفة (ليس ذلك أمرًا غريبًا بالنظر إلى الاسم) ولكن المفاهيم العامة لحقن غير لغة الاستعلامات البنيوية تشبه تلك الخاصة بحقن لغة الاستعلامات البنيوية، ولكن التفاصيل مختلفة تمامًا.
توجه إلى موضوع حقن غير لغة الاستعلامات البنيوية على أكاديمية بورت سويغر وأكمل القراءة والمخابر.
يستخدم حقن الكيان الخارجي للغة التمييز القابلة للامتداد إمكانية ملفات لغة التمييز القابلة للامتداد على الإشارة إلى ملفات أخرى. قد تكون التطبيقات التي تسمح للمستخدمين بالتحكم في بيانات لغة التمييز القابلة للامتداد التي يعالجها التطبيق معرّضة للخطر. يسمح استغلال الثغرة عادةً للمهاجمين بقراءة ملفات عشوائية من خادم الويب وقد يسمح أيضًا بهجمات حجب الخدمة وفي حالات نادرة قد يسمح بتنفيذ التعليمات البرمجية عن بُعد، ولكن لحسن الحظ بالنسبة للمدافعين لا تعالج معظم تطبيقات الويب لغة التمييز القابلة للامتداد التي يمكن للمستخدم التحكم فيها.
توجه إلى موضوع حقن الكيان الخارجي للغة التمييز القابلة للامتداد على أكاديمية بورت سويغر وأكمل القراءة والمخابر.
تحتوي أكاديمية بورت سويغر على سلسلة من المخابر التي يمكنك استخدامها لاختبار مهاراتك والتحقق منها ولكل موضوع من المواضيع التالية، أكمل 1-3 من مختبرات مستوى “الممارس”:
إذا كنت تعمل مع زميل أو مرشد اشرح له كيفية عمل كل هجوم وكيف ستبحث وتثبت إمكانية استغلال نقاط الضعف المماثلة في الموقع الذي كنت تفحصه.
Report: 50% of all web applications were vulnerable to attacks in 2021
FreeSummary of a report on vulnerabilities in major web applications.
An overview of same-origin policy and cross-origin resource sharing
FreeIntroductions to same-origin policy and cross-origin resource sharing.
An SSRF, privileged AWS keys and the Capital One breach
FreeOverview of the 2019 Capital One breach through an SSRF bug.
تهانينا على إنهائك الوحدة 2!
حدد خانة الاختيار لتأكيد إكمالك والمتابعة إلى الوحدة التالية.
تحديد الوحدة الحالية على أنها مكتملة وحفظ التقدم للمستخدم.
لقد أكملت جميع الوحدات في مسار التعلم هذا.