بخشی از مقاله

عنوان تحقیق :
آموزش هک

استاد ارجمند :
جناب آقای جعفری

گرد آورندگان :
محمد طاهری – سروش لسانی- علی فتحی

بهار86

مقدمات قبل از شروع يادگيری هک
ترمينولوژی (اصطلاح‌شناسی)


Hacker کيست ؟
هکر کسی است که با سيستم های کامپيوتری آشناست و می‌تواند با روش‌هايی خاص (بدون اجازه) وارد آنها شود... اين انسان می‌تواند خوب يا بد باشد ( در هر حال هکر است )
- سوال: يک هکر از چه راهی وارد يک سيستم می‌شود؟
از راه شبکه (نه بابا ! )


بايد توجه کنيد که هر سيستم کامپيوتری (به عبارت بهتر هر سيستم عامل) به هر حال محصول کار تعدادی انسان است و حتما دارای تعدادی bug (خطاهايی که بعد از ارائه محصول به بازار به تدريج کشف می‌شوند) خواهد بود. بعد از اينکه يک باگ مشخص شد، شرکت ها نرم‌افزارهايی را به‌سرعت (در عرض چند ساعت ) ايجاد می‌کنند تا مشکل رفع شود اين‌ها را patch می‌گويند. و بعد مديران شبکه (Wbemasters) در عرض چند روز تا چند سال (آين آخری در مورد ايرانه) آنها را download کرده و مشکل را حل می‌کنند. در اين فاصله هکرها دمار از روزگار اين سايت‌ها در می‌اورند...


- تعريف چند اصطلاح:
*** Hacker واقعی = سامورايی :
کسی که هدفش از نفوذ به سيستم‌ها نشان دادن ضعف سيستم‌های کامپيوتری است نه سوءاستفاده ...
*** Wacker (واکر):
کسی که هدفش از نفوذ به سيستم‌ها، استفاده از اطلاعات آن سيستم‌هاست (جرو هکر‌های کلاه‌ سياه )
*** Cracker (کراکر):
کسی که هدفش از نفوذ به سيستم‌ها، خرابکاری و ايجاد اختلال در سيستم‌های کامپيوتری است. (جرو هکر‌های کلاه‌ سياه )
*** Preaker :
از قديمي‌ترين هکرها هستند که برای کارشان نياز (و دسترسی) به کامپيوتر نداشتند و کارشان نفوذ به خطوط تلفن برای تماس مجانی، استراق‌سمع و ... بود. اين جزو آموزش من نيست چون کار خيلی بديه (-;
- زنگ ‌تفريح


- تقسيم بندی من برای هکر ها:
۱- جوجه‌هکرها (احمق کوچولوها):
توانايی‌ها: بلدند از Sub 7 , 187 استفاده کنند و فکر کنند ديگه همه‌چی رو ياد گرفته‌اند !


۲- خروس‌هکر‌ها يا مرغ‌هکرها (احمق‌های بزرگتر):
توانايی‌ها: Mail Box را هم می‌توانند Bomb کنند ... ماشاءالله !


۳- هکرهای قابل‌احترام ( مثل خود شما):
دارند ياد می‌گيرند و هنوز ۲،۳ سال کار دارند.


۴- هکرهای پيش‌کسوت:
ديگه آفتاب لبه بومه ... هکرهای قابل احترام را دوس دارند


تقسيم‌بندی
- انواع کامپيوتر‌های شبکه:
=> کامپيوترهای Server : کامپيوترهايی که کارشان تامين اطلاعات در شبکه است، مثلآ کامپيوترهايی که سايت‌ها را نگه می‌دارند.
=> کامپبوتر‌های Client : کامپيوترهايی که استفاده کننده هستند مثل همين کامپيوتر خودتان که داريد ازش کار می‌کشيد.
انواع سيستم‌ عامل‌هايی که Server ها از آن استفاده‌ می‌کنند:


=> سيستم‌های فعلی:
* خانواده Unix (مثل FreeBSD, Linux, Sun Solaris )
* خانواده Windows (مثل WinNT, Win2000 )
* OsMac


=> سيستم‌های قديمی (منقرض شده - آخيش ! ):
AIX, IRIS, DEC10, DEC20 , ...
- سوال: کدام‌ها را بايد ياد گرفت؟
Win2000, Unix(Linux) را بايد ياد بگيريد. پيشنهاد من اين است که Win2000و RedHat Linux را روی کامپيوتر خود همزمان داشته باشيد.
برای شروع چه چيزی لازم است؟


۱- Win2000 , Linux را روی کامپيوتر خود نصب کرده و شروع به يادگيری کنيد.
۲- شروع به يادگيری زبان C کنيد.
۳- شروع به يادگيری TCP/IP کنيد. (يک کتاب بخريد )
۴- مهمترين چيز علاقه به طی کردن يک را بسييييييار طوووووولانی


- تقسيم‌بندی انواع حملات
ولين نکته‌ای که لازم است بگويم اينه که وقت خود را برای هک کردن کامپيوتر‌های کلاينت هدر ندهيد (اگرچه برای افراد مبتدی کار با نرم‌افزاری مثل Sub7 زياد هم بد نيست ولی نبايد زياده‌روی کرد) علت هم اينه که هربار که به اينترنت وصل می‌شوند ip جديدی به‌ آنها اختصاص پيدا می‌کنه و زحماتتون هدر می‌ره (البته برای جلوگيری از اين امر هم روشهايی هست که در آينده ايشالله ميگم).


حالا تقسيم‌بندی:
۱- حمله به روش Denial of Service Attack) DoS)
۲- حمله به روش Exploit
۳- حمله به روش Info Gathering (تلنت کردن يکی از مثالهای آن است که امروز آموختيد)
۴- حمله به روش Disinformation
در مورد هرکدام به‌زودی توضيح می‌دم.


