حمله به
برنامه های
وبی (۳)
در بخشهای
پیشین از این
مجموعه
مقالات تعدادی
از روشهای
حمله به
برنامههای
وبی معرفی
شدند. در
ادامه به روشهایی
که با استفاده
از آنها میتوان
به پایگاه
داده سیستم
نفوذ کرد
اشاره میشود.
تزریق
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
برمیگرداند.
این خروجی
اطلاعات ذیقیمتی
در ارتباط با
سرور شامل نام
سرور، نام سرویس،
نسخه سرور،
سرویس پک و
نسخه سیستم
عامل را در
اختیار هکر
قرار میدهد.
|