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

دفاع و جلوگیری

  • محدودیت طول
  • اجازه قرار دادن یک سری کلمات به عنوان username را ندهیم. مثلاً لزومی ندارد که کاربر، نام کاربری خود را select انتخاب کند.
  • هر جا quotation دیده شد، فایروال error دهد.
  • تعریف userهای مختلف در دیتابیس و اعمال دسترسی های مناسب روی آن. می توان role مشخص کرد که مثلاً فلان user روی فلان database دستور اجرا کند.

به طور کلی دفاع می تواند در سه قسمت صورت گیرد:

  1. Web Application که یک سری بررسی ها را انجام دهد و یا عدم استفاده از متودهای آشکار (مثل GET) برای ارسال اطلاعات. قرار دادن اسکریپت های میانی. یعنی بین صفحات که داده می خواهد تبادل شود یک سری اسکریپت برای بررسی داده قرار داده شود.
  2. سمت database
  3. یک سری لایه های میانی مثل database server و web server. که می توان بین آنها یک (IDS (Intrusion detection system قرار داد.

نمونه ای از یک طراحی ایمن را در شکل 9 می بینید.

تحقیق: روی parameterize SQL تحقیق کنید.

در URL از علامت سؤال (?) و & می توان استفاده کرد. برای مثال

www.test.com/login.php?uname=test & pass=123

می بینیم چگونه می توان در URL مقادیری را وارد کرد. اگر دیدیم وقتی رو دکمه مثلاً LOGIN کلیک می کنیم و مقادیر وارد URL نمی شوند آن وقت نمی توان از URL برای inject استفاده کرد.

توجه: ممکن است وقتی شما در حال بدست آوردن نام جدول و ستون­ها از database هستید، برنامه web application یک تغییری روی آن بدهد و سپس نمایش دهد. مثلاً نام ستون ها username و password است اما برنامه به شما p و u نشان می دهد. یعنی هیچ لزومی ندارد که همان چیزی باشد که در دیتابیس است اما غالباً یکسان است.

توجه: در اینترنت عبارت SQL injection cheat sheet را جستجو کنید. cheat sheet ها موارد پرکاربرد درباره ی مطلب مورد نظرتان (که در اینجا SQL injection است) را به شما می دهند.

وب سایت www.hackthissite.org نیز یکی از war gameها است.

توصیه: در هر مرحله از injection، اطلاعاتی را که به دست می آورید در جایی برای خود یادداشت کنید، که اگر بعداً خواستید روی آن کار کنید بدانید قبلاً چه کارهایی انجام داده اید.

اولین قدم در injection همان یافتن کاراکتر کنترلی (مثل ‘ ، “ و ….) است. یعنی یک بار به جای  username مقدار admin و پسورد را عدد 1 (یا ‘ یا “ و ….) قرار دهیم.

از جداول پیش فرض mysql هم برای یافتن اطلاعات استفاده کنید.

بسته به configهای mysql ممکن است برخی از featureها disable شده باشد و یا وب سرور جلوی یک سری از موارد را بگیرد. مثلاً ممکن است خود به خود — (comment) را از کوئری حذف کند و یا نتوان از امکان اجرای همزمان چند دستور با استفاده از ; استفاده کرد. پس باید از روش های دیگری استفاده کنید.

برای مثال زمانی که به جای مقدار متغیر پسورد در URL مقدار “ را قرار دادیم و پیغام error را داد یعنی کاراکتر کنترلی و کلیدی را درست انتخاب کردیم. از اطلاعات آن error یا warning، نوع database، تابع به کار برده شده (مثلاً mysql-num-rows()) و …. را می توان استخراج کرد (علت این پیغام error این است که وقتی شما یک «”» اضافه می کنید ترکیب «”»های موجود به هم می خورد و به همین خاطر syntax error می دهد).

کاراکتر Space درCharacter Encoding  به %20 تبدیل می شود.

نکته: نکته ای که در طراحی ایمن سایت ها وجود دارد این است که نباید تفاوتی بین errorهایی که برمی گردد باشد یعنی خیلی از سایت ها هستند که وقتی username را درست وارد کنید و پسورد را اشتباه، می گوید پسورد اشتباه است وقتی username و پسورد با هم اشتباه باشند می گوید “چنین کاربری وجود ندارد”. این طوری می فهمیم که پس user را درست وارد کرده ایم و پسورد اشتباه است.

توجه: پایگاه داده mysql جدولی به نام user دارد که اگر آن را describe کنید آن جدول هم فیلدی به نام user دارد که می توان اطلاعات userها را در آن مشاهده کرد.

تمرین: با استفاده از Google hacking دامنه (domain)های مختلف را بررسی کنید و به دنبال صفحات login و … باشید و sql- injection را روی آنها بدست آورید.

چگونه بفهمیم که injection انجام شده است؟ با استفاده از logهای sql. مسئول وب­سایت (admin) در وب سرور خود فایل های log را بررسی می کند. در لینوکس در زیرشاخه /var/log/ می توان فایل های log را دید.

Cat /var/log/httpd/error-log

که اگر به آن نگاه کنیم errorهای رخ داده را می توان دید که مثلاً فلان وب سایت فلان select را زده است.

IPSها و IDSها از الگوهای حمله، حملات را تشخیص می دهند. مثلاً یکی از این الگوها دیدن عبارت select است.

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