حمله به
برنامه هاي
وبي (۳)
در بخشهاي
پيشين از اين
مجموعه
مقالات تعدادي
از روشهاي
حمله به
برنامههاي
وبي معرفي
شدند. در
ادامه به روشهايي
که با استفاده
از آنها ميتوان
به پايگاه
داده سيستم
نفوذ کرد
اشاره ميشود.
تزريق
SQL
به
زبان ساده اين
نوع حمله وارد
کردن کد
SQL به يک
برنامه است، در
شرايطي که
توسعه دهنده
برنامه قصد آن
را نداشته و يا
حتي پيشبيني
آن را نيز
نکرده باشد. ريشه
اين نوع حملات
به ساختار
طراحي ضعيف
برنامه برميگردد
و تنها در
مورد برنامههايي
قابل انجام
است که از روشهاي
ساخت رشته
هاي
SQL بهره ميگيرند.
به
مثال زير توجه
کنيد:
Dim StrSQL
as String = "SELECT CustomerID, CompanyName, ContactName, " & -
"ContactTitle
FROM Customers WHERE CustomerID = '" & txtCustID.Text
& "'"
در عبارت فوق با استفاده از
روش ساخت رشته به صورت پويا يک رشته
SQL توليد ميشود
که
CustomerID با مقدار
موجود در
txtCustID
جايگزين ميشود.
در شرايط عادي
کاربر شناسه
خود را در
Box وارد
مينمايد،
برنامه اقدام
به جستجو در
پايگاه داده
نموده و پس از
آن نتايج براي
کاربر نمايش
داده ميشود.
به عنوان مثال
اگر کاربر
شناسه
ALFKI را وارد
نمايد نتايجي
که برنامه توليد
ميکند به شرح
زير خواهد
بود:
در چنين
موردي کاربر ميتواند
در فرايند توليد
عبارت
SQL به گونهاي
دخالت کند که
پيام خطا دريافت
نمايد. اگر
خطاي توليد
شده به درستي
در برنامه مديريت
نشود و اين پيام
به صورت کامل
در اختيار
کاربر قرار گيرد،
اطلاعات بيشتري
در خصوص عبارت
SQL
دراختيار
کاربر قرار
خواهد گرفت که
مقدمه نفوذ به
سيستم را
فراهم ميآورد.
به عنوان مثال
کاربر ميتواند
عبارت زير را
وارد نمايد:
ALFKI' or CustomerID like '%
با
توجه به اينکه
هيچگونه
اعتبار سنجي
بر روي داده
ورودي کاربر
انجام نميشود،
عبارت ساخت
رشته
SQL عبارت زير
را توليد خواهد
نمود که در پي
آن اجرا هم
خواهد شد:
SELECT CustomerID, CompanyName, ContactName, ContactTitle FROM
Customers WHERE CustomerID = 'ALFKI' or CustomerID like '%'
در نتيجه
اجراي اين
رشته
SQL
علاوه بر
اطلاعات
کاربر با
شناسه
ALFKI،
اطلاعات تمام
کاربران
موجود در پايگاه
داده نمايش
داده ميشود.
در صورتي که
در پايگاه
داده سيستم
اطلاعات حساس
شخص مانند
شماره کارت
اعتباري ذخيره
شده باشد، اين
اتفاق ميتواند
منجر به بروز يک
فاجعه شود.
هکرها
به روش ديگري
نيز ميتوانند
با تزريق
SQL به اطلاعات
پايگاه داده
دسترسي يابند.
اگر رشته
ALFKI'
or 1=1 --
در صفحه
وارد شود نتيجه
دقيقا مشابه
حالت قبل
خواهد بود. در
اين صورت رشته
SQLتوليد
شده، به صورت
زير ميباشد:
SELECT CustomerID, CompanyName, ContactName, ContactTitle FROM
Customers WHERE CustomerID = 'ALFKI' or 1=1 --
دو خط
فاصله
(--) استفاده شده
در عبارت در
MS SQL Server مشخص
کننده جملات
توضيحات
(Comments) هستند. اين
کار در
My SQL
با نماد
(#) و در
اراکل با نماد
(;) انجام ميشود.
هکر قادر است
هر رشتهاي را
در صفحه وبي
وارد نمايد، و
در صورتي که
اعتبار سنجي
مناسب انجام
نشود، بالقوه
سايت در معرض
خطرات فراواني
خواهد بود.
حمله
SQL Union
براي
دريافت
اطلاعات بيشتر
در مورد سرور
حمله کنندگان
به سايت ميتوانند
از عبارت
Union
استفاده نمايند.
با وجودي که اين
نوع حمله بسيار
سختتر بوده و
دشواريهاي
خاص خود را به
همراه دارد،
ولي با اين وجود
غير ممکن نيست.
مهمترين
محدوديت اين
نوع حمله در اين
است که هر دو
عبارت پرس و
جو بايد يک
تعداد ستونهاي
يکساني را
برگردانند و
نوع داده
ستونهاي هر دو
عبارت پرس و
جو بايد با هم
سازگار باشند.
اين مسئله
باعث ميشود
که حمله
Union دشوارتر از ساير روشها باشد ولي با چند بار
تلاش هکر ميتواند موفق به گرفتن اطلاعات مورد نياز خود شود.
به عنوان مثالي از اين نوع حمله فرض کنيد هکر عبارت زير را وارد مينمايد:
ALFKI' union
select @@Servername --
در اين
صورت رشته
SQL زير توليد
خواهد شد:
SELECT CustomerID, CompanyName, ContactName, ContactTitle FROM
Customers WHERE CustomerID = 'ALFKI' union select
@@Servername
--'
اين رشته
منجر به توليد
يک خطا در سمت
سرور ميشود و
با توجه به
مکانيزم
کنترل خطا،
احتمالا پيام
توليد شده به
کاربر نمايش
داده ميشود.
در هر صورت
هکر چند بار
تلاش به شرح زير
انجام ميدهد:
ALFKI' union select @@Servername, @@Servicename,
@@Version --
ALFKI' union select @@Servername, @@Servicename, @@Servicename, @@Version --
با چندين
بار تکرار و
سعي و خطا بالاخره
هکر ميتواند
به هدف خود رسيده
و تعداد ستونهايي
که توسط عبارت
SQL برگردانده
ميشود را کشف
نمايد. با اين
کشف کنترل بيشتري
بر روي عبارت
union
بعدي که نوشته
ميشود بوجود
ميآيد. ورودي
فوق عبارتي به
شکل زير توليد
ميکند:
SELECT CustomerID, CompanyName, ContactName, ContactTitle FROM
Customers WHERE CustomerID = 'ALFKI' union select @@Servername, @@Servicename, @@Servicename, @@Version --
با توجه
به اينکه
عبارت فوق يک
عبارت معتبر
SQL
است، لذا
SQL
Server آن
را اجرا نموده
و مقادير نتيجه
را براي صفحه
ASP.NET
برميگرداند.
اين خروجي
اطلاعات ذيقيمتي
در ارتباط با
سرور شامل نام
سرور، نام سرويس،
نسخه سرور،
سرويس پک و
نسخه سيستم
عامل را در
اختيار هکر
قرار ميدهد.
|