آسیب پذیری Command Injection


شرح آسیب پذیری:

در این آسیب پذیری مهاجم تلاش میکند دستورات سطح سیستم عامل را از طریق ضعف در یک برنامه بر روی سرور میزبان اجرا نماید. در این اسیب پذیری مهاجم معمولا در نهایت دسترسی Shell سرور میزبان را در اختیار می گیرد و امکان انجام هرگونه خراب کاری بر روی سرور را خواهد داشت. دستورات معمولا با سطح دسترسی ای که برنامه ی آسیب پذیر در سیستم عامل دارد، اجرا خواهند شد.

تفاوت Code Injection و Command Injection در این است که در آسیب پذیری Code Injection مهاجم می تواند کد خودش را در نرم افزار تزریق کند و در نهایت نرم افزار این کد را اجرا خواهد کرد، ولی در Command Injection مهاجم عملکرد پیش فرض نرم افزار که اجرای دستورات است را گسترش داده و Command خود را برای اجرا در کنار دستورات پیش فرض برنامه قرار می دهد و در حالت کلی عملیات تزریق کد مورد نیاز نمی باشد.

به طور مثال برنامه زیر محتوای یک فایل را نمایش می دهد.

#include <stdio.h>
#include <unistd.h>

int main(int argc, char **argv) {
 char cat[] = "cat ";
 char *command;
 size_t commandLength;

 commandLength = strlen(cat) + strlen(argv[1]) + 1;
 command = (char *) malloc(commandLength);
 strncpy(command, cat, commandLength);
 strncat(command, argv[1], (commandLength - strlen(cat)) );

 system(command);
 return (0);
}

خروجی به شکل زیر است:

$ ./catWrapper Story.txt
When last we left our heroes...

حال با استفاده از Command Injection به صورت زیر درخواست به برنامه ارسال می شود.

$ ./catWrapper "Story.txt; ls"
When last we left our heroes...
Story.txt               doubFree.c              nullpointer.c
unstosig.c              www*                    a.out*
format.c                strlen.c                useFree*
catWrapper*             misnull.c               strlength.c             useFree.c
commandinjection.c      nodefault.c             trunc.c                 writeWhatWhere.c

این مثال از سایت OWASP برداشته شده و به هیچ عنوان جنبه آموزشی ندارد و تنها مثالی است برای درک بهتر این آسیب پذیری.

 

چگونه این آسیب پذیری را رفع کنیم ؟

1) فیلتر کردن کاراکتر های زیر در ورودی کاربر در حالت کلی (بدون توجه به نوع سیستم عامل)

|  ; & $ > < ' \  ! >> # 

2) فیلتر کردن کاراکتر های زیر در ورودی کاربر برای سیستم عامل ویندوز

( ) < > & * ‘ | = ? ; [ ] ^ ~ ! . ” % @ / \ : + , `

3) فیلتر کردن کاراکتر های زیر در ورودی کاربر برای سیستم عامل لینوکس

 { }  ( ) < > & * ‘ | = ? ; [ ]  $ – # ~ ! . ” %  / \ : + , ` 
میلاد خوشدل

در حوزه‌ی امنیت وب و شبکه فعالیت می کند، عاشق پارکور است و مدیریت دیتاسنتر، امن سازی شبکه های مخابراتی و کابلی و برنامه نویسی وب و موبایل از تجارب کاری او می باشد. او در حال حاضر بنیانگذار ریجاکس است.

نظر خود را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.

یک × 4 =


تگ های html مجاز به استفاده می باشند: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

ارسال یک پیام