الوحدة 2
التحقق من صحة البيانات
آخر تحديث في: 26 ديسمبر 2024
GitHub تعديل هذه الصفحة علىالوحدة 2
آخر تحديث في: 26 ديسمبر 2024
GitHub تعديل هذه الصفحة علىتتعلق فئة شائعة من الثغرات في تطبيقات الويب بالطريقة التي يعالج بها التطبيق البيانات التي يقدمها مستخدمو الموقع، ويكثر استخدام فئة الثغرات الأمنية هذه من قبل المهاجمين للتحكم بالكامل بمواقع الويب المستهدفة، وغالبًا ما يمكن اكتشافها عبر التقنيات الآلية. يُعدّ فهم آليات ثغرات التحقق من صحة البيانات مفيدًا للغاية أيضًا لتوضيح مواضيع الأمان المعقدة.
بعد استكمال هذا الموضوع الفرعي، يجب أن يكون الممارسون قادرين على القيام بما يلي: فهم الأنواع الشائعة من ثغرات التحقق من صحة البيانات فهم الآثار المحتملة لهذه الأنواع من الثغرات فهم آليات عمل هذه الثغرات فهم كيفية منع ثغرات هذه بشكل عام
تشمل الفئة الأولى من الثغرات الأمنية الخاصة بتطبيقات الويب تلك المتعلقة بالتحقق من صحة البيانات، وهناك العديد من الأنواع المختلفة من ثغرات التحقق من صحة البيانات ويمكن أن تحدث في أي نظام يعالج الإدخال. بشكل عام تحدث هذه الثغرات عندما يفترض التطبيق ضمنًا أمورًا حول طول و/أو محتوى البيانات التي يتم إرسالها، وعند استلام المدخلات و/أو معالجتها “تُفلت” البيانات من سياقها المقصود وتصبح رمزًا في سياقها الجديد. وسنتحدث عن كيفية نجاح ذلك وعواقبه وكيفية إصلاح الثغرة الأمنية لكل نوع محدد، وتأكد من أن تقرأ بالترتيب لأن جميع الأقسام مرتبطة بالأقسام التي تسبقها.
يأتي اسم “البرمجة النصية عبر المواقع” من طريقة عمل العمليات السابقة لاستغلال ثغرات البرمجة النصية عبر المواقع، ومن المرجح أن اسم “حقن جافا سكريبت” أفضل لوصفها ولكن الاسم القديم يبقى لأسباب تاريخية. تحدث البرمجة النصية عبر المواقع عندما يفسر المتصفح إدخال المستخدم على أنه جافا سكريبت، ويسمح هذا للمهاجم إلى حد ما بالتحكم في متصفح الويب الخاص بالشخص المستهدف في سياق موقع الويب المستهدف. يمكن للمهاجم سرقة ملفات تعريف الارتباط الخاصة بالشخص المستهدف مما يسمح للمهاجم بانتحال شخصيته على الموقع. بالإضافة إلى ذلك، يمكن للمهاجم استخراج أي من بيانات الشخص المستهدف تلقائيًا من موقع الويب المستهدف ويمكنه بالمثل تنفيذ إجراءات على الموقع المستهدف مثل المستخدم. وأخيرًا يمكن للمهاجم تغيير مظهر موقع الويب للشخص المستهدف على سبيل المثال عرض صفحة إعادة مصادقة مزيفة ترسل بيانات اعتماد المستخدم إلى المهاجم أو تطلب منهم تنزيل برمجيات ضارة يُزعم أنها تأتي من موقع موثوق به.
في حين أن هذا الهجوم قوي إلاّ أن هناك حدودًا، ويقتصر المهاجم على التحكم في محتوى موقع الويب المستهدف في سياق متصفح المستخدم، ولا يمكن للمهاجم التفاعل مع مواقع الويب الأخرى وتقتصر إجراءاته على ميزات أمان المتصفح.
يعمل هذا الهجوم من الناحية الميكانيكية من خلال تطبيق ويب يتلقى بيانات المستخدم ثم يدمج بيانات المستخدم هذه مباشرة في صفحة ويب.
فكر في حالة موقع منتدى مناقشة يسمح للمستخدمين باختيار الاسم المعروض:
تحتوي صفحة الويب غير الفاخرة هذه على رمز لغة تمييز النص التشعبي التالي:
<html><body><form>
Name: <input name="disp_name"><br>
<input type="submit">
</form></html>
عندما يتلقى اسمًا من المستخدم فإنه يعرضه في النموذج:
باستخدام لغة تمييز النص التشعبي التالية:
<html><body><form>
Name: <input name="disp_name" value="Alice"><br>
<input type="submit">
</form></html>
تبدو الأمور على خير حتى الآن، ولكن ماذا سيحدث إذا أدخل المستخدم بعض المدخلات الأكثر صعوبة، مثل:
Alice"><script>alert("Owned by Alice")</script><i q="
عند إنشاء صفحة الويب ستبدو مختلفة بعض الشيء:
كيف حصل ذلك؟ لنستخدم بعض الألوان لتسليط الضوء على ما يحدث، وتذكر أن تطبيق الويب يتعامل فقط مع مدخلات المستخدم كنص وليس لديه أي فكرة عن الألوان.
Alice"><script>alert("Owned by Alice")</script><i q="
يأخذ التطبيق ببساطة المدخلات من المستخدم ويضعها حرفيًا ضمن لغة تمييز النص التشعبي التي يولدها ومن وجهة نظر تطبيق الويب ومتصفح الويب كله مجرد نص غير متمايز.
<html><body><form>
Name: <input name="disp_name" value="Alice"><script>alert("Owned by
Alice")</script><i q=""><br>
<input type="submit">
</form></html>
لاحظ “> باللون الأحمر. تخبر هذه العلامة المتصفح باكتمال سمة قيمة إدخال لغة تمييز النص التشعبي ووسم الإدخال بعد ذلك. يأتي النص باللون الأزرق بعده على شكل علامة نصية تُشغل جافا سكريبت التي تظهر مربع تنبيه. أخيرًا يُستخدم <i q=” لأغراض التنظيف حيث يمنع صفحة الويب من عرض بقايا وسم الإدخال الأصلي، ويمكننا استخدام تمييز وتنسيق ألوان مختلفة لإظهار كيفية تفسير المتصفح لصفحة الويب التي تم إنشاؤها:
<html><body><form>
Name: <input name="disp_name" value="Alice"><script>alert("Owned by
Alice")</script>
<i q=""><br>
<input type="submit">
</form></html>
كما هو الحال لا يتسبب مثال البرمجة النصية عبر المواقع هذا بأي شيء ضار والشخص الوحيد المتأثر هو أليس (Alice) نفسها، ولكن إذا تمكنت مهاجمتنا أليس من جعل شخص آخر يرى اسمها المعروض وكانت جافا سكريبت الخاصة بها تتسبب بشيء ضار فسيكون بإمكانها أداء هجوم حقيقي.
سجّل الدخول إلى دي في دبليو إيه الخاص بك وتأكد من تعيين مستوى الأمان ليكون منخفضًا (انظر قسم “الإعداد” في مقدمة مسار التعلّم هذا لمزيد من المعلومات). انتقل إلى قسم “البرمجة النصية عبر المواقع (المعكوس)” سترى أن حقل إدخال “What’s your name?” معرّض لثغرة البرمجة النصية عبر المواقع> جرّب بعدها إدخال اسم يتسبب في ظهور مربع تنبيه جافا سكريبت عند النقر على زر “إرسال”.
وتسمى أفضل تقنية لمنع البرمجة النصية عبر المواقع يمكن استخدامها هي ترميز الإخراج، ولاحظ أنه في المثال أعلاه تم تمكين الهجوم من خلال استخدام المحرفين " و >، حيث تتحكم هذه المحارف في بنية الصفحة في سياق صفحات الويب. في لغة تمييز النص التشعبي يمكن ترميز جميع هذه المحارف بحيث يعرف متصفح الويب أن يعرض اقتباسًا مزدوجًا أو قوس زاوية بدلًا من تعديل بنية الصفحة، وفي هذه الحالة إذا تم ترميز بيانات أليس قبل دمجها في صفحة الويب فسيتم إنشاء لغة تمييز النص التشعبي التالية:
<html><body><form>
Name: <input name="disp_name" value="Alice"><script>alert("Owned by Alice")</script><i q=""><br>
<input type="submit">
</form></html>
والتي من شأنها أن تعرض ما يلي:
يعتمد ترميز المخرجات على السياق الذي سيتم فيه استخدام البيانات، وبالنسبة للغة تمييز النص التشعبي يمكنك ترميز كيانات لغة تمييز النص التشعبي في البيانات. أما بالنسبة للبيانات التي سيتم تضمينها في كتلة جافا سكريبت سيتم استخدام ترميز مختلف. في حال كان من المقرر استخدام بيانات المستخدم في استعلام قاعدة بيانات فسيتم استخدام نوع آخر من الترميز، ويجب أن تحتوي أطر الويب والمكتبات على وظائف لأداء ترميز الخرج لك ومن الأفضل (نأمل) استخدام هذه الوظائف المتقدمة بدلًا من محاولة كتابتها بالاستناد إلى المبادئ الأولى.
لمزيد من المعلومات حول البرمجة النصية عبر المواقع، راجع دليل مشروع أمان تطبيق الويب المفتوح للبرمجة النصية عبر المواقع (XSS) ولأجل دراسة متعمقة راجعمسار تعلّم تقييم أمان تطبيقات الويب.
حيث تسمح البرمجة النصية عبر المواقع لبيانات المستخدم بالخروج من سياقها وتفسيرها على أنها لغة تمييز النص التشعبي وجافا سكريبت في متصفح الويب الخاص بالضحية، يسمح حقن لغة الاستعلامات البنيوية لبيانات المستخدم بالخروج من سياقها وتفسيرها على أنها لغة الاستعلامات البنيوية في قاعدة بيانات تطبيق الويب. وتستخدم معظم تطبيقات الويب قاعدة بيانات خلفية لتخزين البيانات واستردادها، حيث عادة ما تستخدم لغة الاستعلامات البنيوية لتحقيق الوصول إلى البيانات هذا ويمكن أن يحدث حقن لغة الاستعلامات البنيوية عند استكمال بيانات المستخدم في استعلام.
نظرًا لأن لغة الاستعلامات البنيوية التي يتحكم فيها المهاجم تعمل في بيئة الخادم، فإن ثغرات حقن لغة الاستعلام البنيوية تكون عمومًا أكثر خطورة من البرمجة النصية عبر المواقع. وبينما تسمح ثغرة البرمجة النصية عبر المواقع للمهاجم باستهداف المستخدمين الآخرين ربما من خلال نوع من الانتحال بالهندسة الاجتماعية ويمكن لحقن لغة الاستعلامات البنيوية أن يمنح المهاجم حق الوصول للقراءة والكتابة إلى جميع بيانات المستخدم على الموقع.
يمكن للمهاجم أيضًا قراءة وكتابة أي بيانات أخرى مخزنة في قاعدة البيانات التي يمكن لتطبيق الويب تقييمها، وفي كثير من الأحيان يمكن للمهاجم استخدام وصول لغة الاستعلامات البنيوية للحصول على القدرة على تشغيل الأوامر على خادم قاعدة البيانات نفسه والوصول بشكل كامل عن بُعد إلى البنية التحتية الخلفية للموقع.
كيف يعمل حقن لغة الاستعلامات البنيوية؟
فكر في تطبيق ويب توجد فيه منصة تذاكر تسرد اسم كل أداة ووصفها وإصدارها في فئة، حيث سيقوم المستخدم أيضًا بإرسال معلمة معرف وقد تكون موجودة في عنوان موقع ويب للصفحة التي تقدم الطلب، كما يبدو الكود البرمجية التي تنشئ لغة الاستعلام البنيوية التي تسترد هذه البيانات كما يلي:
$sql = 'select productid, name, description, version from products where categoryid='+request_params['id']
عندما يرسل المستخدم معلمة id مثل 1 أو 32 سيكون كل شيء على ما يرام وسنحصل على استعلام مثل:
select toolid, name, description, version
from tools
where categoryid=32
لكن تبدأ المشكلة عندما يرسل مستخدم فضولي استعلام id 2-1 للأرقام 2-1 ويلحظ أنه يحصل على نفس ذات نتائج استعلام id للرقم1:
select toolid, name, description, version
from tools
where categoryid=2-1
يُوضح هذا للمهاجم أن التطبيق عرضة لحقن لغة الاستعلامات البنيوية، فهو يفسر مدخلاتهم على أنها تعليمة برمجية (تنفيذ التعبير 2-1) بدلًا من بيانات (البحث عن فئة يكون معرفها حرفيًا “2-1”).
بعد القليل من البحث يرسلون استعلام id يضم -1 union all select 1, username, password, 1.0 from admin_users وينتج عن ذلك استعلام لغة استعلامات بنيوية تضم:
select toolid, name, description, version
from tools
where toolid=-1
union all
select 1, username, password, 1.0
from admin_users
ما يفعله هذا الاستعلام هو البحث عن جميع الأدوات التي تحتوي على معرّف فئة -1 (والذي ربما لا يكون أيًا منها) ثم أضف إلى تلك القائمة أسماء المستخدمين وكلمات المرور للمستخدمين المسؤولين عن منصة التذاكر، ثم يقوم التطبيق بتنسيق هذا بشكل جدول لغة تمييز النص التشعبي ملائم وقابل للقراءة ويعيده إلى المستخدم الذي يطلب البيانات. لن يسمح هذا للمهاجم فقط بتسجيل الدخول إلى نظام التذاكر ولكن إذا أعاد أي من هؤلاء المستخدمين استخدام كلمات المرور الخاصة بهم فقد يتمكن المهاجم من الوصول إلى أنظمة أخرى في نفس المؤسسة.
سجّل الدخول إلى دي في دبليو إيه الخاص بك وتأكد من ضبط مستوى الأمان ليكون منخفضًا. انتقل إلى صفحة “حقن لغة الاستعلامات البنيوية” وجرب الإدخال. هل يمكنك أن تتسبب بجعل الصفحة تعيد قائمة بجميع حسابات المستخدمين؟ هل يمكنك استخدام تقنية “union all” لاسترداد البيانات من الجداول الأخرى مثل الجدول المسمى “information_schema.tables”؟
على عكس البرمجة النصية عبر المواقع، ترميز الخرج ليس طريقة موثوقة لمنع حقن لغة الاستعلامات البنيوية. لاحظ أنه في الأمثلة أعلاه يستخدم المهاجم المسافة و الـ - لتغيير سياق بياناته من سياق البيانات في استعلام لغة الاستعلامات البنيوية إلى سياق بنية الاستعلام نفسه، ويمكن لمزيج من ترشيح المدخلات المدرك للنوع وترميز المخرجات أن يمنع حقن لغة الاستعلامات البنيوية من الناحية النظرية، ولكن من الناحية العملية لا يمكن الاعتماد على هذا النهج.
بدلًا من ذلك يمكننا استخدام ميزة لكل محرك قاعدة بيانات تتخطى تمامًا بعض التحليل الأولي للاستعلام، يُطلق على هذا النوع من الاستعلامات اسم الاستعلام المعلمي، واستخدامه يُسمى عادةً بربط المعلمات. بدلًا من إرسال قاعدة البيانات سلسلة نصية تحتوي على كل من بنية الاستعلام وبيانات المستخدم نُرسل سلسلة واحدة تحتوي على بنية الاستعلام مع عناصر نائبة فيها للبيانات. وإلى جانب هذه السلسلة نُرسل البيانات لكل عنصر نائب، وبهذه الطريقة لا يتم تحليل بيانات المستخدم أبدًا في سياق لغة الاستعلامات البنيوية، وبغض النظر عما يرسلونه سيتم التعامل معها حصريًا على أنها بيانات، مم لا يسمح بالحماية من حقن لغة الاستعلامات البنيوية فحسب بل يجعل استعلامات قاعدة البيانات أسرع قليلًا.
لمزيد من المعلومات حول حقن لغة الاستعلامات البنيوية،
راجع دليل مشروع أمان تطبيق الويب المفتوح،
ولأجل نظرة متعمّقة،
راجع مسار تعلّم تقييم أمان تطبيقات الويبمسار تعلّم تقييم أمان تطبيقات الويب.
تتضمن هذه الفئة من الثغرات الأمنية قيام المستخدم بإرسال تطبيق ويب يُخرّب تفاعلات التطبيق مع نظام الملفات، وباستخدام هذا النوع من الثغرات الأمنية يمكن للمهاجم التأثير أو التحكم في اسم مسار الملف الذي يقرأ منه تطبيق الويب أو يكتب فيه مما قد يمنح المهاجم حق الوصول الكامل إلى أي ملف يمكن لخادم الويب قراءته أو كتابته. حسب ما يُخزن على خادم الويب قد يمنح هذا قدرات مختلفة للمهاجم، ولكن الأهداف الشائعة هي ملفات التكوين التي غالبًا ما تحتوي على بيانات اعتماد لقواعد البيانات وخدمات الشبكة الخارجية الأخرى ورمز المصدر للتطبيق نفسه.
فكر في تطبيق يحتفظ ببعض البيانات على نظام الملفات بدلًا من قاعدة بيانات، على سبيل المثال موقع متعدد اللغات يبقي التوطين في الملفات، ومن المحتمل أن يبدو رمز الصفحة الرئيسية كما يلي:
<?
function localize($content, $lang) {
return fread("../config/lang/"+$lang+"/"+$content);
}
?>
<html>
<head><title><?= localize($_GET("pg")+".title",$_GET("hl"))?></title></head>
<body><?= localize($_GET("pg"), $_GET("hl"))?></body>
</html>
لاحظ أنه يأخذ المعلمات من سلسلة عنوان موقع ويب ويستخدمها لقراءة الملفات من نظام الملفات بما في ذلك محتواها في الصفحة.
عند تحميل http://www.example.com/?hl=en-us&pg=main, the server looks for ../config/lang/en-us/main.title and ../config/lang/en-us/main. ربما يبدو ناتج لغة تمييز النص التشعبي كما يلي:
<html>
<head><title>Cool site: Main</title></head>
<body><h1>Hello, world!</h1></body>
</html>
الآن ماذا سيحدث إذا قمنا بدلًا من ذلك بزيارة http://www.example.com/?hl=../../../../../../../../&pg=../etc/passwd? سيبحث الموقع عن ../config/lang/../../../../../../../../&pg=../etc/passwd.title and ../config/lang/../../../../../../../../&pg=../etc/passwd. من غير المحتمل العثور على الأول ولكن على افتراض أن الخادم تجاهل الخطأ قد نحصل على صفحة ويب تبدو كما يلي:
<html>
<head><title></title></head>
<body>nobody:*:-2:-2:Unprivileged User:/var/empty:/usr/bin/false
root:*:0:0:System Administrator:/var/root:/bin/sh
daemon:*:1:1:System Services:/var/root:/usr/bin/false
</body>
</html>
في أي نظام حديث يُشابه يونكس لا يُعدّ الاستيلاء على /etc/passwd أمرًا كبيرًا ولكن إذا تمكن المهاجم من فرض ملفات أخرى على النظام بالقوة الغاشمة (ربما ملف تكوين أو شيء من هذا القبيل /home/dev/vpn-credentials.txt)، فقد تكون النتائج سيئة للغاية، والأسوأ من ذلك هو موقع يسمح للمستخدمين بتحميل الملفات ولكن يمكن للمستخدم التلاعب بموقع الملف ليصبح تعليمة برمجية (على سبيل المثال .php، .asp، وما إلى ذلك) داخل جذر الويب. في هذه الحالة، يمكن للمهاجم تحميل ويب شل وتشغيل الأوامر على خادم الويب.
سجّل الدخول إلى دي في دبليو إيه الخاص بك وتأكد من ضبط مستوى الأمان ليكون منخفضًا. انتقل إلى صفحة “File Inclusion (تضمين الملف)” وجرب عنوان موقع ويب الذي تزوره عند النقر على ملف. هل يمكنك استرداد ملف /etc/passwd؟
إلى حد كبير تُعدّ أفضل نصائح لمنع هذا النوع من الهجمات هي “ألا تستخدم نظام الملفات في التعليمات البرمجية للتطبيق الخاص بك.” وفي حين أن هذه النصيحة فعالة إلا أنها ليست عملية دائمًا، ويمكن أن يكون الحل المختلط هو تخزين أسماء الملفات في قاعدة بيانات وقبول طلبات فهرسة قاعدة البيانات من المستخدم. وفي المثال أعلاه يمكن أن تبدو قاعدة البيانات بالشكل التالي:
lang | page | type | location |
en-us | main | title | ../config/lang/en-us/main.title |
en-us | main | body | ../config/lang/en-us/main |
إذا لم يكن ذلك ممكنًا فيجب على الموقع استخدام وقبول مجموعة محدودة جدًا من المحارف (مثل الأحرف والأرقام) لمكونات اسم الملف التي يحددها المستخدم، وسيظل من المحتمل أن يسمح هذا للمستخدمين بقراءة أو كتابة ملفات عشوائية داخل دليل محدد، لذلك يجب على مطوري التطبيقات التأكد من أن الملفات الموجودة في هذا الدليل غير قابلة للتنفيذ بواسطة خادم الويب وأنه لا توجد بيانات حساسة أو معلومات تكوين مهمة فيه.
لمزيد من المعلومات حول حقن المسار، راجع دليل مشروع أمان تطبيق الويب المفتوح حول هذا الموضوع ولأجل دراسة متعمقة راجعمسار تعلّم تقييم أمان تطبيقات الويب.
يشبه حقن شل حقن المسار من حيث أنه يتضمن تفاعلات التطبيق مع نظام التشغيل، وفي هذه الحالة يقوم التطبيق مباشرة بتنفيذ أمر شل أو عدة أوامر ومن الممكن للمهاجم تغيير الأوامر التي يتم تنفيذها. تأثير حقن شل مرتفع للغاية وقد يسمح للمهاجم بتشغيل الأوامر الخاصة به على أجهزة خادم الويب الأساسية ويكاد يكون الاختراق الكامل لتطبيق الويب مضمونًا، ومع مرور الوقت من المحتمل أن يطرأ اختراق للبنية التحتية الأخرى في بيئة الخادم.
فكر في تطبيق يسمح للمستخدمين بالتحقق من اتصال الشبكة بالأنظمة الأخرى من خادم الويب، وإليك الحد الأدنى من التعليمات البرمجية لصفحة من نوع المعالج المسبق للنصوص الفائقة (PHP) التي تقوم بذلك:
<html>
<head><title>Network connectivity check</title></head>
<body>
<h1>Network connectivity check</h1>
<form method="GET">
<input name="host">
<input type="submit">
</form>
<?
if ($_GET("host")) {
print(" <h2>Results</h2>\r<pre>".shell_exec("ping -c 3 ".$_GET("host"))."</pre>");
}
?>
</body>
</html>
If the users enters “8.8.8.8”, the page uses the shell_exec function to run the command ping -c 3 8.8.8.8
, and the resulting HTML looks something like this:
<html>
<head><title>Network connectivity check</title></head>
<body>
<h1>Network connectivity check</h1>
<form method="GET">
<input name="host">
<input type="submit">
</form>
<h2>Results</h2>
<pre>PING 8.8.8.8 (8.8.8.8): 56 data bytes
64 bytes from 8.8.8.8: icmp_seq=0 ttl=119 time=7.266 ms
64 bytes from 8.8.8.8: icmp_seq=1 ttl=119 time=8.681 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=119 time=12.481 ms
--- 8.8.8.8 ping statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 7.266/9.476/12.481/2.202 ms</pre>
</body>
</html>
Super handy! However, what will happen if the user enters “8.8.8.8; ls -1 /
” instead? The shell command run will be ping -c 3 8.8.8.8; ls -1 /
, and the resulting web page will look something like:
<html>
<head><title>Network connectivity check</title></head>
<body>
<h1>Network connectivity check</h1>
<form method="GET">
<input name="host">
<input type="submit">
</form>
<h2>Results</h2>
<pre>PING 8.8.8.8 (8.8.8.8): 56 data bytes
64 bytes from 8.8.8.8: icmp_seq=0 ttl=119 time=5.611 ms
64 bytes from 8.8.8.8: icmp_seq=1 ttl=119 time=11.918 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=119 time=9.519 ms
--- 8.8.8.8 ping statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 5.611/9.016/11.918/2.599 ms
Applications
Library
System
Users
Volumes
bin
cores
dev
etc
home
opt
private
sbin
tmp
usr
var</pre>
</body>
</html>
ماذا حدث؟ يرى الشل أمر اختبار اتصال (ping) 8.8.8.8 ثم فاصلة منقوطة، وفي معظم أنواع شل الشبيهة بنظام يونكس يفصل أمر الفاصلة المنقوطة الأوامر الفردية التي تم تشغيلها معًا على سطر واحد. ولذلك قامت شل بتشغيل أمر اختبار الاتصال ثم قامت بتشغيل الأمر التالي لسرد محتويات الدليل الجذر، حيث تجمع مخرجات كلا الأمرين ثم أعادت تلك النتائج إلى خادم الويب.
من الواضح أنه يمكن استخدام شيء من هذا القبيل لاسترداد أي ملف تقريبًا من خادم الويب (على سبيل المثال، باستخدام أمر"cat")، وقد يتسبب المهاجم في قيام خادم الويب بتنزيل الملفات (بما في ذلك الملفات التنفيذية) من خوادم أخرى ثم تشغيل هذه الأوامر. ويمكن أن تكون هذه الملفات التنفيذية التي تم تنزيلها عبارة عن ثغرات تسمح للمهاجم بتصعيد الصلاحيات من مستخدم خادم الويب إلى مستخدم إداري (مثل النظام أو الجذر) مما يمنح المهاجم السيطرة الكاملة على خادم الويب.
سجّل الدخول إلى دي في دبليو إيه الخاص بك وتأكد من ضبط مستوى الأمان ليكون منخفضًا. ثم انتقل إلى صفحة “حقن الأوامر (Command Injection)"، وجرب الإدخال هل يمكنك سرد محتويات الدليل الجذر لخادم الويب؟
كما هو الحال مع حقن المسار فإن أفضل طريقة لمنع حقن الشل هي “لا تفعل ذلك”، وعلى عكس حقن المسار لا ينبغي أن تكون النصيحة عدم تشغيل أوامر شل من خادم الويب أمرًا يُعتمد بالكامل. ومن الصعب تنفيذ البدائل الأخرى (مثل التحقق من صحة بيانات الإدخال) بشكل صحيح وقد يكون ذلك مستحيلًا إذا كان التطبيق يحتاج إلى السماح بأي نوع من المدخلات غير البسيطة.
لمزيد من المعلومات حول حقن شل راجعدليل مشروع أمان تطبيق الويب المفتوح عليه و دليل مشروع أمان تطبيق الويب المفتوح حول منعه . ولأجل استكشاف متعمّق راجع مسار تعلّم تقييم أمان تطبيقات الويب.
(هذا ملخص للتمرين الموضح أعلاه في الموضوع الفرعي) انتقل إلى نسخة دي في دبليو إيه الخاصة بك، واضبط مستوى الصعوبة ليكون “منخفض” وأكمل الأقسام التالية:
بالنسبة لكل قسم من الأقسام التالية تتمثل مهمتك في العثور على الثغرة الأمنية واستغلالها كما هو موضح في صفحة دي في دبليو إيه المعنية، ونظرًا لأنه قد لا يكون لديك الكثير من الخبرة في جافا سكريبت أو لغة الاستعلامات البنيوية أو سطور الأوامر فلا بأس من استخدام أدلة التوجيه خطوة بخطوة (هناك العديد من الأدلة عبر الإنترنت التي تنظر إلى دي في دبليو إيه) أو الأدلة لمساعدتك في التمارين. وتأكد فقط أنه بدلًا من مجرد نسخ ولصق الأوامر من أدلة التوجيه خطوة بخطوة أن تقوم في الواقع بشرح ما تفعله كل صفحة دي في دبليو إيه وماهية الثغرات.
يُعدّ التحقق من صحة البيانات جانبًا مهمًا من جوانب أمان تطبيقات الويب يضمن أن بيانات الإدخال آمنة ومهيأة بشكل صحيح وخالية من النوايا الخبيثة، ويمكن أن يؤدي الفشل في تنفيذ التحقق الكافي من صحة البيانات إلى ترك تطبيقات الويب عرضة لمختلف عمليات الاستغلال. وتستكشف الأسئلة التالية أهمية التحقق من صحة البيانات في تطبيقات وتقنيات الويب الوقاية من ثغرات التحقق من صحة البيانات.
وإذا كان ذلك ممكنًا ناقش إجاباتك على هذه الأسئلة مع زميل أو مرشد يساعد في التحقق من فهمك للموضوع بشكل صحيح.
السؤال 1
ما هي النتيجة الشائعة للفشل في أداء التحقق المناسب من صحة البيانات في تطبيق الويب؟ أ) زيادة أداء الخادم ب) تجربة مستخدم محسنة ج) هجمات حقن لغة الاستعلامات البنيوية د) تحسين سلامة البيانات
ج) هجمات حقن لغة الاستعلامات البنيوية الإجابة الصحيحة عن السؤال 1: ج) هجمات حقن لغة الاستعلامات البنيوية
الشرح: أ) غير صحيح. عادة لا يؤدي الفشل في تنفيذ التحقق المناسب من صحة البيانات إلى تحسين أداء الخادم. ب) غير صحيح. في حين أن التحقق المناسب من صحة البيانات يساهم في تحسين تجربة المستخدم من خلال منع الأخطاء لا يعزز غيابها من تجربة المستخدم. ج) صحيح. دون التحقق من صحة البيانات بشكل صحيح، تكون تطبيقات الويب عرضة لهجمات حقن لغة الاستعلامات البنيوية حيث يمكن للمهاجمين التعامل مع استعلامات قاعدة البيانات عن طريق حقن تعليمات ضارة بلغة الاستعلامات البنيوية. د) غير صحيح. يُساعد التحقق من صحة البيانات في الحفاظ على سلامة البيانات ولكن لا يحسن غيابها من سلامة البيانات.
السؤال 2
أي مما يلي يُعدّ آلية فعّالة لمنع هجمات البرمجة النصية عبر المواقع في تطبيقات الويب؟ أ) استخدام النص العادي لتخزين البيانات الحساسة ب) إلغاء مدخلات المستخدم قبل عرضها ج) تخزين كلمات مرور المستخدم في النص العادي د) تعطيل تشفير بروتوكول نقل النص التشعبي الآمن
الإجابة الصحيحة عن السؤال 2: ب) إلغاء مدخلات المستخدم قبل عرضها
الشرح: أ) غير صحيح. لا يمنع استخدام النص العادي لتخزين البيانات الحساسة هجمات البرمجة النصية عبر المواقع وإنما في الواقع يزيد من خطر تعرض البيانات. ب) صحيح. يساعد إلغاء إدخال المستخدم قبل عرضه على التخفيف من هجمات البرمجة النصية عبر المواقع من خلال جعل أي برامج نصية ضارة محتملة غير ضارة وبالتالي منعها من التنفيذ في متصفحات المستخدمين. ج) غير صحيح. يعد تخزين كلمات مرور المستخدم في نص عادي خطرًا أمنيًا ولا علاقة له بمنع هجمات البرمجة النصية عبر المواقع. د) غير صحيح. يؤدي تعطيل تشفير بروتوكول نقل النص التشعبي الآمن إلى تعريض البيانات الحساسة للاعتراض ولا يمنع هجمات البرمجة النصية عبر المواقع.
السؤال 3
ما هي التقنية الفعالة في منع هجمات حقن لغة الاستعلامات البنيوية في تطبيقات الويب؟
أ) استخدام استعلامات لغة الاستعلامات البنيوية الديناميكية
ب) استخدام تعقيم الإدخالات والاستعلامات المعيارية
ج) تخزين البيانات الحساسة في نص عادي
د) تعطيل رسائل الخطأ الإجابة الصحيحة عن السؤال 3: ب) توظيف تعقيم الإدخالات ومعلمات الاستعلام الشرح:
أ) غير صحيح. يؤدي استخدام استعلامات لغة الاستعلامات البنيوية الديناميكية دون التحقق من صحة المدخلات وتعقيمها بشكل صحيح إلى زيادة خطر هجمات حقن لغة الاستعلامات البنيوية.
ب) صحيح. يساعد استخدام تعقيم المدخلات والاستعلامات ذات المعلمات على منع هجمات حقن لغة الاستعلامات البنيوية من خلال ضمان التعامل مع مدخلات المستخدم على أنها بيانات بدلًا من تعليمات برمجية قابلة للتنفيذ وبالتالي تُحيّد محاولات حقن لغة الاستعلامات البنيوية الضارة.
ج) غير صحيح. يزيد تخزين البيانات الحساسة في نص عادي من خطر تعرض البيانات ولكنه لا يمنع هجمات حقن لغة الاستعلامات البنيوية بشكل مباشر.
د) غير صحيح. قد يؤدي تعطيل رسائل الخطأ إلى إخفاء الثغرات الأمنية المحتملة عن المهاجمين ولكنه لا يعالج السبب الجذري لثغرات حقن لغة الاستعلامات البنيوية.الإجابة وشرح
السؤال 4 أي من العبارات التالية تشرح بأفضل صورة كيف يساعد التحقق من صحة البيانات بشكل صحيح في منع هجمات حقن الأوامر في أمان تطبيقات الويب؟ أ) يُقيد التحقق من صحة البيانات الإدخال ضمن محارف وأنماط محددة مسبقًا مما يقلل من احتمال حقن الأوامر الضارة في التطبيق. ب) تُساعد تقنيات التحقق المناسبة مثل تعقيم الإدخالات والاستعلامات ذات المعلمات على تحييد الأوامر الضارة المضمنة في مدخلات المستخدم وبالتالي التخفيف من ثغرات حقن الأوامر. ج) يؤدي تنفيذ طرق التحقق من الصحة مثل فحوصات طول الإدخال ووضع قائمة بيضاء بالأحرف المقبولة إلى تقليل الأجزاء المعرضة للهجوم ومنع تنفيذ الأوامر غير المصرح بها داخل تطبيق الويب. د) كل ما سبق
دليل مشروع أمان تطبيق الويب المفتوح للثغرات
مجانًانظرة عامة رائعة على ثغرات المختلفة مع أمثلة
دليل مشروع أمان تطبيق الويب المفتوح للثغرات
مجانًانظرة عامة رائعة على ثغرات المختلفة مع أمثلة
دليل مشروع أمان تطبيق الويب المفتوح للثغرات
مجانًانظرة عامة رائعة على ثغرات المختلفة مع أمثلة
دليل مشروع أمان تطبيق الويب المفتوح للثغرات
مجانًانظرة عامة رائعة على ثغرات المختلفة مع أمثلة
ورقة معلومات مرجعية حقن أمر نظام التشغيل
مجانًانظرة عامة سريعة على أوامر نظام التشغيل المختلفة التي يمكن إساءة استخدامها للحقن
ويب شيلز
مجانًانظرة عامة سريعة على ماهية ويب شيلز وكيف يمكن استخدامها في الهجمات
تهانينا على إنهائك الوحدة 2!
حدد خانة الاختيار لتأكيد إكمالك والمتابعة إلى الوحدة التالية.
تحديد الوحدة الحالية على أنها مكتملة وحفظ التقدم للمستخدم.
لقد أكملت جميع الوحدات في مسار التعلم هذا.