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

وب سایت hox.tor.hu

یک سری از سایت ها وجود دارند که به شما این امکان را می دهند که [warm game] انجام دهید. Warm game به شما اجازه می دهد تا یک سری فعالیت های نفوذ به یک سایت را انجام دهید و اگر توانستید آن را bypass کنید به مرحله بعد می روید. به سایت hax.tor.hu بروید. این سایت نمونه ای از warm game است. در صفحه اول این سایت می گوید برای شروع انجام حملات پیشرفته، اول از همه باید 5 warm را انجام دهید. طبق شکل 1بر روی START کلیک کنید (دقت کنید هدف bypass کردن

شکل 1

پردازش های client-side با دیدن source، تغییر source، تغییر cookie و دیدن cookie است). در این مرحله (شکل 2) باید یک پسورد پیدا کنید و در textbox وارد کنید.

شکل 2

 برای یافتن پسورد کافی است تا source را مشاهده کنیم و ببینیم پسورد کجاست. برای این کار بر روی صفحه راست کلیک کرده و گزینه view page source را انتخاب کنید. در این صفحه، کد را می توانید مشاهده کنید. حال به دنبال جایی بگردید که textbox پسورد وجود دارد. برای این کار می توانید عبارت کناری textbox که “password” است را جستجو کنید. احتمالاً textbox هم در کنار آن است. پس Ctrl+F را فشار داده و عبارت “password” را جستجو کنید. (البته می توانید خودتان به صورت چشمی آن را پیدا کنید) (شکل 3).

شکل 3

همان طور که در شکل می بینید در قسمت مشخص شده یک عنصر فرم وجود دارد که در آن یک عنصر input و یک عنصر button وجود دارد. تگ input که در آن type=”text” باشد، یک textbox ایجاد می کند. برای مشخص شدن هویت این textbox یک نام به آن داده می شود (name=”pw”) . با استفاده از این نام می توان از مقادیر موجود در این textbox استفاده کرد. تگ input با type=”button” هم یک دکمه ایجاد می کند. در مشخصه On click این دکمه می توان یک تابع را فراخوانی کرد و این یعنی اینکه هر وقت بر روی این دکمه کلیک شد یک تابع فراخوانی شود. در اینجا تابع a( ) فراخوانی می شود. حال باید به دنبال تابع a( ) بگردیم. می توانیم مجدداً عبارت a( ) را جستجو کنیم. در شکل 4 می بینید که درون این تابع مقدار پسورد را می توان یافت. در قسمت if مقدار textbox با مقدار متغیر thepw مقایسه می شود. درون متغیر thepw نیز عبارت warmup1 به اضافه lol به اضافه ی copter است که با کنار هم قرار دادن این عبارات پسورد ساخته می شود. پس پسورد warmup1lolcopter را درون فیلد textbox وارد می کنیم و روی دکمه Go کلیک می کنیم.

شکل 4

در مرحله بعد (شکل 5) گفته شده است که در حال حاضر مرحله 2 کار نمی کند و فقط کافی است عبارت “fail” را درون textbox وارد کنید و دکمه Go را کلیک کنید.

شکل 5

در مرحله 3، از شما می خواهد تا به لیست موجود عبارت “Bacon” را نیز اضافه کنید. برای این کار کد صفحه را ذخیره کنید (File” save As …. یا Ctrl+S). نوع ذخیره سازی Webpage, complete(*.htm; *.html) انتخاب کنید. سپس بر روی فایل ذخیره شده با پسوند .htm راست کلیک کرده و گزینه open with” Notepad را انتخاب کنید. حال به دنبال جایی از کد باید باشید که آن لیست وجود دارد. برای مثال می توانید عبارت یکی از اعضای لیست را جستجو کنید. ما عبارت Apple را جستجو می کنیم (شکل 6). کد این لیست را مشاهده می کنید.

شکل 6

این لیست با استفاده از تگ select در html ایجاد شده است. اگر با این تگ آشنایی ندارید مشکلی نیست و فقط کافی است دستوری که منجر به ایجاد Orange شده است را کپی کنید و بعد از آن دستور paste کنید. یعنی کد

<option value=Bacon> Orange </option>

را کپی کنید و بعد از آن paste کنید و به جای Orange در آن بنویسید Bacon؛ مانند دستور زیر.

<option value=Bacon> Bacon </option>

به شکل 7 نگاه کنید.

شکل 7

اما شما این تغییرات را بر روی فایل درون کامپیوتر خود انجام دادید. این فایل را save کنید و بر روی آن راست کلیک کنید و با Open with با یک مرورگر آن را باز کنید. می بینید که در لیست موجود، عبارت Bacon نیز اضافه شده است اما اگر روی دکمه proceed کلیک کنید این اطلاعات به سرور ارسال نمی شود چرا؟

توجه: هر فرم در html یک مشخصه با نام action دارد که این مشخصه تعیین می کند که اطلاعاتی که در فرم موجود وارد شده است باید به کدام فایل ارسال شود. در فرمی که ما در اینجا داریم اگر به قسمت action آن نگاه کنید به /warmup3/ ارسال می شود. این مسیر جایی است در سرور و نه در کامپیوترما. چه کاری باید انجام دهیم؟

یک راه حل این است که فایلی را که تغییر داده ایم در سرور آپلود کنیم. این راه حل، راه حل خوبی نیست چون به راحتی انجام نمی گیرد. راه حل دوم این است که آدرس را طوری تغییر دهیم که اطلاعات به سرور فرستاده شود. برای این منظور کافی است تا به قبل از /warmup3/ نام سایت را اضافه کنیم یعنی actions= http://hax.tor.hu/warmup3/ . حال صفحه را ذخیره کنید و دوباره آن را با مرورگر باز کنید و گزینه Bacon را انتخاب کنید و بر روی دکمه Proceed کلیک کنید (دقت کنید که مرحله 3 که توضیح آن داده شد با استفاده از مرورگر IE انجام شده بود).

حال به مرحله 4 وارد می شویم (شکل 8).

شکل 8

اگر بر روی Here is the page کلیک کنید وارد یک صفحه ای می شوید که در آن نوشته شده است This browser is banned …… یعنی مرورگر شما ممنوع شده است. باید بتوانیم نوع مرورگر خود را چیزی به غیر از این موارد ممنوع شده تغییر دهیم. چگونه این را می توان تغییر داد؟ (توجه کنید: اینکه مرورگر ما چیست از روی هدر درخواست http، فیلد user agent، تشخیص داده می شود). در قسمت Here is a little hind توضیح داده شده است که چگونه می توانیم نوع مرورگر را هر چه که خودمان خواستیم بدهیم.

در Mozilla، add-ons، tamper برای مشاهده و تغییر هدرهای HTTP/HTTPS و ارسال پارامترها به کار می رود.

چیزی که مرحله 4 گفته شده است این است: یک لینک داده شده است و گفته است پسورد در آن است. حال ما می خواهیم که نوع مرورگر خود را نفرستیم. برای این منظور باید با این سایت به طور مستقیم صحبت کنیم. برای مستقیم صحبت کردن می توان از netcat یا telnet استفاده کرد.

برای استفاده از telnet در cmd می نویسیم:

telnet hax.tor.hu   80

و اینتر می زنیم. حالا به آن سایت وصل شدیم. باید دستور GET به آن را با توجه به قالب هدر HTTP ارسال کنیم. دستور زیر را می نویسیم:

GET   /   HTTP/1.0

و سپس دوبار اینتر می زنیم. مشاهده می کنیم که یک سری داده ها به ما برگردانده شد که این نشانه ی این است که به آن وصل شده ایم.

خروجی !                                                                                HTTP/1.1 200  OK

اما کار با telnet کمی سخت است. ما با استفاده از nc به سایت وصل می شویم.

nc     -vvv    hax.tor.hu   80

GET   http://hax.tor.hu/pwfor4/

و سپس اینتر را بزنید. می بینید که پسورد برای شما ارسال می شود (شکل 9)

شکل 9

حالا پسورد را کپی کنید و آن را وارد textbox کنید و دکمه GO را کلیک کنید.

پس دیدیم که client می تواند خودش یک  request بسازد و به سرور بدهد.

مرحله 5 را خودتان انجام دهید. از اینترنت هم می توانید کمک بگیرید.

در این چهار مرحله دست گرمی برخی از نکات را دیدیم. با همین نکات می توان یک سری از موارد را bypass کرد. پس باید این موارد نیز مورد Pen. test قرار بگیرند. مثلاً صرفاً یک سری محدودیت هایی در سمت client گذاشته شده و دیگر سمت سرور هیچ بررسی صورت نمی گیرد.

سایر حملاتی که در وب انجام می شود به کمک سایر سرویس هاست. یعنی وبی که با آن کار می کنیم صرفاً html ساده نیست. در وب قابلیت کار با پایگاه داده (Database) هم داریم که از آن برای ذخیره سازی داده ها بر روی سرور استفاده می شود. برای مثال زمانی که ثبت نام می کنید، یک سری مشخصات مثل ایمیل، نام کاربری، کلمه عبور و …. را گرفته می­شود و این اطلاعات در پایگاه داده سرور ذخیره می شوند. دقت کنید وقتی داده حساس و حجم آن زیاد می شود دیگر در کوکی ذخیره نمی کنند. حالا یک سری از حملات مربوط به پایگاه داده داریم. یعنی یک وب سایت ممکن است از نظر مباحثی که گفتیم تا به حالا، خیلی ایمن باشد. داده هایی را که می گیرد به خوبی رمزنگاری می کند و …. اما در این شرایط که انتقال اطلاعات از طریق وب سایت است می توان اطلاعات خاصی را به سمت دیتابیس فرستاد. مثلاً آن قسمتی که نام کاربری و کلمه عبور گرفته می شود، به جای آنها، بیاییم و دستورات پایگاه داده ای بزنیم. این دستور کد می شود، به سمت DB (پایگاه داده Data base=) می رود، این دستورات در DB اجرا می شوند و منجر می شود تا مشکلاتی در آن بوجود آید (مثل حذف داده ها) و یا منجر به فاش شدن و دسترسی به برخی اطلاعات محرمانه می شود. برای این که با اینگونه حملات که موسوم اند به حملات SQL Injection آشنا شویم نیاز است تا با خود SQL آشنا باشیم.

Backtrack را start کنید.

سپس  manualمربوط به  MySQL را بخوانید.

پایگاه داده برای ذخیره اطلاعات استفاده می شود. هر پایگاه داده ای نیازمند یک Database Management System (DBMS) نیز است. DBMS کار مدیریت DB را بر عهده می گیرد. ما با بحث مدیریت آن کاری نداریم. آن بحث، به مباحثی مثل (Database Administration) DBA مرتبط می شود. پایگاه داده از یک ساختار جدولی استفاده می کند. داده ها در قالب یک سری جداول ذخیره می شوند. در file system ذخیره داده ها بر مبنای فایل است اما در پایگاه داده بر مبنای جدول (table) است. سیستم های مدیریت پایگاه داده مختلفی وجود دارند مثل My SQL، (در لینوکس)، Microsoft SQL Server (در ویندوز)، اوراکل (Oracle)، اوراکل یکی از DBهای قدرتمند بر پایه لینوکس بود که البته چند مدت قبل، خودش یک سیستم لینوکس-اوراکل را ارائه کرد به طوری که سیستم عاملی لینوکسی است که اوراکل با آن بالا می آید و ….

(Structure Query Language) SQL زبان basic صحبت با DBهای ذکر شده است. پس اگر یک وب سایت داریم که با My SQL, DBMS کار می کند حالا اگر می خواهیم DBMS خود را به MS SQL تغییر دهیم، ساختار (syntax) دستورات ثابت می ماند چون زبان صحبت آنها SQL است. این مسأله در دستورات سیستم عامل صدق نمی کند مثلاً دستور لیست کردن پوشه ها در ویندوز dir است اما در لینوکس ls است. علت ثابت بودن دستورات DB این است که عملیات ثابت و محدودی داریم. مثل ایجاد جدول، حذف جدول، اضافه کردن یک رکورد، backup گرفتن از DB و ….

ترمینال را در backtrack باز کنید.

دستور زیر را وارد کنید.

mysql  -u  root  -p

-u یعنی user و –p یعنی نیاز به پسورد دارد.

اینتر بزنید. پسورد آن toor است. اگر با پیغام خطای can’t connect to …. مواجه شدید یعنی سرویس در سیستم شما فعال نیست. mysql نیز یک سرویس است که باید start شود. برای start دستور زیر را وارد کنید.

service  mysql   start

این دستور در لینوکس برای start کردن سرویس ها به کار می رود. برای آن که وضعیت یک سرویس را ببینید می توانید از دستور زیر استفاده کنید.

service  mysql   status

پس از اینکه سرویس mysql، start شد مجدداً دستور قبل را وارد کنید (شکل 10)

