تعتبر ثغرة 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 لنعلم بأنه يمكننا تنفيذ أكثر من أمر في الوقت نفسه.
و بهذا عرفنا بأنه يمكننا كتابة أي أمر من أوامر نظام التشغيل عند استغلالنا لهذه الثغرة, و بعدها يمكننا السيطرة عليه.