ما تريد معرفته عن OS Command Injection

Vulnerabilities
يُعرف أيضاً باسم الـ Shell Injection ويُشكل استغلال الـ OS Command Injection تهديداً وخطراً قد يؤدي للوصول إلى بيانات حساسة أو اختراق خادم الويب بالكامل وتحدث عندما يسمح تطبيق الويب للمستخدم بإدخال بيانات ليتم معالجتها من خلال سطر الأوامر علي خادم الويب
Abdelrahman Nasr
March 3, 2023, 3 p.m.
Abdelrahman
ما تريد معرفته عن OS Command Injection

كنا قد تعرفنا في مقالة سابقة علي ما هو الـ Injection؟ وكيف يحدث؟ وماهي أنواعه؟ وكيف تقوم بحماية تطبيق الويب من هجماته؟

ما تريد معرفته عن Injection Attacks

ما هو الـ OS Command Injection؟

ويُعرف أيضاً باسم الـ Shell Injection، ويُشكل استغلال الـ OS Command Injection تهديداً وخطراً قد يؤدي للوصول إلى بيانات حساسة أو اختراق خادم الويب بالكامل.

وتحدث عندما يسمح تطبيق الويب للمستخدم بإدخال بيانات ليتم معالجتها من خلال سطر الأوامر علي خادم الويب، دون التحقق من صحة وسلامة البيانات المدخلة من طرف المستخدم.

تحتاج فقط معرفة نوع النظام المستخدم علي سيرفر الويب لتحديد نوع سطر الأوامر إذا كان لـ Windows أو Linux. 

ما هو تأثير الـ OS Command Injection علي خادم الويب؟

- تنفيذ أوامر تضر بنظام السيرفر

- الوصول لمعلومات حساسة

- التلاعب بالبيانات المخزنة

- شن هجمات من نوع DoS لاستهلاك موارد السيرفر

- إعادة توجيه حركة مرور الشبكة لاعتراض البيانات

- الوصول لبقية الخوادم والأجهزة الموجودة في نفس الشبكة

- تجاوز جدران الحماية وأنظمة كشف ومنع التطفل

- الضرر بالسمعة وفقدان ثقة العميل

كيف يتم استغلال الـ OS Command Injection؟

سنقوم بتنفيذ مثال عملي باستخدام DVWA، وهو تطبيق ويب لتعلم وتجربة الثغرات عليه، ويتضمن المثال صفحة ويب بعنوان (Ping for FREE) تحتوي على Form لإدخال IP:

سنقوم بإدخال اسم النطاق الخاص بـ Root-X ونشاهد ما النتيجة:

تمت طباعة نتيجة الـ Ping وقيامه بإرسال 3 Packets بنجاح.

الآن لنقم بتفسير ما يحدث علي السيرفر، عندما يقوم المستخدم بكتابة Domain أو  IP Address ويتم إرساله إلى الخادم حيث يتم وضعه في متغير لمعالجته، علي سبيل المثال إذا كان السيرفر يستخدم Python سيكون شبيهاً لهذا:

User_Input = request.GET.get('IP')
Command = os.system(f'cmd /k "ping {User_Input}"')

أما إذا كان السيرفر يستخدم PHP فسيكون شبيهاً بهذا:

$User_Input = "ping ".$_GET['IP'];
$Command = exec($User_Input);

حيث تخزين مدخلات المستخدم في متغير User_Input وتنفيذه أمر Ping من خلال المتغير Command ليقوم بتخزين النتيجة ومن ثم إرسال النتيجة للمستخدم وطباعتها علي المتصفح.

الآن ماذا لو لم يكن الـ User_Input يحتوي علي Domain أو IP Address، ماذا لو كان يحتوي على أمر آخر ولنفترض أننا نريد أن نقوم بتجربة أمر ls لعرض المحتوي الموجود في المسار:

& ls

قمنا بحقن & لإضافة أمر آخر وهو ls وكانت النتيجة إظهار بعض الملفات.

الآن لما لا نحاول معرفة المسار الذي يتواجد فيه ذلك المحتوى؟

سنقوم بإضافة & ومن بعدها سنستخدم الأمر pwd لطباعة المسار:

& pwd

قام الأمر بطباعة المسار لنا:

/var/www/dvwa/vulnerabilities/exec

الآن بما أننا قد عرفنا المسار الذي نقف عليه، لما لا نحاول عرض محتويات ملف الـ passwd، سنقوم باستخدام الأمر cat لعرض محتوى الملف، و ../ للعودة بالخلف خطوة في المسار الذي نقف فيه (سنقوم بكتابتها 5 مرات للعودة إلى مسار الـ root) ومن ثم نكتب مسار الملف الذي نريد عرضه وهو في هذه الحالة etc/passwd، وكانت النتيجة كالآتي:

& cat ../../../../../etc/passwd

كيف تحمي تطبيق الويب من الـ OS Command Injection؟

كنا قد تحدثنا عن طرق الحماية ضد هجمات الحقن بشكل عام في مقالة ما تريد معرفته عن Injection Attacks، إذا كنت تريد معرفة المزيد من التفاصيل قم بقراءة المقالة.

وهنا نكون قد وصلنا إلى نهاية مقالتنا عزيزي القارئ ولا تنسى أن تنتظرنا قريباً- إن شاء الله- وإلى لقاء آخر قريب...


os command injection owasp top 10 terminal حقن أمر Abdelrahman Nasr