شکل 10

حال می بینید که ابتدای خط عبارت mysql> (prompt) اضافه شده است. این دستور mysql، واسطی است که با سرویس mysql صحبت می کند. مثلاً برای اتصال به وب سرور، یک راه، استفاده از browser بود و راه دیگر استفاده از دستور nc. در اینجا هم یکی از روش های برقراری ارتباط با mysql، console است. روش دیگر تحت وب است که با استفاده از یک صفحه وب با سرویس mysql ارتباط برقرار می کنیم.

دستور show databases;. دیتابیس های موجود را لیست می کند.

  • انتهای اکثر دستورات mysql نیاز به سمی کولن است.

برای انتخاب یک database از دستور “نام DB use استفاده می کنیم مثال:

;use mysql

با دستور show tables; جداول پایگاه داده ای را که در مرحله قبل انتخاب کرده ایم می آورد.

توجه: اگر دستور را ناقص وارد کنیم، مثلاً سمی کولن را نگذاریم و اینتر بزنیم در خط بعد منتظر ادامه آن می ماند.

برای اضافه کردن یک سطر به جدول ! ابتدا باید دیتابیس را مشخص کنیم، سپس باید جدول مورد نظر خود را بیان کنیم و سپس یک سطر به آن اضافه یا از آن حذف کنیم.

با دستور select از درون یک جدول می توان ستون مورد نظر را انتخاب کرد.

دستور زیر تمام ستون های جدول user را نمایش می دهد.

;select  * from user

دستور زیر توضیحاتی درباره یک جدول (چه ستون­هایی دارد و…) ارائه می­دهد.

 ;describe user

تمرین: جدولی با فیلدهای email, fname, name, uname, id بسازید.

ابتدا یک دیتابیس ایجاد می کنیم (پایگاه داده ای که در قسمت های قبل دیدیم، DBهای سیستمی هستند (information-schema , mysql) که نباید با آنها کار کرد). دستور زیر یک DB به نام SSC ایجاد می کند.

;create database SSC

حال اگر دستور show database; را بزنیم، SSC را هم می بینیم.

حال جدولی به نام user می سازیم. ولی قبل از آن باید با دستور use SSC; به پایگاه داده SSC برویم تا جدول در آن ساخته شود.

 )Mysql> create table user

” id int;                 چون قرار است یک عدد صحیح در آن بریزیم

 ,(uname varchar (100

,(name varchar (20

,(fname varchar (20

,(email varchar (100

;(

می توانستیم همه را در یک خط بنویسیم اما برای وضوح بیشتر هر کدام را در یک خط نوشتیم.

اگر پس از اجرای دستور بالا پیغام Query OK, …. داد یعنی جدول ایجاد شده است.

دستور حذف جدول

; drop table table-name

یکی از کارهایی که نفوذگر می تواند انجام دهد حذف جداول از پایگاه داده وب سایت شماست.

جدولی که ساختید را describe کنید و ببینید آیا همان چیزی که می خواستید شده است یا خیر.

مرحله بعد درج یک سطر در این جدول است.

دستور زیر را اجرا کنید.

;select  *  from user

از آنجایی که هنوز هیچ داده ای را وارد جدول نکرده ایم پیغام Empty Set … می دهد.

دستور زیر درج در جدول user را انجام دهید.

;(“insert into user values (1, “MAGMAG” , “mohammad” , “mohammadi” , “email@site.com

توجه کنید که ترتیب داده های درون پرانتز در این حالت باید با ترتیب ستون های جدول یکسان باشد.

حالا دستور select * from user; را اجرا کنید و خروجی آن را ببینید.

مشخصات خودتان و دوستتان را در جدول user، وارد کنید.

;(“insert into user value (2, “TEST” , “ali” , “alavi” , “ali@vali.ili

زمانی که با استفاده از محیط گرافیکی با سیستم مدیریت پایگاه داده خود ارتباط برقرار می کنیم، عملاً در نهایت تبدیل به همین دستوراتی می شود که با آنها کار کردیم.

زمانی که از یک content management system) CMS) مثل Joomla یا WordPress استفاده می کنیم اسامی جداولی که ساخته می شود می تواند متفاوت باشد. مثلاً زمانی که admin، wordpress را برای یک سایت نصب می کند یک سری جدول بوجود می آیند و نام های جداول با wp- آغاز می شود.

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