هک سایت 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 از يکي از آدرسهاي زير استفاده کنيد:
http://cve.mitre.org/cgi-bin/cvename.cgi?name=xxxxxxxxxx http://cgi.nessus.org/cve.php3?cve=xxxxxxxxxکه به جاي 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 برخوردم. حالا اونو از کجا بخونم؟ از اينجا :
http://www.securityfocus.com/bid/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 به صورت يک نام (نه عدد) نامگذاري ميشوند و اونو بايد در صفحه زبر بخونين:
http://www.iss.net/security_center/search.phpکه وقتي در اين صفحه search کنيد، يک سري صفحات static بدست مياد که بايد بخونين.
۴- CA يا CERT:
سايت cert.org براي vul ها از اسم CA استفاده ميکند، مثل CA-2002-19 براي CA ها صفحه زير رو ببينيد:
http://www.cert.org/advisories/xxxxxxxxx.htmlبهجاي xxxxxxxxx مثلا مينويسيم: CA-2002-19
ضمنا دقت کنيد که وقتي مطالب مربوط به يک vul رو از سايت cert ميخونيد، ملاحظه ميکنيد که لينکهايي به صورت VU#xxxxx در آن هست که به جاي xxxx يک عدد نوشته شده مثلا 369347 که اين VU# رو ميتونيد از اينجا بخونيد:
http://www.kb.cert.org/vuls/id/xxxxxx
۵- و …
- چگونه vul هايي که يه سرور داره رو پيدا کنيم؟
خوب اين موضوع کاملا بستگي به سطح اطلاعات شما داره:
۱- جوجه هکرها و هکرهاي تازهکار:
جوجه هکرها و نيز هکرهاي تازه کار (قابل احترام) واسه پيدا کردن vul هاي مربوط به يک سرور از security scanner ها يا vulnerability scanner ها يا Vulnerability Analysis استفاده ميکنند. به کمک vul scanner ميتوان يک ip خاص رو به صورت اتوماتيک اسکن کرد تا ببينيم چه سوراخهايي داره که اونا رو exploit کنيم. بعد از اسکن يک ip يک سري CVE به ما ميده که اونا رو بايد بخونيم.
۲- هکرهاي پيشکسوت:
هکرهاي پيش کسوت با تجربهاي که دارند ميدونند که مثلا اگه يه سرور از IIS 5.0 استفاده ميکنه، چه vul هايي براي اون هست پس وقتشون رو با اسکن کردن تلف نميکنند. تجربه چيزي است که بهتدريج بدست ميآوريد، پس زياد عجله نکنيد.
آموزش هک سایت قسمت دوم پیدا کرد یک باگ
توجه کنید که باگ بر روی برنامه ای که یک پورت با آن برنامه کار میکند وجود دارد.
ping چيست ؟
ping دستوری است که مشخص میکند که آيا يک کامپيوتر خاص که ما ip يا domain آن را میدانيم، روشن و فعال (Active) هست يا نه. و اينکه اگر فعال باشد مدت زمان رسيدن بستههای tcp/ip از آن کامپيوتر به کامپيوتر ما چقدر است.
کاربرد اين دستور به صورت زير است:
ping 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 میکنيم.
کاربرد اين دستور به صورت زير است:
tracert 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 است که دوتاش رو توضيح میدم:
d- ==>
با استفاده از اين سويچ در نتايج حاصله فقط ip ها نمايش داده میشود.
مثلا مینويسيم: tracert sazin.com -d
h 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
proxy.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 استفاده میکند.
◊ چون پورتهای باز را هم توسط پورت اسکنر به دست آوردهام به آنها تلنت میکنم با دستور:
telnet www.iums.ac.ir portnum
نتايج حاصل از بعضی را میبينيد:
25 :
... 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 استفاده میکند.
110 :
.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 استفاده میکند.
119 :
NNTP Service 5.00.0984 Version: 5.0.2195.2966 Posting Allowed
و …
