مجموعه ها


پربازدیدترین مطالب

گوشی گم شده خود را صدا بزنید، جواب می دهد بررسی حملات تزریق SQL یا SQL INJECTION و مقابله با آن در PHP و ASP.NET گوشی گمشده خود را با Android Device Manager پیدا کنید از تصویر گوشی اندرویدی خود خسته شده اید؟ بررسی حملات سرقت نشست Session Hijacking و راههای مقابله با آن بررسی حملات تزریق کد XSS یاCSS و مقابله با آن در PHP و ASP.NET حملات محرومیت از سرویس DOS و DDOS - بخش اول اجرای کدهای مخرب در سمت سرور یا Remote Code Execution حملات محرومیت از سرویس DOS و DDOS - بخش دوم از همه جای دنیا به کامپیوتر خود وصل شوید.

آخرین مطالب

5 نکته و ترفند در جستجو با گوگل که باید بدانید از همه جای دنیا به کامپیوتر خود وصل شوید. از گوشی خود پرینت بگیرید اجرای کدهای مخرب در سمت سرور یا Remote Code Execution امنیت فایل های موقت یا Security For Temporary Files بررسی حملات سرقت نشست Session Hijacking و راههای مقابله با آن بررسی حملات تزریق SQL یا SQL INJECTION و مقابله با آن در PHP و ASP.NET بررسی حملات تزریق کد XSS یاCSS و مقابله با آن در PHP و ASP.NET حملات محرومیت از سرویس DOS و DDOS - بخش دوم حملات محرومیت از سرویس DOS و DDOS - بخش اول

اجرای کدهای مخرب در سمت سرور یا Remote Code Execution

اجرای کدهای مخرب در سمت سرور یا Remote Code Execution

حمله امنیتی دیگری که توسط اخلالگران به کار گرفته می شود  (Remote Code Execution (RCE است.

این حمله به نفوذگر توانایی اجرای کد در سرور را می‌ دهد. بنابراین با اجرای کدهای مورد نظر خود، تقریبا هر کاری روی وب سایت مورد حمله می‌تواند انجام دهد. این حمله به ندرت رخ می‌دهد اما در عین حال بسیار خطرناک است. این حمله زمانی رخ می‌دهد که در کد نوشته شده جایی وجود داشته باشد که در آن کدها به صورت پویا [1] اجرا ‌شوند و بتوان به هر نحو محتویات کد پویا را تغییر داد. توجه داشته باشید که پویا بودن سایت با پویا بودن کد بسیار متفاوت است، چرا که پویا بودن کد بدان معنا است که کد برنامه به نسبت شرایط مختلف، تغییر کند. اما پویا بودن سایت بدان معناست که محتویات نمایش داده شده (خروجی) سایت تغییر کند.

باید به این نکته توجه داشت که SQL Injection و XSS که در بخشهای قبل به آنها پرداخته شد، خود نوعی RCE هستند که روی پایگاه داده و خروجی HTML رخ می‌ دهند اما چیزی که در اینجا حائز اهمیت خواهد بود این است که در برخی موارد ممکن است اجرای کد در کدهای برنامه یا در برنامه‌ های دیگری که برنامه ما صدا می‌زند، رخ دهد. با اینکه RCE به طور کل به تمامی موارد گفته می‌شود اما اصطلاحا فقط برای این مورد از RCE استفاده می‌کنیم و سایر موارد را با نام‌ های دیگر می‌شناسیم. این حمله نیز مانند بسیاری از حمله های دیگر با کنترل ورودی‌ها برطرف می‌شود چرا که زمانی این حمله پدیدار می‌شود که ورودی‌ها شامل کدهای خطرناک باشند. برای جلوگیری از RCE بهترین راه این است که تا حد امکان ازقابلیت پویا بودن کد استفاده نکنیم چرا که در بسیاری از موارد (به جز موارد خاص) این قابلیت استفاده‌ ای ندارد و می‌توان با سایر دستورات برنامه‌ نویسی مانند حلقه‌ ها، شرط‌ ها و ... کار مورد نظر را انجام داد.

پس تاکید می‌ کنیم که تا حد ممکن از امکانات پویا بودن کد استفاده نکنید. باید تا جای امکان از ورودی‌ ها اطمینان حاصل کرد. برای اطمینان از ورودی‌ ها می‌توان ازروش‌های مختلفی استفاده کنید.

چند مثال ساده: در زبان PHP یکی از ساده‌ ترین توابعی که باعث بروز RCE می‌شود، تابع eval است:

<?php

$myvar = “testvar”;

$value = intval($_GET[‘input’]);

eval(“\$myvar = \$value;”);

?>

توجه داشته باشید که در مثال یاد شده اگر از تابع intval استفاده نشود، ورودی می‌تواند طوری وارد شود که حمله کننده بتواند هر دستور PHP دلخواه را اجرا کند.

در این مثال PHP نیز برنامه‌ا ی جداگانه صدا زده می‌ شود که کار ترجمه متن را انجام می‌دهد:

<?php
passthru( "/user/dic/en2fa " . escapeshellarg($_GET['text']) );

?>

در مثال فوق تابع escapeshellarg باعث می‌شود که ورودی هیچ کد مخربی نباشد و اگر از این تابع استفاده نشود می‌توان کدهای بسیار خطرناکی را اجرا کرد.

 در زبان ASP.NET نیز همین تهدیدها موجود هستند. در مثال زیر کدهای مورد نظردر فایل ذخیره و در مواقع لزوم بازخوانی می‌شوند:

<%

 If Not IsEmpty(Request("username")) Then

             Dim fso, f

            Set fso = CreateObject("Scripting.FileSystemObject")

            Set f = fso.OpenTextFile(Server.MapPath( "userlog.txt" ), 8, True)

            f.Write Request("username") & vbCrLf

            f.close

            Set f = nothing

             Set fso = Nothing

%>

           <h1>List of logged users:</h1>

           <pre><%

           Server.Execute("userlog.txt")

           %></pre><%

 Else

 %>

 <form>

            <input name=»username» /><input type=»submit» name=»submit» />

 </form>

 <%

 End If

%>

در مثال یاد شده username بدون کنترل وارد فایل و به عنوان کد اجرا می‌شود. برای جلوگیری از چنین مشکلی توصیه می‌شود که مثالی مانند این استفاده نشود و به جای آن از پایگاه داده برای ذخیره استفاده یا به جای Server.Execute به طوری معمولی محتویات فایل خوانده شود.

[1] dynamic

ما تنها به تخصص هایمان عمل می کنیم "

شرکت ایده پردازان بهسا

 


, , , , , , , , ,

نظر بدهید: