مبحث یکم : مقدمه و تاریخچه
مبحث دوم: مراحل نفوذ کردن / جلوگیری از نفوذ
مبحث سوم: حملات شبکه ای
مبحث چهارم - کار عملی
مبحث پنجم - DHCP
مبحث ششم - وب و حملات مطرح در آن
مبحث هفتم - حملات DoS
مبحث هشتم - سیستم عامل
مبحث نهم - مهندسی اجتماعی
مبحث دهم - Vulnerability (آسیب پذیری)

مثال از injection با دستور insert

مثال از injection با دستور insert (شکل 6).

شکل 6

توجه: در جلسات ابتدایی گفته شده که هکرهای مختلفی وجود دارند (کلاه های مختلف). خیلی از حمله ها کار کلاه صورتی هاست که یک ابزاری را run می کنند و سیستم را بدون آگاهی کامل از مکانیزم ها و … خراب می کنند؛ که البته یک Config ابتدایی جلوی آنها را می گیرد. همچنین محدوده وسیع تری از حملات، کار کلاه خاکستری هاست که با استفاده از تکنیک هایی مثل Google hacking جستجو می کند و بالاخره یک راه نفوذ پیدا می کند و نفوذ را انجام می دهند. بعد از پیکربندی ابتدایی، با توجه به سیاست های امنیتی موجود، امنیت تأمین می شود. هیچ پسوردی نیست که crack نشود. اگر من پسورد خود را 3 کاراکتر قرار دهم کمتر از چند دقیقه crack می شود. اگر 8 کاراکتر به بالا بگذارم مثلاً چند روز. اگر کاراکترهای مختلف استفاده کنم مثلاً چند ماه و …. می توان یک سیاست داشت که هر دو ماه یک بار پسوردها عوض شود. این گونه امنیت را می توان تأمین کرد. در sql injection هم اوضاع به همین ترتیب است. یعنی همیشه می تواند انجام شود. ولی می توان روی آن فیلتر گذاشت. حالا نفوذگر تا می رود فیلترها را بررسی کند، فایروال یا IPS آن را شناسایی می کنند (و یا مثلاً نام جدول پویا (که عوض شود) داشته باشیم). یعنی با چند feature امنیتی می توان امنیت را تا حد خوبی بالا برد.

توجه: فرض کنید ما توانستیم با قرار دادن “or” “=” در نام کاربری، کلمه عبور سایت شکل 7 را مورد حمله قرار دهیم. بعد از ورود عبارت بالا در فیلد نام کاربری بالاخره با یک user،login  انجام شود. با کدام user؟ با کاربری که در اولین رکورد جدول ذخیره شده است. در PHP، ASP یا هر زبانی که برنامه با آن نوشته شده است توابعی وجود دارد که اگر چند رکورد به عنوان نتیجه اجرای query از DBMS برگردد، اولین رکورد را به عنوان نتیجه می گیرند که این مسئله یک عیب پیاده سازی است. چون query باید یک رکورد برمی­گرداند و نباید ادامه login انجام می شد. حالا این شرایط خیلی بدتر خواهد شد زمانی که اولین user که در این جدول ایجاد شده است ، admin باشد! (برای همین ممکن است بعضی ها اولین user را یک user غیرواقعی قرار دهند تا کار را برای حمله کننده سخت تر کنند).

شکل 7

با استفاده از SQL injection می توان از پایگاه داده های دیگر موجود در سیستم هدف هم داده استخراج کرد. مثال:

;(” “=” ” Select * from user where (unam=” “); select * from mysql.user; — or “ “=”) and (email=” “ or

عبارت بالا دو دستور است. دستور دوم از دیتابیس دیگر درون mysql داده استخراج می کند. در سایت هایی که hosting وب انجام می دهند، به ازای هر سایت که روی آنها فعال می شود یک دیتابیس می سازند یک وب سرور ممکن است مثلاً 500 سایت را میزبانی کند. اگر شنیدید که گروه فلان، 500 سایت را deface کرد اینگونه است که به یک سایت از آن host، که باگ داشته است دسترسی پیدا کرده اند، دیتابیس خوب config نشده است. از طریق آن سایت دارای باگ، به دیتابیس سایر سایت ها دسترسی پیدا می کنند. راه دیگر: چرا اصلاً به سایتی نفوذ کنیم و بعد به دیگر سایت ها حمله کنیم. می آییم و یک host از آن سرور می خریم (با مبلغ کمی این کار انجام می شود) و خیلی راحت به دیتابیس های دیگر دسترسی پیدا می کنیم.

توجه: به این گونه defaceها که به یک بار تعداد زیادی سایت مورد deface قرار می گیرند، اصطلاحاً mass deface می گویند.

توجه: mysql.user یعنی جدول user از دیتابیس mysql.

ممکن است اسم جدول و ستون­ها را نداشته باشیم. ولی با استفاده از errorهایی که سایت برمی­گرداند یک سری از اطلاعات را میتوان به دست آورد (شکل 8) (البته می توان تنظیمات وب سرور را به گونه ای انجام داد که اصلاً errorها نمایش داده نشوند و یا در جایی که می خواهیم log شوند).

شکل 8

توجه: به عنوان یک ترفند در زمان injection: برای اینکه ببینید یک سایت injection دارد یا خیر، مثلاً در URL، بعد از بی اثر کردن (با استفاده از کوتیشن و ….) چنین عبارتی را می نویسید and 1=1. این عبارت، یک شرط درست است. سایت نباید error دهد. اما اگر سایت error ندهد این را به شما می فهماند که injection روی آن جواب داده است. برای آن که مطمئن تر شوید می توانید عبارت and 1=0 را آزمایش کنید که این دیگر باید error دهد.

blind injection یعنی زمانی که injection انجام می دهیم، بازخوردی که سایت برمی گرداند هیچی نیست و یا فقط یک کاراکتر بازخورد برمی گرداند.

اسکرول به بالا