شرح ثغرة Shell Injection

| |
السلام عليكم و رحمة الله و بركاته 
معكم أخوكم أسامة ريان


تعتبر ثغرة Shell Injection من الثغرات الخطيرة على مستوى المواقع و تطبيقات الويب ، بحيث يمكن للمخترق من خلال إستغلاله لهذه الثغرة أن يقوم بتنفيذ أكواد shell scriptting أي يمكن كتابة أمر من أوامر الطرفية ( terminal ) في لينكس و يتحكم من خلال هذه الأوامر بخادم الويب و يمكن أيضا أن تكون على سيرفرات الوندوز .
بالإضافة إلى ذلك يمكن إستغلال هذه الثغرة بشكل أخطر و أكبر عن طريق جلب و تحميل ملفات من مواقع أخرى من خلال الأمر " wget " الذي يمكنك من تحميل shell code أو فايروس أو حتى تحميل ملف javascript و تحويلها إلى ثغرة xss .
بالإضافة إلى أنه يمكنك جلب ملفات من داخل السيرفر و أن تقوم بإستكشاف محتويات الملف الذي يتصل فيها السكريبت مع قاعدة البيانات و الحصول على بيانات القاعدة من إسمها و بيانات الدخول عليها ( username & password ) و السيطرة على جميع المعلومات الموجودة على الخادم !

معلومات حول الثغرة و استغلالها :
تنتج هذه الثغرة عن طريق سكريبت مكتوب بالعادة بلغة php يقوم هذا السكريبت بإستدعاء ملفات من نظام التشغيل و عرضها للمستخدم .
في الكود التالي تم إستخدام الدالة shell_exec و هي دالة يتم من خلالها تنفيذ أوامر في نظام التشغيل ، و تم إستخدام هذه الدالة لعرض محتويات الملف المرسل عن طريق تنفيذها للأمر cat .

في الشكل التالي قمت بإستدعاء و عرض ملف ( أو صفحة ويب ) دون إستخدام الدالة shell_exec و هما يؤديان نفس الأمر ، لكن الفرق بأن لكل منهما طريقته و أسلوبه بذلك بالإضافة إلى أن الثاني أكثر أمنا و خالي من ثغرة Shell Injection .

كما في الصور يتم تمرير إسم الملف بواسطة GET و يقوم الكود بعدها بعرض الملف بإستخدام الدالة shell_exec .

و لو نظرنا إلى الكود البرمجي ، نجد بأنه بعد تمرير إسم الملف بواسطة GET قام الكود بتنفيذ الأمر cat و إضافه له إسم الملف الذي تم تمريره في المتغير file و الذي هو من نوع GET .


الإستغلال :

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

و ما قمنا به في الصورة السابقة هو إضافة التالي لإسم الملف :

simple.txt;ls

و هذا يؤدي إلى عرض محتويات الملف و بعدها سيتم تنفيذ الأمر ls و هو أمر من أوامر ال terminal و سيتم تنفيذه بحيث يعرض محتويات المجلد الحالي .
و للتوضيح أكثر لو قمنا بنسخ ما كتبناه و ألصقناه في سكريبت من لغة shell scripting سيكون الناتج كالآتي :


بحيث قمنا بإضافة wget لنعلم بأنه يمكننا تنفيذ أكثر من أمر في الوقت نفسه .

و بهذا عرفنا بأنه يمكننا كتابة أي أمر من أوامر نظام التشغيل عند إستغلالنا لهذه الثغرة ، و بعدها يمكننا السيطرة عليه .


هناك تعليقان (2):

جميع الحقوق محفوظة لمدونة أسامة ريان للمعلوميات ©