133t Speak چيست؟
گاهی هکرها در هنگام نوشتن به جای تعدادی از حروف انگليسی معادل‌های قراردادی به کار می‌روند که ليست آنها را در زير می‌بينيد:
0 <= O
1 <= L; I
2 <= Z
3 <= E
4 <= A
5 <= S
6 <= G
7 <= T
8 <= B
| <= L; I
@ <= at (duh)
$ <= S
)( <= H
}{ <= H
/\/ <= N
\/\/ <= W
/\/\ <= M
|> <= P; D
|< <= K
ph <= f
z <= s

مثلا he Speaks می‌شود:
}{3 $|>34|< z

توصيه من اينه که از اين معادل‌ها تا جايی که می‌تونيد استفاده نکنيد. فقط ياد بگيريد که کم نياريد.
ترسيم مسير برای آينده
۱- اولين و مهمترين تصميم انتخاب نوع کامپيوتری است که می‌خواهيد هک کنيد ( کلاينت يا سرور )، زيرا روش‌هک کردن اين‌دو بجز در مراحل ابتدايی کاملا متفاوت است.


۲- دومين گام انتخاب يک کامپيوتر مشخص (مثلا کامپيوتری که فلان سايت را نگه می‌دارد که مثالی برای کامپيوتر سرور است و يا کامپیوتر فلان شخصی که با او چت می‌کنيد که مثالی برای کامپيوتر کلاينت است) و جمع‌آوری اطلاعات در مورد آن است. اين جمع‌آوری اطلاعات از قربانی (Victim) را Footprinting گويند. اولين مشخصه‌ای که بايد کشف شود، ip اوست. يکی ديگر از اطلاعات مهم که معمولا دنبالش هستيم، پيدا کردن نوع سيستم‌عامل و نيز برنامه‌هايی است که کامپيوتر شخص از آنها بهره می‌برد. يکی از مهمترين ( و گاه خطرناک‌ترين) کارها، تست‌کردن پورت‌های آن کامپيوتر برای ديدن اينکه کدام پورت‌ها باز و کدام‌ها بسته هستند.


۳- مرحله بعدی در واقع شروع تلاش برای نفوذ به سيستم است. اين نفوذ سطوح مختلف دارد و بالاترين آن که در کامپيوترهای سرور روی می‌دهد، حالتی است که بتوان username و password مربوط به مدير کامپيوتر (administrator) يا superuser را به‌دست آورده و از طريق اين Shell Account به نهايت نفوذ دست‌ يابيم ولی گاه به‌دلايل مختلف (مربوط به سطح علمی خود و ... ) نمی‌توان به اين سطح دست‌يافت اما به هر حال برای مرحله بعدی می‌تواند استفاده شود. اين مرحله جايی است که هنر شما يه عنوان يک هکر آغاز شده و نيز به پايان می‌رسد.


۴- اين مرحله بعد از نفوذ روی می‌دهد که در آن به يک سطحی از کنترل سيستم رسيده‌ايد. رفتار شما در اين مرحله مشخص می‌کند که چه نوع هکر هستيد(سامورايی، واکر و يا کراکر) و اينکه آيا جنبه ياد گرفتن را داشته‌ايد يا نه، همينجا مشخص خواهد شد.


۵- مرحله آخر پاک کردن ردپاست تا گير نيفتيم (البته بعضی وقتها برای کلاس گذاشتن بايد گير بيفتيم، هه هه ...). بعضی از سيستم‌ها آمار login را نگه می‌دارند که در مورد آنها اين مرحله بسيار مهم است.
خلاصه مطالب بالا به اين صورت است:
Selection -> FootPrinting -> Penetration -> [Changings] -> Cleaning
تعريف ip و port


IP
شماره‌ ايست که به هر کامپيوتر متصل به اينترنت داده می‌شود تا بتوان به‌کمک آن شماره به آن کامپيوترها دسترسی داشت. اين عدد برای کامپيوترهايی که حالت سرور دارند (مثلا سايت‌ها) و نيز کامپيوتر‌های کلاينتی که معمولا به روشی غير از شماره‌گيری (Dial Up) به اينترنت وصل هستند، عددی ثابت و برای ديگران عددی متغير است. مثلا هر بار که شما با شرکت ISP خود تماس گرفته و به اينترنت وصل می‌شويد، عددی جديد به شما نسبت داده می‌شود

.
اين عدد يک عدد ۳۲ بيتی (۴ بايتی) است و برای راحتی به‌صورت زير نوشته می‌شود:
xxx.xxx.xxx.xxx که منظور از xxx عددی بين ۰ تا ۲۵۵ است (البته بعضی شماره‌ها قابل استفاده نيست که بعدا علت را توضيح خواهم داد). مثلا ممکن است آدرس شما به صورت 195.219.176.69 باشد. حتی اسم‌هايی مثل www.yahoo.com که برای اتصال استفاده می‌کنيد، در نهايت بايد به يک IP تبديل شود، تا شما سايت ياهو را ببينيد.
در IP معمولا xxx اولی معنای خاصی دارد، که بعدا توضيح می‌دهم... فقط اين را بگويم که اگر به روش Dial Up به اينترنت وصل شويد، معمولا عددی که به عنوان xxx اول می‌گيريد، مابين 192 تا 223 خواهد بود.اين توضيح برای تشخيص کامپيوترهای کلاينت از سرور (حداقل در ايران) بسيار می‌تواند مفيد باشد.
بعد از اتصال به اينترنت برای به دست آوردن IP خود، از دستور IPCONFIG در command prompt استفاده کنيد. (البته يک سری نکات فنی داريم که بعدا می‌گم)


- Port
در ساده ترين تعريف، محلی است که داده‌ها وارد با خارج می‌شوند. در مبحث هک معمولا با پورت‌های نرم‌افزاری سروکار داريم که به هر کدام عددی نسبت می‌دهيم. اين اعداد بين ۱ و ۶۵۵۳۵ هستند. معمولا به يک سری از پورت‌ها کار خاصی را نسبت می‌دهند و بقيه به‌صورت پيش‌فرض برای استفاده شما هستند. پورت‌های که فعال هستند، هرکدام توسط يک نرم‌افزار خاص مديريت می‌شوند. مثلا پورت ۲۵ برای ارسال Email است،

بنابراين بايد توسط يک نرم‌افزار اين کار انجام شود و اين نرم‌افزار بر روی پورت ۲۵ منتظر (فال‌گوش) می‌ماند. اينجا ممکن است شخصی از فلان نرم‌افزار و ديگری از بهمان نرم‌افزار استفاده کند ولی به‌هر حال پورت ۲۵ هميشه برای ارسال Email است.
در پايين ليستی از مهمترين پورت‌ها و کاربردشان را می‌بينيد:
Port Num Service Why it is phun!
-------- ------- ----------------------------------------
7 echo Host repearts what you type
9 discard Dev/null
11 systat Lots of info on users
13 daytime Time and date at computers location
15 netstat Tremendous info on networks
19 chargen Pours out a stream of ASCII characters.
21 ftp Transfers files
23 telnet Where you log in.
25 smpt Forge email
37 time Time
39 rlp Resource location
43 whois Info on hosts and networks
53 domain Nameserver
70 gopher Out-of-date info hunter
79 finger Lots of info on users
80 http Web server
110 pop Incoming email
119 nntp Usenet news groups -- forge posts, cancels
443 shttp Another web server
512 biff Mail notification
513 rlogin Remote login
who Remote who and uptime
514 shell Remote command, no password used!
syslog Remote system logging
520 route Routing information protocol

از ميان اين پورت‌ها شماره‌های ۷، ۱۵، ۲۱، ۲۳، ۲۵، ۷۹، ۸۰، ۱۱۰و ۱۱۹ فعلا برای ما مهم‌ترند و به‌تدريج با آنها آشنا خواهيد شد.
بحث ip
Command Prompt چيست؟

در بسياری از درس‌های آينده از Command Prompt (خط فرمان) ويندوز استفاده خواهيم کرد. برای باز کردن آن يکی از روش‌های زير را به کار بريد:

۱- مسير زير را در ويندوز طی کنيد:
Start > Programs > Accessories > Command Prompt
در قسمت Run بنويسيد: command يا cmd
- پيدا کردن ip يک سايت با دانستن آدرس اينترنتی آن (پيدا کردن ip سرور)
برای اين کار روشهای مختلفی هست:
۱- در (Internet Explorer (IE آدرس را تايپ کنيد و Enter را فشار دهيد. در قسمت پايين مرورگر يعنی Status Bar پس از چند لحظه برای مدت کوتاهی ip نمايش داده می‌شود و می‌توانيد آنرا يادداشت کنيد. اگر طول اين مدت بسيار کوتاه است می‌توانيد از صفحه عکس بگيريد ( با دکمه Print Screen ) و در يک نرم‌افزار گرافيکی بعد از باز کردن يک صفحه خالی به کمک Ctrl+V آنرا مشاهده کنيد. [ عجب راه احمقانه‌ای ;-)
اگر اين کار را برای www.yahoo.com انجام دهيم:

که همان شماره ip برای www.yahoo.com است.
نکته بسيار مهم اين است که به‌دليل ضريب اشتباه بسيار بالای آن هيچ‌گاه از اين روش استفاده نکنيد. نتايج ممکن است کاملا اشتباه باشد که بعدا ميگم چرا.

۲- دستور ping را در command prompt صادر کنيد:
ping domain
در اين حالت می‌توانم ip آن سايت را ملاحظه کنم. (البته کار اصلی ping يک چيز ديگست و ميشه گفت داريم ازش سوءاستفاده می‌کنيم). مثلا برای پيدا کردن ip سازين می‌نويسم:
ping sazin.com
و جواب می‌شنوم:
Pinging sazin.com [63.148.227.65] with 32 bytes of data:

Reply from 63.148.227.65: bytes=32 time=821ms TTL=111
Reply from 63.148.227.65: bytes=32 time=821ms TTL=111
Reply from 63.148.227.65: bytes=32 time=822ms TTL=111
Reply from 63.148.227.65: bytes=32 time=811ms TTL=111


Ping statistics for 63.148.227.65:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 811ms, Maximum = 822ms, Average = 818ms
ملاحظه می‌فرماييد که ip سازين 63.148.227.65 است.
اگر دستور ping را به‌جای sazin.com برای www.sazin.com صادر کنيد، جواب همان است. البته برای سايت‌های بزرگ جواب‌های حاصل متفاوت خواهد بود.
۳- روش بعدی و کامل‌ترين روش whois کردن به بعضی سايت‌های خاص است. بعدا اين را کامل‌تر توضيح می‌دم ولی فعلا روشش رو می‌گم. آدرس زير را در مرورگر خود تايپ کنيد:
http://www.samspade.org/t/ipwhois?a=xxxxxx
که به‌جای xxxxxx آدرس مورد نظر را تايپ کنيد. مثلا برای sazin.com يکی از دو آدرس زير را بايد تايپ کرد:
http://www.samspade.org/t/ipwhois?a=sazin.com
http://www.samspade.org/t/ipwhois?a=www.sazin.com
چيزی که در صفحه ظاهر می‌شود به صورت زير است:
whois -h magic 63.148.227.65
sazin.com resolves to 63.148.227.65

Trying whois -h whois.arin.net 63.148.227.65
Qwest Communications NET-QWEST-BLKS-2 (NET-63-144-0-0-1)
63.144.0.0 - 63.151.255.255
Neutron Digital Media Corp. QWST-63-148-224 (NET-63-148-224-0-1)
63.148.224.0 - 63.148.231.255

# ARIN Whois database, last updated 2002-09-04 19:05
# Enter ? for additional hints on searching ARIN"s Whois database.
که آدرس ip در سطر اول و دوم ذکر شده است.
اگر دو روش آخر را برای سايت بزرگ yahoo انجام دهيم، نتايج زير را می‌بينيم:
--> روش ping :
www.yahoo.com ====> 64.58.76.229
yahoo.com ====> 66.218.71.198
--> روش whois :
...و www.yahoo.com ====> 66.218.71.86
64.58.79.230 و yahoo.com ====> 66.218.71.198
نتايج حاصل گويای آن است که چرا بهتر است از whois استفاده کنيم.

- تقسيم بندی آدرس‌های ip
آدرس‌های ip به ۵ کلاس تقسيم‌بندی می‌شوند که A تا E نام‌ دارند ولی از اين بين سه کلاس اول (يعنی C,B,A) کاربرد عملی دارند که آنها را شرح می‌دهيم:
۱- کلاس A: اگر ip را به‌صورت xxx.yyy.yyy.yyy در نظر بگيريد، اين کلاس تمام ipهايی را شامل می‌شود که xxx بين ۱ تا ۱۲۶ است. اين کلاس ويژه backbone های بزرگ اينترنتی است و در هنگام ثبت domain برای گرفتن ip از آنها استفاده می‌شود. بنابراين اکثر سايت‌ها چنين ipهايی دارند. اين کلاس را 8/ هم می‌گويند.
۲- کلاس B: اين کلاس تمام ipهايی را شامل می‌شود که xxx بين ۱۲۸ و ۱۹۱ است. اين کلاس هم از جمله کلاس‌های پرکاربرد است. اين کلاس را 16/ هم می‌گويند.
۳- کلاس C: اين اين کلاس تمام ipهای را شامل می‌شود که xxx بين ۱۹۲ و ۲۲۳ است. اين کلاس معمولا به ISP هايی که خدمات dial-up ارائه می‌دهند، تعلق می‌گيرد (اين جمله چندان مستند نيست.). بنابراين اگر به‌صورت dial-up به اينترنت متصل شويد، چنين ip می‌گيريد. اين کلاس را 24/ هم می‌گويند.
سوالی که پيش می‌آيد اين است که xxx چرا نه در کلاس A و نه در B، عدد ۱۲۷ را شامل نمی‌شود؟ جواب اين‌ است که ۱۲۷ برای کامپيوتر خودمان رزرو شده است. مثلا 127.0.0.1 معمولا يعنی localhost يعنی خودمان.
- به‌دست آوردن ip خودتان بعد از اتصال به اينترنت
برای اين‌کار راههای متفاوتی وجود دارد:
۱- راحت‌ترين راه استفاده از دستور ipconfig است. من با تايپ کردن آن به نتايج زير رسيدم:
Windows 2000 IP Configuration

PPP adapter neda:

Connection-specific DNS Suffix . :
IP Address. . . . . . . . . . . . : 217.66.198.116
Subnet Mask . . . . . . . . . . . : 255.255.255.255
Default Gateway . . . . . . . . . : 217.66.198.116
که آدرس ip تان را می‌توانيد در سطر Ip Address ببينيد. (مسئله پروکسی را فعلا ناديده بگيريد)

۲- بعد از اتصال به اينترنت حداقل يک صفحه باز کنيد و بعد دستور netstat -n را در command prompt تايپ کنيد. من با تايپ اين دستور به نتايج زير رسيدم:
Active Connections

Proto Local Address Foreign Address State
TCP 217.66.198.116:2469 64.58.76.177:80 ESTABLISHED
TCP 217.66.198.116:2471 66.163.175.130:80 ESTABLISHED
TCP 217.66.198.116:2473 212.73.194.143:80 ESTABLISHED
TCP 217.66.198.116:2474 212.73.194.143:80 ESTABLISHED
TCP 217.66.198.116:2476 212.73.194.136:80 SYN_SENT
ستونی که زير عبارت Local Address قرار دارد، ip من در آن اتصال است. بنابراين ip من در آن اتصال 217.66.198.116 بوده است.
پيدا کردن ip طرف مقابل هنگام chat با yahoo messenger - اين روش قديمی شده، الان ديگه کار نمی‌کنه

می‌خواهيم درباره يک کلاينت مثلا کسی که مثل شما يک اتصال مثلا dial-up به اينترنت دارد و فرضا دارد با شما chat می‌کند، کسب اطلاعات کرد.
در اين مورد هم اولين نکته‌ای که بايد کشف شود، ip اوست. در اين جلسه می‌خوام بهتون ياد بدم که وقتی با يه نفر از طريق yahoo messenger به صورت pm چت می‌کنيد، چطوری می‌تونيد ip اش رو پيدا کنيد. البته بايد توجه کرد که اين روش گاهی کار نمی‌کند. نيز فرض می‌کنم که فقط با يک نفر داريد چت می‌کنيد.
يکی از دستور‌های زير را تايپ می‌کنيد:
netstat -n
دستور اولی برای پيدا کردن ip طرف مقابل است و دستور دوم گاه می‌تواند اسم کامپيوتر او را برای شما نشان دهد.
من دستور netstat -n را تايپ کردم و به نتايج زير رسيدم:

Active Connections

Proto Local Address Foreign Address State
TCP 195.219.176.126:1296 66.163.173.77:5050 ESTABLISHED
TCP 195.219.176.126:1341 66.218.75.149:80 LAST_ACK
TCP 195.219.176.126:1325 212.234.112.74:5101 SYN_SENT
اولين کاری که می‌کنيد اين است که سطری را پيدا می‌کنيد که در Local Address يا Foreign Address آن، پورت 5101 داشته باشد. در اين مثال سطر آخر، سطر مورد نظر ماست. زيرا در ستون Foreign Address از سطر آخر، پورت آن 5101 است. البته اگر در ستون Local Address هم بود، فرقی نمی‌کرد. وقتی آن سطر را پيدا کرديد، ip طرف مقابل را از ستون Foreign Address از همان سطر پيدا می‌کنيم. در اين مثال ip طرف مقابل 212.234.112.74 است.
اگر به‌جای netstat -n ، از netstat استفاده می‌کردم، به نتايج زير می‌رسيدم:
Active Connections

Proto Local Address Foreign Address State
TCP artawill...:1296 cs55.msg.sc5.yahoo.com:5050 ESTABLISHED
TCP artawill...:1298 dl3.yahoo.com:http TIME_WAIT
TCP artawill...:1325 Majid:5101 SYN_SENT
ملاحظه می‌فرماييد که همه ip ها به معادل های اسمی تبديل شده‌اند و در مورد همان سطر آخر به جای ip طرف مقابل اسم کامپيوتر فرد را می‌نويسد (البته در حالتی که طرف مقابل dial-up نباشد، قضيه فرق می‌کند.)
حالا فرض کنيد که يک pm ديگر هم اضافه می‌شود. و دوباره دستور netstat -n را تايپ می‌کنم. حالا نتايج زير را می‌بينم:
Active Connections

Proto Local Address Foreign Address State
TCP 195.219.176.126:1296 66.163.173.77:5050 ESTABLISHED
TCP 195.219.176.126:1344 64.58.77.197:80 ESTABLISHED
TCP 195.219.176.126:5101 212.234.112.74:3735 ESTABLISHED
TCP 195.219.176.126:5101 194.225.184.95:1460 ESTABLISHED

الان دوتا سطر دارم که دارای پورت 5101 باشد، و چون می‌دانم که 212.234.112.74 مربوط به نفر قبلی بود، پس 194.225.184.95 مربوط به pm دومی است.
بحث port ها و telnet
TCP و UDP چيست؟

مدل TCP/IP که برای ارتباط اينترنتی به‌کار می‌رود، می‌توان به لايه‌های مختلفی تقسيم‌بندی کرد که بعدا بيشتر توضيح می‌دم، اما يکی از اين لايه‌ها، لايه ارتباط host2host است که خود شامل دو پروتکل است به نامهای TCP و UDP :

۱- (TCP (Transmission Control Protocol :
اين پروتکل قوی‌تر و قابل اعتمادتر است و اصولا پروتکل مهمتری نسبت به UDP محسوب می‌شود. اين پروتکل توانايی بازبينی بسته‌هاو کنترل خطا را هم دارد.
۲- (UDP (User Datagram Protocol :
اين پروتکل برای کاهش overflow طراحی شده است و در خيلی از موارد وابسته به TCP است.
نکته مهم اين است که وقتی با يک پورت خاص روی يک کامپيوتر ديگر ارتباط برقرار می‌کنيم، اين ارتباط می‌تواند از نوع TCP يا UDP باشد. بنابراين وقتی می‌خواهيم يک کامپيوتر خاصی را از نظر پورت‌ها بررسی کنيم، هردو بايد بررسی شود.
- تقسيم‌بندی پورت‌ها از روی شماره آنها


۱- پورت‌های 0 تا 1023 :
مشهورترين پورت‌ها هستند و معمولا هرکدام برای يک سرويس خاص استفاده می‌شود. با تعدادی از اين پورت‌ها در جلسات قبل آشنا شده‌ايد.


۲- پورت‌های 1024 تا 49151 :
اين سری از پورت‌ها مشخصا با هيچ‌يک از سرويس‌های اينترنتی مرتبط نيستند بلکه وقتی که با يک ابزار شبکه مانند مرورگر اينترنت(مثل Internet Explore يا Netscape Navigator )، نرم‌افزار ارسال و دريافت E-mail (مثل Outlook يا Edura )، نرم‌افزارهای FTP (مثل WS-FTP يا Cute-FTP ) کار می‌کنيد، يکی از اين پورت‌ها به صورت random باز شده و يک ارتباط با سرور (با توجه به‌نوع سرويس اينترنتی که می‌دهد که يکی از پورت‌های 0 تا 1023 است) برقرار شده و داده‌ها ارسال و دريافت می‌شوند. يعنی پورت شما يکی از پورت‌های اين قسمت است و پورت سرور يکی از پورت‌های بالايی.اين سری پورت‌ها را پورت‌های register شده هم می‌گويند.


۳- پورت‌های 49152 تا 65535 :
اين سری از پورت‌ها به‌ندرت استفاده می‌شوند. کاربرد اساسی آنها برای يک سری سرويس‌های خاص اينترنتی است و يا توسط trojanها (که برای Hack کردن کامپيوتر است) است. البته خيلی از trojanهای معروف از پورت‌های رديف ۲ هم استفاده می‌کنند و اين تقسيم‌بندی‌ها هميشه برقرار نيست و به‌همين علت است که گاهی پورت‌ها را به دو‌دسته زير 1024 و بالای 1024 تقسيم‌ می‌کنند.
چگونه به يک پورت Telnet کنيم؟


برای اينکه عملکرد يک پورت برای شما روشن شود، بايد به آن پورت Telnet کنيد. (البته معمولا تعدادی از پورت‌هايی را که ممکن است اطلاعاتی مهم را در اختيار هکر‌ها قرار دهند مثل پورت ۷۹ معمولا بسته است و ارتباط با آنها شايد برقرار نشود.) برای telnet کردن در command prompt دستور زير را تايپ کنيد:
telnet hostname portnum
در اين دستور به‌جای hostname شماره ip و يا نام سايت را وارد می‌کنيد و به‌جای portnum شماره پورت و يا معادل آن از جدول. مثلا برای تلنت کردن به پورت ۱۳ که ساعت و تاريخ را به‌دست می‌دهد در کامپيوتری به‌ اسم www.iums.ac.ir مي‌نويسيد:
telnet iums.ac.ir 13
telnet iums.ac.ir daytime


هر دو اين دستورات معادل هم هستند.
تلنت کردن معمولا اولين کاری است که يک هکر برای هک کردن يک سايت انجام می‌دهد، زيرا بعضی از پورت‌ها در صورت بسته نبودن روی آن سرور، معمولا حاوی اطلاعات بسيار مهمی هستند.
همين الان شروع کنيد و مثل يک هکر واقعی به کامپبوتر‌های مختلف و پورت‌های گوناگون تلنت کنيد.


Port Scanning
چگونه يک ارتباط TCP برقرار می‌شود که بگوييم فلان پورت باز است يا نه؟
برای اينکه تعيين کنيم که يک پورت روی يک سرور باز است يا نه، معمولا بايد يک TCP connect scan انجام دهيم. اول اين را بگم که Port Scanning انواع مختلف دارد که فعلا ما نوع TCP connect را مدنظر داريم. اين نوع اسکن سه مرحله دارد که به آن TCP"s 3-way handshakeمی‌گويند:
۱- اول کامپيوتر ما به سمت سرور يک SYN packet می‌فرستد که به معنی درخواست اتصال است.
۲- اگر سرور اين درخواست را قبول کند، در مرحله دوم سرور به سمت ما يک SYN/ACK packet می‌فرستد.
۳- در مرحله آخر کامپيوتر ما يک ACK packet به سمت سرور می‌فرستد.


نوع ديگری از پورت اسکن TCP SYN scan نام دارد. با توجه به اينکه معمولا اگر پورت اسکن به روش بالا (TCP connect scan) انجام دهيم، معمولا در سرور اين اتصال ذخيره خواهد شد و بعدا می‌تواند ما را رديابی کنند، به جای آن می‌توان از TCP SYN scan استفاده کرد. در اين نوع اسکن، مراحل ۱ و ۲ از بالا انجام می‌شود ولی مرحله ۳ نه! اگر در مرحله ۲ به ما يک SYN/ACK برسد، آن پورت باز است و اگر يک RST/ACK برسد، يعنی بسته است.
انواع ديگری از پورت اسکنينگ هم وجود دارد مثل UDP scan, TCP Window scan, TCP ACK scan, TCP Null, TCP Xmas Tree, TCP FIN Scan
- چگونه می‌توان عمل Port scanning را انجام داد؟


در تمام مطالبی که تا اين مرحله گفته‌ام سعی کرده‌ام که فقط از ابزارهای موجود در ويندوز استفاده کنم و هيچ ابزار ديگری به‌کار نبرم، اما در مبحث پورت اسکنينگ چون هيچ ابزاری در ويندوز برای اين‌ کار نيست، به‌ناچار بايد يک سری برنامه را از اينترنت داون‌لود کنيد. (توجه داشته باشيد که فعلا حرفی از لينوکس نزده‌ام و سعی می‌کنم فعلا هيچ بحثی را در مورد آن مطرح نکنم)


برای Port Scanning می‌توان از ابزارهای مختلفی استفاده کرد که اکثرا برای لينوکس طراحی شده‌اند، اما مهم‌ترين پورت اسکنرها برای ويندوز عبارتند از:
۱- نرم‌افزار NMapWin v1.3.0 :
نسخه گرافيکی و مخصوص ويندوز برای nmap است (nmap در لينوکس استفاده می‌شود). nmap از کامل‌ترين ابزارهايی است که هکر‌ها استفاده می‌کنند که علاوه بر توانايی انواع پورت اسکنينگ‌ها، می‌تواند کارهای بسياری چون تشخيص سيستم‌عامل سرور و ... را انجام دهد. اين ابزار را بعدا توضيح خواهم داد ولی فعلا برای کار ما بيش‌ از حد کامله ;-)


۲- NetScanTools Pro 2000 :
اين هم از بهترين‌هاست ولی چون پولی است به‌ جای داون‌لود بايد در CD هايی که در بازار هست پيدايش کنيد.


برای اسکن کردن TCP (ونه UDP) می‌توانيد از آن استفاده کنيد. من زياد ازش خوشم نيومد.


3 ipEye v1.2 :
من در این درس از اين نرم‌افزار استفاده خواهم کرد، برای داون‌لود آن می‌توانيد به سايت www.ntsecurity.nu مراجعه کنيد يا مستقيما با کليک روی اين لينک آن را داون‌لود کنيد. لازم است بگويم که اين نرم‌افزار فقط در ويندوز ۲۰۰۰ و xp کار می‌کند و نيز در يک بار اجرا فقط يک ip را می‌تواند تست کند. ضمنا فقط TCP را تست می‌کند.

- چگونه از ipEye برای پورت اسکنينگ استفاده کنيم؟
با تايپ ipEye در command prompt اين نتايج ظاهر می‌شود:
ipEye 1.2 - (c) 2000-2001, Arne Vidstrom (arne.vidstrom@ntsecurity.nu)
- http://ntsecurity.nu/toolbox/ipeye/

Error: Too few parameters.

Usage:

ipEye <target IP> <scantype> -p <port> [optional parameters]
ipEye <target IP> <scantype> -p <from port> <to port>
[optional parameters]

<scantype> is one of the following:
-syn = SYN scan
-fin = FIN scan
-null = Null scan
-xmas = Xmas scan>br>
(note: FIN, Null and Xmas scans don"t work against Windows systems.
[optional parameters] are selected from the following:
-sip <source IP> = source IP for the scan
-sp <source port> = source port for the scan
-d <delay in ms> = delay between scanned ports in milliseconds
(default set to 750 ms)

فرض کنيد که می‌خواهيم سايت سازين را از نظر پورت‌ها از پورت ۱ تا ۲۰۰ تست کنيم. اول بايد ip آن را به دست بياوريم که می‌شود، 63.148.227.65 و حالا به کمک دستور زير آن را بررسی می‌کنيم:
ipeye 63.148.227.65 -syn -p 1 200
دقت کنيد که 63.148.227.65 عدد ip سازين، syn- يعنی SYN SCAN و p 1 200- يعنی تست از پورت ۱ تا ۲۰۰ باشد. البته پارامترهای ديگری را هم می‌شود ست کرد که فعلا به درد ما نمی‌خورد. با اجرای اين دستور به نتايج زير می‌رسيم:
ipEye 1.2 - (c) 2000-2001, Arne Vidstrom (arne.vidstrom@ntsecurity.nu)
- http://ntsecurity.nu/toolbox/ipeye/

1-20 [drop]
21 [open]
22 [closed or reject]
23-24 [drop]
25 [open]
26-52 [drop]
53 [open]
54-79 [drop]
80 [open]
81-109 [drop]
110 [open]
111-142 [drop]
143 [open]
144-200 [drop]
201-65535 [not scanned]
يعنی کامپيوتر در آن طرف هست ولی به پورت گوش نمی‌دهد، Reject يعنی اينکه يک firewall هست که اجازه اتصال به آن پورت را نمی‌دهد، Drop يعنی اينکه يک firewall همه‌چيز را پس‌ می‌زند و يا اصلا کامپيوتری اونور نيست، Open هم که يعنی باز.
در مورد سازين می‌بينيد که از بين پورت‌های ۱ تا ۲۰۰ ، پورت‌های ۲۱، ۲۵، ۵۳، ۸۰، ۱۱۰، ۱۴۳ باز است و می‌توان به‌ آنها telnet کرد. دقت کنيد که تا تمام پورت‌هايی که مشخص شده، تست نشده است، هيچ نتيجه‌ای نشان داده نمی‌شود و يه‌کم صبر می‌خواد.
تعيين پورت‌های باز کامپيوتر خودتان
می‌خواهيم درباره کامپيوتر خودمان اين اطلاعات را پيدا کنيم. برای اين کار يکی از دستورات زير را به کار می‌بريم:
netstat -an
netstat –a
فرق اين دو دستور در اين است که اولی پورت‌ها را به صورت عددی و دومی به صورت معادل اسمی آن پورت می‌نويسد. مثلا معادل اسمی پورت 7 ، echo است.
مثلا اگه netstat -an را تايپ کنم، به اطلاعات زير می‌رسم:
Active Connections

Proto Local Address Foreign Address State
TCP 0.0.0.0:7 0.0.0.0:0 LISTENING
TCP 0.0.0.0:9 0.0.0.0:0 LISTENING
TCP 0.0.0.0:13 0.0.0.0:0 LISTENING
TCP 0.0.0.0:17 0.0.0.0:0 LISTENING
TCP 0.0.0.0:19 0.0.0.0:0 LISTENING
TCP 0.0.0.0:21 0.0.0.0:0 LISTENING
TCP 0.0.0.0:25 0.0.0.0:0 LISTENING
TCP 0.0.0.0:53 0.0.0.0:0 LISTENING
TCP 0.0.0.0:80 0.0.0.0:0 LISTENING
TCP 0.0.0.0:119 0.0.0.0:0 LISTENING
TCP 0.0.0.0:135 0.0.0.0:0 LISTENING
TCP 0.0.0.0:143 0.0.0.0:0 LISTENING
TCP 0.0.0.0:443 0.0.0.0:0 LISTENING
TCP 0.0.0.0:445 0.0.0.0:0 LISTENING
TCP 0.0.0.0:515 0.0.0.0:0 LISTENING
TCP 0.0.0.0:563 0.0.0.0:0 LISTENING
TCP 0.0.0.0:1025 0.0.0.0:0 LISTENING
TCP 0.0.0.0:1026 0.0.0.0:0 LISTENING
TCP 0.0.0.0:1033 0.0.0.0:0 LISTENING
TCP 0.0.0.0:1037 0.0.0.0:0 LISTENING
TCP 0.0.0.0:1040 0.0.0.0:0 LISTENING
TCP 0.0.0.0:1041 0.0.0.0:0 LISTENING
TCP 0.0.0.0:1043 0.0.0.0:0 LISTENING
TCP 0.0.0.0:1755 0.0.0.0:0 LISTENING
TCP 0.0.0.0:1801 0.0.0.0:0 LISTENING
TCP 0.0.0.0:3372 0.0.0.0:0 LISTENING
TCP 0.0.0.0:3389 0.0.0.0:0 LISTENING
TCP 0.0.0.0:6034 0.0.0.0:0 LISTENING
TCP 0.0.0.0:6666 0.0.0.0:0 LISTENING
TCP 0.0.0.0:7007 0.0.0.0:0 LISTENING
TCP 0.0.0.0:7778 0.0.0.0:0 LISTENING
TCP 0.0.0.0:8181 0.0.0.0:0 LISTENING
TCP 127.0.0.1:1039 0.0.0.0:0 LISTENING
TCP 127.0.0.1:1433 0.0.0.0:0 LISTENING
TCP 127.0.0.1:2103 0.0.0.0:0 LISTENING
TCP 127.0.0.1:2105 0.0.0.0:0 LISTENING
TCP 127.0.0.1:2107 0.0.0.0:0 LISTENING
UDP 0.0.0.0:7 *:*
UDP 0.0.0.0:9 *:*
UDP 0.0.0.0:13 *:*
UDP 0.0.0.0:17 *:*
UDP 0.0.0.0:19 *:*
UDP 0.0.0.0:68 *:*
UDP 0.0.0.0:135 *:*
UDP 0.0.0.0:161 *:*
UDP 0.0.0.0:445 *:*
UDP 0.0.0.0:1030 *:*
UDP 0.0.0.0:1036 *:*
UDP 0.0.0.0:1038 *:*
UDP 0.0.0.0:1042 *:*
UDP 0.0.0.0:1075 *:*
UDP 0.0.0.0:1434 *:*
UDP 0.0.0.0:1645 *:*
UDP 0.0.0.0:1646 *:*
UDP 0.0.0.0:1755 *:*
UDP 0.0.0.0:1812 *:*
UDP 0.0.0.0:1813 *:*
UDP 0.0.0.0:3456 *:*
UDP 0.0.0.0:3527 *:*
UDP 127.0.0.1:53 *:*
UDP 127.0.0.1:1028 *:*
UDP 127.0.0.1:1029 *:*
UDP 127.0.0.1:1035 *:*
UDP 127.0.0.1:1044 *:*
UDP 127.0.0.1:1045 *:*
UDP 127.0.0.1:1100 *:*
من دستور را موقعی اجرا کردم که به اينترنت متصل نبودم. اگر همين کار را در زمان اتصال به اينترنت انجام می‌دادم، يک سری سطرهای جديد هم اضافه می‌شد که مربوط به آن اتصال می‌شد. و نيز دقت کنيد که من سويچ an- را استفاده کردم و پورت‌ها به صورت عددی نمايش داده شده است که همين الان - الساعه - براتون توضيح می‌دم:
اولين نکته‌ای که به نظر می‌رسد، نامی است که برای هر ستون نوشته شده است:

Proto Local Address Foreign Address State

Proto : يعنی پروتکل، که می‌تواند TCP يا UDP باشد.
- Local Address : نشان‌دهنده ip کامپيوتر خودمان و شماره پورت‌هاست. مثلا سطر اول می‌گويد که ip من 0.0.0.0 است (دقت کنيد که من به اينترنت متصل نيستم) و اولين پورت باز (از نوع TCP با توجه به اول سطر) عدد ۷ است زيرا اين به صورت 0.0.0.0:7 نوشته شده است که قسمت قبل از کاراکتر : ، ip است و بعد از کاراکتر :، پورت است.


- Foreign Address : چون در اين مثال از سويچ a- يا an- استفاده کرده‌ايم، کاربردی ندارد. ولی بعدا خواهيد ديد که اگر از يک سويچ ديگر استفاده کنيم، می‌تواند مهم باشد.
- State : وضعيت اتصال را نشان می‌دهد
حالا اگه پورت‌ها را يکی يکی بررسی کنيد، می‌بينيد که در پروتکل TCP ، پورت‌های ۷، ۹، ۱۳، ۱۷، ۱۹، ۲۱ و... باز است و در پروتکل UDP ، پورت‌های ۷، ۹، ۱۳، ۱۷، ۱۹، ۶۸ و ... باز است.


حالا ممکن است بپرسيد که اين اطلاعات به چه دردی می‌خورد؟
جواب اين است که دانستن اين اطلاعات برای محافظت از خودتان در برابر همکارانتان (هکرها) است. مثلا اگر يک تروجان روی کامپيوتر شما نصب شده باشد، با اين دستور می‌توان آن را کشف کرد.
سوال – جواب

من پورت ۷۹ سروری رو باز کردم ولی نمی دونم چی کار کنم تا اطلاعات ازش بگیرم لطفا زبونش رو یاد بده ممنون.
پورت ۷۹ به همون روشی که توی درس‌ها گفتم می‌شه صحبت کرد.

با عرض سلام و خسته نباشيد به شما ميخواستم بپرسم که من چطوری ميتونم بفهمم که يه سرور يا کلاينت سيستم عاملش چيه؟
درس‌ها رو بخونين - به کمک nmap


fox: منظورم باز کردن پورت توسط زبان برنامه نویسی سی پورت روی دستگاه مقابل بود ! ايا می شود ؟
جواب همونه. شما بايد يه برنامه نبويسين که پورت روی کامپيوتری که روش اجرا ميشه باز کنه. اگه اين فايل را برای طرف مقابل بفرستين و اون فرد اين فايل رو اجرا کنه پورت رو کامپيوترش باز می‌شه ( مثل تروجان‌ها ). شما نمی‌تونين از کامپيوتر خودتون پورت روی کامپيوتر مقابل باز کنيد ( البته به کمک نقاط ضعف پورت هايی که قبلا باز شده و exploit کردنش می‌تونين يه کارايی بکنيد که بعدا به اين مبحث می‌رسيم )

در متن اصلی مقاله به هم ریختگی وجود ندارد. برای مطالعه بیشتر مقاله آن را خریداری کنید