OS Command Injection

از Secure Coding

OS Command Injection یک نوع حمله به امنیت نرم افزار است که در آن، یک مهاجم توانایی اجرای دستورات سیستمی را در سرور مورد نظر به دست می آورد. این حمله معمولا با وارد کردن داده های خبیث و ناامن توسط کاربر به نرم افزار صورت می گیرد. مهاجم با وارد کردن دستورات سیستمی خطرناک در محلی که نرم افزار آن را به عنوان ورودی دریافت کرده است، می تواند سیستم را تحت کنترل خود قرار دهد و به اطلاعات حساس دسترسی پیدا کند.

برای مثال، فرض کنید یک برنامه C برای اجرای یک فرمان سیستمی بدون اعتبارسنجی ورودی از کاربر طراحی شده است. به جای آن که برنامه باید ورودی را به صورت مستقیم به دستور سیستمی ارسال کند، برنامه کاربر را به داخل دستور اجرای سیستمی اضافه می کند. این رفتار، مهاجم را قادر می سازد تا ورودی خود را با قرار دادن کاراکتر های خاص، مانند ";", "|" یا "&"، به عنوان جداکننده بین دستورات، از دستور سیستمی استفاده کند و دستورات دلخواه خود را به سیستم اجرا کند.

در ادامه یک نمونه کد C نشان داده شده است که به راحتی مستعد حمله OS Command Injection است:


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char* argv[])
{
    char command[100];
    strcpy(command, "ls ");
    strcat(command, argv[1]);
    system(command);
    return 0;
}

در این کد، برنامه مقدار ورودی را به دستور "ls" اضافه کرده و سپس آن را به عنوان ورودی به تابع system() ارسال می کند.