آسیب پذیری های امنیتی

آسیب پذیری Command Injection

Security-Vulnerabilities
شرح آسیب پذیری:

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

command-injection

تفاوت 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) فیلتر کردن کاراکتر های زیر در ورودی کاربر برای سیستم عامل لینوکس

 { }  ( ) < > & * ‘ | = ? ; [ ]  $ – # ~ ! . ” %  / \ : + , ` 

توضیحات بیشتر در ارتباط با آسیب پذیری Command Injection را در OWASP از این لینک بخوانید.

برای مشاهده ی سایر آسیب پذیری ها، روی این لینک کلیک نمائید.

author-avatar

درباره میلاد خوشدل

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

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دو × 5 =