آسیب پذیری Command Injection که با نام تزریق شل یا Shell Injection نیز شناخته میشود، یک آسیب پذیری وب است که به مهاجم اجازه میدهد دستورات سیستم عامل (OS) دلخواه خود را روی سروری اجرا کند که یک وب اپلیکیشن روی آن قرار دارد. این حمله در صورت موفقیت، معمولاً باعث هک شدن کامل اپلیکیشن و تمام داده های آن میشود. بسیاری اوقات، یک مهاجم میتواند با استفاده از این آسیب پذیری، به بخشهای دیگر زیرساخت میزبان نیز دسترسی پیدا کند؛ مهاجم برای این کار روابط و اتصالات مورد اعتماد در زیرساخت را اکسپلویت میکند تا بتواند حمله را به دیگر سیستم های داخل سازمان نیز گسترش دهد – کاری که اصطلاحاً به آن Pivot کردن حمله میگویند
نکته مهم این است که باگ Command Injection اصلاً به دلیل ضعف سیستمعامل نیست، بلکه برنامهنویسها با اشتباهات برنامهنویسی راه را برای هکرها و انجام تزریق Command OS هموار میکنند. هکر ابتدا به دنبال ورودیهای کاربری آسیبپذیر در صفحه وب یا برنامه وب میگردد چون بدین ترتیب میتواند مستقیم وارد کوئری Command OS شود. پس از اینکه هکر این ورودی را وارد میکند، دستورات سیستمعامل مخرب در دیتابیس اجرا میشود. در Command Injection امکان اجرای دستورات مخرب فراهم میشود. این استیتها کنترل دیتابیس سرور پشت برنامه وب را به دست میگیرند. هکرها از Command Injection استفاده میکنند تا به صفحه وب، برنامه وب و بازیابی محتوای کل دیتابیس SQL دست یابند تا بتوانند رکوردهای دیتابیس را اضافه و اصلاح و حذف کنند.
۱ - مثال ساده: فرض کنید یک وبسایت دارای فرم جستجو باشد که کاربر میتواند در آن عبارتی را جستجو کند. اگر وبسایت از ورودی کاربر بدون اعتبارسنجی به عنوان پارامتر برای دستورات سیستمعامل استفاده کند، مهاجم میتواند دستورات خط فرمان را تزریق کند. مثلاً:
search_query = "cat /etc/passwd"
/etc/passwd
را به مهاجم نشان میدهد.username = "myuser; rm -rf /"
password = "mypassword"
rm -rf /
را اجرا میکند و تمام محتوای سرور را حذف میکند.آسیبپذیری Command Injection بهتنهایی ضرر خاصی برای سامانه به دنبال نداشته باشد، اما در مجاورت و همجواری با سایر آسیبپذیریها، میتواند به مهاجم دسترسی مستقیم به خط فرمان سامانهها را فراهم کن.
یه مثال دیگه:
۲- مثال : استفاده از نام فایل به عنوان آرگومان دستور: فرض کنید یک برنامه به کاربران اجازه میدهد محتوای یک فایل را مشاهده کنند، بدون امکان تغییر یا حذف آن. این برنامه با دسترسی root اجرا میشود:
int main(char* argc, char** argv) {
char cmd[CMD_MAX] = "/usr/bin/cat ";
strcat(cmd, argv[1]);
system(cmd);
}
" ;rm -rf /"
را وارد کند، دستور system()
اجرا نمیشود و سیستم عامل به حذف بازگشتی پارتیشن ریشه میپردازد.$APPHOME
تعیین میکند و اسکریپتی را در آن مسیر اجرا میکند:char* home = getenv("APPHOME");
char cmd[CMD_MAX];
snprintf(cmd, CMD_MAX, "%s/run_script.sh", home);
system(cmd);
$APPHOME
را به " ;rm -rf /"
تغییر دهد، دستور system()
باعث حذف بازگشتی پارتیشن ریشه میشود.نکته: همیشه ورودیهای کاربری را به درستی اعتبارسنجی کنید تا از تزریق فرمان جلوگیری کنید
بهترین راهها برای محافظت از وبسایت خود در برابر تزریق فرمان عبارتند از:
با انجام این اقدامات احتیاطی، میتوانید به محافظت از وبسایت خود در برابر تزریق فرمان و سایر حملات مبتنی بر تزریق کمک کنید منو فالو کن یا حق.