امروز می خواهیم در خصوص انواع تکنیک های Enumeration و آموزش انجام حمله Enumeration بصورت عملی صحبت کنیم. شما که در حال خواندن این مطلب آموزشی هستید حتما با ماهیت Enumeration چیست و انواع Enumeration که قبلا در وب سایت توسینسو بصورت مقاله قرار گرفته اند آشنایی دارید و در فکر این هستید که چگونه این حملات را انجام بدهید ، این مقاله برای شما طراحی شده است بنابراین با آموزش Enumeration در هک و نفوذ در خدمت شما هستیم.
یکی دیگر از ابزارهای لینوکسی که می تواند در فرآیند Enumeration به ما کمک کند rpcinfo نام دارد. همانطور که از نام این ابزار مشخص است دستور rpcinfo یک RPC Call به یک RPC سرور انجام می دهد و وضعیت سرور را به ما گزارش می دهد. بصورت کلی اگر سرویس RPC بر روی سرور مورد نظر فعال باشد این ابزار به ما می گوید که سرور مورد نظر آیا آماده سرویس دهی است یا اینکه در دسترس نیست. پارامترهایی که در این ابزار استفاده می شوند هم می توانند اسم باشند و هم شماره ، برای مثال اگر شما version یا شماره دقیقی را در این ابزار در پارامترها عنوان کنید دستور rpcinfo دقیقا به دنیال call یا فراخوانی همان نسخه از آن برنامه می رود.
در غیر اینصورت بصورت خودکار rpcinfo به دنیا سایر نسخه های موجود از برنامه می گردد و هر نسخه ای که بتواند را فراخوانی می کند. RPC مخفف Remote Procedure Call است و این سرویس امکان ارائه خدمات تحت شبکه نرم افزارها را فراهم می کند ، در فرآیند Enumeration می توان از این دستور برای Enumerate کردن اطلاعات از سرویس RPC استفاده کرد ، Syntax استفاده از این ابزار به شکل زیر می باشد :
Rpcinfo [-a] [-b] [-d] [-l] [-m] [-n + Port Number] [-p] [-s] [-t] [-T] [-u] Target (IP or Name)
عنوان کردن تک تک سویچ ها و کاربردهای آن در هر بحث متفاوت است و بهتر است در ITPRO برای معرفی بهتر این ابزار از مثال های کاربردی آن استفاده کنیم :
1- برای نمایش دادن کلیه سرویس های مبتنی بر RPC بر روی Local Machine
rpcinfo -p
2- برای نمایش دادن کلیه سرویس های مبتنی بر RPC بر روی سیستم هدف
rpcinfo -p Server1.tosinso.com
3- برای نمایش دادن کلیه ماشین های شبکه که نسخه خاصی از یک سرویس را اجرا کرده اند ( نام سرویس ypserv )
rpcinfo -b ypserv 2
4- برای حذف کردن registration یک سرویس در سیستم Local ( نام سرویس sprayd )
rpcinfo -d sprayd 1
5- برای بررسی اینکه آدرس IP شماره 127.0.0.1 و برنامه به ID 100003 و نسخه 3 بر روی پورت TCP شماره 2049 شنود دارند یا خیر
rpcinfo -a 127.0.0.1.8.1 -T tcp 100003 3
اینها تنها مثالهایی از استفاده از این ابزار در شبکه برای Enumeration یا دریافت و مدیریت سرویس ها می باشد . شما می توانید اطلاعات بیشتری را با استفاده از مثالهای کاربردی و عملی و همچنین استفاده از راهنمای این ابزار به دست بیاورید.
در ادامه می خواهیم در خصوص دستوراتی که می توانند این فرآیند را برای ما انجام بدهند صحبت کنیم. مجموعه ای از ابزارهای لینوکسی خط فرمانی به نام NTP Suite وجود دارد که می توانند فرآیند NTP Enumeration را به سادگی برای ما انجام بدهند. NTP Suite برای Query گرفتن از NTP سرورها برای دریافت اطلاعات برای Enumeration استفاده می شود. این مجموعه ابزارها شامل دستورات زیر هستند که بیشتری کاربرد را دارند :
ntptrace [-vdn] [-r retries] [-t timeout] [servername/IP_Address]
مثالی از استفاده از دستور ntptrace :
# ntptrace localhost: stratum 4, offset 0.0019529, synch distance 0.143235 192.168.0.1: stratum 2, offset 0.0114273, synch distance 0.115554 192.168.1.1: stratum 1, offset 0.0017698, synch distance 0.011193
ntpdc [-ilnps] [-c command] [hostname/IP_Address]
مثالی از استفاده از دستور ntpdc :
root@attacker]# ntpdc -c sysinfo 192.168.0.1 ***Warning changing to older implementation ***Warning changing the request packet size from 160 to 48 system peer: 192.168.1.100 system peer mode: client leap indicator: 00 stratum: 5 precision: -15 root distance: 0.00107 s root dispersion: 0.02306 s reference ID: [192.168.1.100] reference time: f66s4f45.f633e130 Wed, Jun 28 2006 11:06:11.631 system flags: monitor ntp stats calibrate jitter: 0.000000 s stability: 4.256 ppm broadcastdelay: 0.003875 s authdelay: 0.000107 s
ntpq [-inp] [-c command] [Host/IP_Address]
مثالی از استفاده از دستور ntpq :
root@attacker]# ntpq 192.168.01 ntpq> lpeers remote refid st t when poll reach delay offset jitter *192.168.1.100 LOCAL(0) 4 u 18 58 344 0.655 -0.039 0.029 ntpq> version ntpq 4.2.0a@1.1196-r Mon May 07 14:14:14 EDT 2006 (1) ntpq> host current host is 192.168.0.1 ntpq> readlist assID=0 status=0674 leap_none, sync_ntp, 7 events, event_peer/strat_chg, system="SunOS", leap=00, stratum=5, rootdelay=0.655, rootdispersion=20.080, peer=40852, refid=192.168.1.100, reftime=c66b4f07.d732d455 Sat, Jul 01 2006 17:28:11.773, poll=6, clock=0xc66b4f3b.595ed455, phase=-0.040, freq=80337.65, error=0.01
ابزاری برای شمارش اطلاعات از سیستم های ویندوز و سامبا است. سعی می کند عملکرد مشابهی را برای enum.exe که قبلاً از www.bindview.com در دسترس بود ارائه بدهد. این نرم افزار به زبان Perl نوشته شده است و اساساً یک حلقه در اطراف ابزارهای Samba smbclient ، rpclient ، net و nmblookup می باشد.
***اما ممکنه براتون سوال پیش بیاد که سامبا (samba) دقیقا چیه؟
Samba یک نرم افزار رایگان است که مجددا پروتکل شبکه SMB را پیاده سازی می کند و در ابتدا توسط اندرو تریدگل توسعه داده شد. Samba خدمات فایل و چاپ را برای سرویس گیرندگان مختلف Microsoft Windows ارائه می دهد و می تواند با یک دامنه Microsoft Windows Server ، به عنوان یک کنترل کننده دامنه یا به عنوان یک عضو دامنه ادغام شود.
*** خب همونطور که تا الان متوجه شدیم این ابزار روی سرویس smb کار خودشو انجام میده حالا میخوایم یه توضیحی در رابطه با خوده پروتکل smb بدیم و با این سرویس بیشتر آشنا بشیم.
SMB یا (بلوک پیام سرور) یک پروتکل است که به منابع یک شبکه اجازه می دهد فایل ها را به اشتراک بگذارند ، شبکه را مرور کرده و از طریق شبکه چاپ کنند. در ابتدا در ویندوز استفاده می شد ، اما سیستم های یونیکس می توانند از SMB از طریق Samba استفاده کنند. امروز ، ما از ابزاری به نام Enum4linux برای استخراج اطلاعات از یک هدف و همچنین smbclient برای اتصال به اشتراک SMB و انتقال فایل ها استفاده خواهیم کرد. خب تا اینجا ارتباط بین ابزار enum4linux و پروتکل smb را متوجه شدیم.
شمارش عبارت است از جمع آوری اطلاعات روی یک هدف به منظور یافتن بردارهای احتمالی حمله و کمک به بهره برداری. این فرایند برای موفقیت یک حمله ضروری است ، زیرا اتلاف وقت با سوء استفاده هایی که یا کار نمی کند یا می تواند سیستم را خراب کند می تواند فاجعه بار باشد. از شمارش می توان برای جمع آوری نام های کاربری ، گذرواژه ها ، اطلاعات شبکه ، نام میزبان ، داده های برنامه ، خدمات یا هر اطلاعات دیگری که ممکن است برای مهاجم ارزشمند باشد استفاده کرد.
به طور معمول ، درایوهای اشتراکی SMB روی سرور وجود دارد که می توانند به آنها متصل شده و برای مشاهده یا انتقال فایل ها استفاده شوند. SMB اغلب می تواند یک نقطه شروع عالی برای مهاجمی باشد که به دنبال کشف اطلاعات حساس است. شما از آنچه که گاهی در این سهام درج می شود شگفت زده خواهید شد. در برخی موارد نادر ، مانند زمانی که دایرکتوری اشتراک SMB و فهرست اصلی سرور وب یکسان هستند ، مهاجم حتی می تواند از پیکربندی نادرست برای دستیابی به اجرای کد سوء استفاده کند.
برای مشاهده اطلاعات راهنما و استفاده از ابزار میتوانید enum4linux را به تنهایی در ترمینال وارد کنید.
بسته Samba برای استفاده از ابزار باید نصب شود. اگر قبلاً روی سیستم شما وجود ندارد ، می توانید آن را با دستور زیر نصب کنید.
~# apt-get install samba
اساسی ترین استفاده از Enum4linux این هست که یک گزینه و آدرس IP هدف را می گیرد. ما می توانیم از سوئیچ -U برای مشخص کردن هدف استفاده کنیم.
~# enum4linux -U 10.10.0.89
سوئیچ -S اطلاعاتی در مورد نام گروه (Group User) و کاربران حاضر در سیستم SMB در دستگاه را به ما می دهد.
~# enum4linux -S 10.10.0.89
ما می توانیم با استفاده از سوئیچ -L به همراه آدرس IP سرور ، لیستی از اشتراک گذاری های مورد نظر را ، مانند آنچه قبلاً در Enum4linux انجام دادیم ، بدست آوریم.
~# smbclient -L //10.10.0.89/
Enter WORKGROUP\root's password:
Anonymous login successful
Sharename Type Comment
--------- ---- -------
print$ Disk Printer Drivers
tmp Disk oh noes!
opt Disk
IPC$ IPC IPC Service (metasploitable server (Samba 3.0.20-Debian))
ADMIN$ IPC IPC Service (metasploitable server (Samba 3.0.20-Debian))
Reconnecting with SMB1 for workgroup listing.
Anonymous login successful
Server Comment
--------- -------
Workgroup Master
--------- -------
WORKGROUP METASPLOITABLE
برای دریافت Cheet Sheet کامل ابزار میتونید از لینک زیر استفاده کنید.
زمانیکه شما در یک فرآیند تست نفوذ هستید و فاز Enumeration را انجام می دهید ، یکی از ابزارهای سیستم عامل لینوکس که به شما در این راستا می تواند کمک کند ابزار rpcclient است. این ابزار با استفاده از شناسایی کردن سرورهایی که از پروتکل SMB در شبکه استفاده می کنند و پورت های مربوط به سرویس NetBIOS آنها نیز باز است اقدام به ایجاد کردن Null Session به سرور مقصد کردن و امکان بدست آوردن اطلاعات بسیار خوبی از هدف را به ما می دهد .
قبلا در توسینسو در خصوص Null Session یا Anonymous Session صحبت کرده ایم ، فراموش نکنید که این ابزار امکان اسکن پورت ندارد و شناسایی سیستم های هدف به وسیله ابزارهای دیگری مانند Nmap انجام می شود. خوب این ابزار دارای پارامترها و سویچ های مختلفی است که برخی از آنها را با ذکر مثال در ادامه با هم یاد می گیریم ، دستور زیر تلاش برای ایجاد کردن Null Session به سرور مقصد را نشان می دهد ، با توجه به اینکه سرور مقصد آسیب پذیر نیست پاسخ زیر را دریافت خواهید کرد :
$ rpcclient -U "" 192.168.1.31 Enter 's password: could not initialise lsa pipe. Error was NT_STATUS_ACCESS_DENIED could not obtain sid for domain WORKGROUP error: NT_STATUS_ACCESS_DENIED
اما اگر سرور مقصد دارای این آسیب پذیری باشد نتیجه به شکل زیر نمایش داده می شود :
$ rpcclient -U "" 192.168.1.18 Enter 's password: rpcclient $>
بعد از اینکه با موفقیت به سرور مقصد متصل شدید ، شما می توانید با استفاده از Help ابزار دستورات موجود برای این ابزار را مشاهده کنید ، در ادامه دستوراتی که بیشترین کاربرد را دارند را به شما معرفی می کنیم ، دستور زیر به شما اطلاعات ساده و اولیه ای در خصوص سرور مقصد ارائه می دهد :
rpcclient $> srvinfo LUIGI Wk Sv PrQ Unx NT SNT nintendo server platform_id : 500 os version : 4.9 server type : 0x809a03
دستور زیر برای بدست آوردن لیست کاربران یا User Enumeration استفاده می شود :
rpcclient $> enumdomusers user:[admin] rid:[0x3ec] user:[Administrator] rid:[0x1f4] user:[Guest] rid:[0x1f5] user:[lisa] rid:[0x3f1] user:[mark] rid:[0x3f2]</pre>
دستور زیر برای بدست آوردن لیست گروه ها یا Group Enumeration استفاده می شود :
rpcclient $> enumalsgroups builtin group:[Administrators] rid:[0x220] group:[Backup Operators] rid:[0x227] group:[Guests] rid:[0x222] group:[Power Users] rid:[0x223] group:[Users] rid:[0x221]
دستور زیر می تواند سطح دسترسی های کاربران را به شما نمایش بدهد که در اصطلاح Privilege گفته می شود :
rpcclient $> enumprivs found 8 privileges SeMachineAccountPrivilege 0:6 (0x0:0x6) SeTakeOwnershipPrivilege 0:9 (0x0:0x9) SeBackupPrivilege 0:17 (0x0:0x11) SeRestorePrivilege 0:18 (0x0:0x12) SeRemoteShutdownPrivilege 0:24 (0x0:0x18) SePrintOperatorPrivilege 0:4097 (0x0:0x1001) SeAddUsersPrivilege 0:4098 (0x0:0x1002) SeDiskOperatorPrivilege 0:4099 (0x0:0x1003)
دستور زیر لیست Share های شبکه ای که بر روی سیستم مقصد وجود دارد را نمایش می دهد :
rpcclient $> netshareenum netname: IPC$ remark: IPC Service path: C:\tmp password: netname: Lisa Share remark: Lisa Docs path: C:\home\lisa\files password:
البته مجموعه ابزارهای قویتر و کاربردی تری هم وجود دارند که بسیاری از فرآیند های مربوط به Null Session را خودکار انجام می دهد که از آن جمله می توانیم به enum4linux اشاره کنیم .
در ادامه مباحث مربوط به Enumeration در هک قانونمند به معرفی ابزاری ساده و کاربردی به نام showmount می پردازیم. Showmount همانطور که از نام ابزار هم مشخص است دستوری است که لیستی از دایرکتوری های به اشتراک گذاری شده در یک سیستم را به ما نمایش می دهد. همچنین کلاینت هایی که از راه دور به سیستم متصل شده و در حال استفاده از منابع آن هستند نیز در خروجی این دستور نمایش داده می شوند. این ابزار برای فعالیت کردن معمولا به سرویسی به نام mountd وابسته است ، mountd یک سرور RPC است که به درخواست ها و سئوالاتی که در خصوص File System و NFS به سیستم ارسال می شوند پاسخ می دهد.
سرویس mountd بر روی سیستم اطلاعات مربوط به host را نگهداری و به ما نمایش می دهد. فایلی به نام rmtab نیز وجود دارد که اطلاعات در آن نگهداری شده و در برابر از بین رفتن و صدمه دیدن نگهداری می شوند. مقدار پیشفرضی که برای host در واقع همان مقدار اولیه ای است که توسط اسم سیستم مقصد دریافت می شود. شاید یک مقدار این ابزار در مراحل اولیه مبهم باشد اما فراموش نکنید که با مثال زیر می توانید مفهوم را به درستی درک کنید ، بصورت ساده ابتدا شما با دستور mountd سرویس مورد نظر را فعال می کنید و سپس با showmount اطلاعات را دریافت می کنید . syntax یا نحوه استفاده از این دو ابزار به شکل زیر می باشد :
/user/lib/nfs/mountd [-v] [-r] /usr/sbin/showmount [-ade] [hostname]
از مهمترین option ها یا پارامترهای این دستورات می توانیم به موارد زیر اشاره کنیم :
برای مثال اگر شما دستوری به شکل showmount –e 192.168.1.1. 255.255.255.0 را وارد کنید کلیه Shared Directory هایی که بر روی Host مورد نظر Mount شده اند برای شما لیست خواهد شد. امیدوارم مورد توجه شما قرار گرفته باشد.
در مورد DNS Enumerating در ویندوز بسیار صحبت کردیم. در این آموزش قصد داریم تا بصورت عملی نحوه کار با ابزار DNSenum را در لینوکس کالی بشما آموزش دهیم. مطالب گفته شده جزو مطالب پایه ای در آموزش کالی لینوکس ( PWK ) یا تست نفوذ با کالی میباشند. پس بی مقدمه به سراغ آموزش میرویم:
DNS یا بعبارتی (Domain Name System (Service// Server، یک سرویس تحت شبکه است که نام های شبکه (Domain name) را به آدرس های IP و بلعکس تبدیل میکند. به علت آن که نام های شبکه متشکل از حروف الفبا هستند، راحت تر بخاطر سپرده میشوند؛ اما این در حالی است که اینترانت بر اساس IP کار میکند. هر زمانی که شما از نام های دومینی استفاده میکنید، سرویس DNS باید این نام را به آدرس IP متناظر آن تبدیل کند. برای مثال نام دومینی www.tosinso.com به آدرس 198.105.232.4 تبدیل میشود.
یکی از مهمترین مراحل در یک حمله، جمع آوری اطلاعات است. برای آن که بتوان یک حمله را ترتیب داد، نیاز است تا اطلاعات پایه و اساسی را در مورد هدف جمع آوری کنیم. بنابراین هرچه اطلاعات بیشتری در مورد هدف جمع شود، احتمال موفقیت آمیز بودن حمله بالاتر میرود.Enumeration فرایندی است که بما این اجازه را میدهد تا بتوانیم از یک شبکه اطلاعات لازم را جمع آوری کنیم. در اینجا بطور مختصر قصد داریم تا تکنیک های DNS Enumeration و SNMP Enumeration را برای شما در لینوکس کالی توضیح دهیم.
DNS Enumeration فرآیند مکان یابی تمام سرورهای DNS و داده های موجود در آن ها در مورد یک سازمان است. DNS Enumeration بما این امکان را میدهد تا اطلاعات حساس درمورد یک سازمان مانند یوزرنیم ها، نام سیستم ها، آدرس های IP و نظایر آن را جمع آوری نماییم. برای آن که بتوانیم این کار را انجام دهیم، از ابزار DNSenum استفاده میکنیم.در مورد SNMP Enumeration نیز از ابزاری بنام SnmpEnum استفاده خواهیم نمود. این ابزار یکی از قویترین ابزارها در زمینه SNMP Enumeration است که به کاربران این اجازه را میدهد تا ترافیک SNMP را بر روی یک شبکه آنالیز کنند.برای اجرای DNSenum به مسیر زیر رفته و آن را اجرا نمایید:
Application> Kali Linux> Information Gathering> DNS Analysis> dnsenum
و در نهایت فرمان زیر را وارد کنید:
root@kali:~# dnsenum – – enum test.com
اجرای این فرمان بشما آدرس هاست، آدرس Name Server ها، میل سرورها (MX) و اطلاعات Zone Transfer را نشان خواهد داد.
اگر میخواهید اسکن قدرتمند تری در مورد دومین های زیرمجموعه هم داشته باشید، از عبارت زیر باید استفاده کنید:
root@kali:~# dnsenum – – enum –f –r test.com
گزینه های زیادی وجود دارند که ما بوسیله آن ها میتوانیم از DNSenum استفاده کنیم؛ آن ها عبارتند از:
خوب دوستان در این آموزش کوتاه توانستیم با ابزار DNSenum که یکی از ابزار قدرتمند Enumerate کردن سرورها و رکوردهای DNS است، آشنا شویم. با آموزش های بعد در این زمینه با ما همراه باشید.
در مورد جمع آوری اطلاعات به کرات و با استفاده از ابزارهای مختلف در جلسات پیش صحبت شد. هنگامی که شما اطلاعات لازم و کافی را درباره هدف با استفاده از ابزارهای متن باز (open source) و دیگر تکنیک های جمع آوری پسیو اطلاعات بدست آوردید، در گام بعد میتوانید اطلاعات تکمیلی و بیشتری را از سرویس های خاص و دیگری که در شبکه هدف وجود دارند بدست آورید. در این سری از نکات قصد داریم تا چندین آپشن از جمع آوری اکتیو اطلاعات را خدمت شما بیان کنیم. توجه داشته باشید که سریوس هایی که در این سری آموزشات خدمت شما معرفی میشوند جزو سرویس های مقدماتی و پایه در جمع آوری اکتیو اطلاعات هستند.
سرور DNS معمولا اطلاعات DNS و سرور Mail موجود در دامینی که ثبت شده است را براحتی در فاش میکند. البته نمیتوان این موضوع را جز باگ های DNS بشما آورد چرا که علاوه بر این که این افشای اطلاعات باگ نیست، بلکه در شبکه نیز جز موارد لازم بحساب میآید. برای مثال درخواست عمومی برای دسترسی به آدرس سرورهای mail و DNS، یکی از پایه ای ترین موارد لازم در دنیای اینترنت است. برای مثال دامین megacorpone.com را مورد آزمایش قرار میدهیم. میخواهیم از فرمان host به همراه سوئیچ -t استفاده کنیم تا از طریق آن سرورهای Mail و DNS برای دامین megacorpone.com پیدا نماییم.
root@kali:~# host –t ns megacorpone.com megacorpone.com name server ns2.megacorpone.com. megacorpone.com name server ns1.megacorpone.com. megacorpone.com name server ns3.megacorpone.com. root@kali:~# host –t mx megacorpone.com megacorpone.com mail is handled by 60 mail.megacorpone.com. megacorpone.com mail is handled by 50 mail2.megacorpone.com.
بصورت پیش فرض هر دامینی که ساختاربندی میشود، حداقل باید برای آن دامین باید سرورهای DNS و Mail را نیز به عنوان سرورهای عمومی آن شبکه معرفی کرد.
با انجام مثال قبل توانستیم اطلاعات اولیه را از دامین megacorpone.com بدست آوریم. میتوانیم با استفاده از کوئری های دیگری از DNS، اطلاعات بیشتری از نام هاست ها و آدرس های IP ای که متعلق به دامین megacorpone.com هستند، بدست آوریم. برای مثال میتوانیم فرض کنیم که دامین megacorpone.com یک وب سرور با نام احتمالی www دارد. میتوانیم این فرضیه را با استفاده مجدد از فرمان host تست کنیم:
root@kali:~# host www.megacorpone.com www.,egacorpone.com has address 50.7.67.162
حالا میخواهیم بررسی کنیم که دامین megacorpone.com آیا سروری با نام idontexist دارد؟ به خروجی کوئری های زده شده، توجه کنید.
root@kali:~# host idontexist.megacorpone.com Host idontexist.megacorpone.com not found: 3(NXDOMAIN)
با استفاده از مفهوم بیان شده در مرحله قبل میتوانیم این گام را نیز اجرا کنیم. در واقع میتوانیم با استفاده از فرمان "host" و یک اسکریپت Bash، فرآیند درخواست مستقیم جستجوی (lookup) نام هاست های عمومی شبکه را خودکار کنیم. ایده ای که پشت سر این روش وجود دارد، حدس زدن نام سرورهای (host name) فعال از طریق تلاش در تبدیل این نام های حدس زده شده به IP متناظر آن ها است.
اگر نامی (host name) که حدس زده بودیم در فرآیند lookup، موجودیت آن به اثبات رسید، از طریق آن میتوان فعال بودن و گهگاهی نقش آن سرور را نیز تعیین نمود. میتوانیم لیستی کوتاه و یا بلند از نام های (host name) محتمل را تهیه کرده و با ایجاد یک حلقه بی نهایت (loop) از فرمان "host"، صحت وجود هرکدام از آن ها را امتحان نماییم.
root@kali:~# echo www >> list.txt root@kali:~# echo ftp >> list.txt root@kali:~# echo mail >> list.txt root@kali:~# echo owa >> list.txt root@kali:~# echo proxy >> list.txt root@kali:~# echo router >> list.txt root@kali:~# for ip in $(cat list.txt); do host $ip.megacorpone.com;done www.megacorpone.com hass address 50.7.67.162 Host ftp.megacorpone.com not found: 3(NXDOMAIN) mail.megacorpone.com has address 50.7.67.155 Host owa.megacorpone.com not found: 3(NXDOMAIN) Host proxy.megacorpone.com not found: 3(NXDOMAIN) Router.megacorpone.com has address 50.7.67.190 root@kali:~#
در این مثال ساده، متوجه شدیم که موجودیت نام های هاست www، router و mail از طریق این حمله Brute-Force کشف شده اند. در طرف دیگر، نام های هاست owa، ftp و proxy، پیدا نشدند.
جستجوی مستقیم ما با استفاده از روش brute-force، مجموعه ای از IP های پراکنده را بما نشان داد. اگر مسئول پیکربندی DNS در دامین megacorpone.com رکوردهای PTR را نیز برای این دامین پیکربندی میکرد، در جستجوی پیش ممکن بود نام های دامینی بیشتری را با جستجوی رنج IP های پیدا شده در یک لوپ بدست آوریم.
root@kali:~# for ip in $(seq 155 190);do host 50.7.67.$ip;donw | grep –v "not found" ; done 155.67.7.50.in-addr.arpa domain name pointer mail.megacorpone.com. 162.67.7.50.in-addr.arpa domain name pointer www.megacorpone.com. 163.67.7.50.in-addr.arpa domain name pointer mail2.megacorpone.com. 164.67.7.50.in-addr.arpa domain name pointer www2.megacorpone.com. 165.67.7.50.in-addr.arpa domain name pointer beta.megacorpone.com. ….
فرآیند Zone transfer بسیار شبیه عمل همانند سازی (replicate) مابین سرورهای DNS مرتبط بهم است. این فرآیند شامل کپی شدن فایل های زون از یک سرور DNS اصلی (Master) به یک سرور DNS فرمانبردار (slave) است. فایل زون شامل لیستی از تمام نام های DNS است که در آن زون ایجاد و ساختاربندی شده اند.
فرآیند انتقال زون (zone transfer) معمولا باید در مواجهه با سرورهای slave غیر مجاز و شناخته نشده با محدودیت روبرو شوند اما متاسفانه بسیاری از مدیران شبکه سرورهای DNS را بطور صحیح پیکربندی نمیکنند. درنتیجه هرکسی که با درخواست انتقال یک کپی از فایل زون، میتواند یک نسخه آن را دریافت کند.
یک فرآیند انتقال زون موفق مستقیما به معنی وجود رخنه در یک شبکه نیست. عبارت دستوری "host" برای انجام فرآیند انتقال زون در زیر بیان شده است:
Host –l <domain name> <dns server address>
در آخرین فرمان "host" که وارد کردیم، متوجه شدیم که دو سرور DNS در اختیار دامین megacorpone.com هستند: ns1 و ns2. میخواهیم بر روی هرکدام از آن ها فرآیند انتقال زون را تست کنیم:
root@kali:~# host –l megacorpone.com ns1.megacorpone.com ; transfer failed Using domain server: Name: ns1.megacorpone.com Address: 50.7.67.186#53 Aliases: Host megacorpone.com not found: 5(REFUSED) ; Transfer failed. root@kali:~# host –l megacorpone.com ns2.megacorpone.com Using domain server: Name: ns2.megacorpone.com Address: 50.7.67.154#53 Aliases: Megacorpone.com name server ns1.megacorpone.com. Megacorpone.com name server ns2.megacorpone.com. Megacorpone.com name server ns3.megacorpone.com. Admin.megacorpone.com has address 50.7.67.187 Beta.megacorpone.com has address 50.7.67.165 Fs1.megacorpone.com has address 50.7.67.166 interanet.megacorpone.com has address 50.7.67.188 mail.megacorpone.com has address 50.7.67.155 mail2.megacorpone.com has address 50.7.67.163 ns1.megacorpone.com has address 50.7.67.186 ns2.megacorpone.com has address 50.7.67.154 ns3.megacorpone.com has address 50.7.67.170 router.megacorpone.com has address 50.7.67.190 router.megacorpone.com has address 10.7.0.1 siem.megacorpone.com has address 50.7.67.180 snmp.megacorpone.com has address 50.7.67.181 syslog.megacorpone.com has address 50.7.67.178 test.megacorpone.com has address 50.7.67.182 vpn.megacorpone.com has address 50.7.67.189 www.megacorpone.com has address 50.7.67.162 www2.megacorpone.com has address 50.7.67.164 root@kali:~#
در این مثال، ns1 در مقابل درخواست انتقال زون، جواب رد داد در حالی ns2 آن را قبول کرد. در نتیجه یک دامپ کامل از فایل زون برای دامین megacorpone.com را شاهد هستیم که در قالب لیستی از IP ها و نام های DNS ای برای دامین megacorpone.com بما ارائه شده است.
در مثال بالا دامین megacorpone.com فقط دو سرور DNS دارد که باید هرکدام چک شوند اما برخی از شرکت های بزرگ ممکن است تعداد بیشتری سرور DNS داشته باشند و یا ممکن است بخواهند تا درخواست های انتقال زون را علیه یک دامین خاص اجرا کنند. در اینجا اسکریپت نویسی Bash به بازی میآید. برای انجام انتقال زون توسط فرمان "host" به دو پارامتر نیاز داریم: نام دامین تحلیل شده و آدرس name server. برای دریافت name server های یک دامین در فرمت صحیح باید دستور زیر را دنبال کنیم:
root@kali:~# host –t ns megacorpone.com | cut –d " " –f 4 ns2.megacorpone.com. ns1.megacorpone.com.
برای آن که بتوانیم این کار را در دفعات بعدی نیز انجام دهیم، اسکریپت ساده ای از Bash را مینویسیم تا فرآیند تلاش برای انتقال زون برای روی هر سرور DNS ای که پیدا میکنیم، خودکار صورت پذیرد.
# /bin/bash # Simple Zone Transfer Bash Script # $1 is the first argument given after the bash script # Check if argument was given, if not, print usage If [ -z "$1" ]; then Echo "[*] Simple Zone transfer script" Echo "[*] Usage : $0 <domain name> " Exit 0 Fi # if argument was given, identify the DNS servers for the domain For server in $(host –t ns $1 | cut –d " " –f4);do # for each of these servers, attempt a zone transfer Host –l $1 $server |grep "has address" Done
اجرای این اسکریپت بر روی دامین megacorpone.com باید بصورت خودکار هر دو name server را شناسایی کرده و تلاش کند تا بر روی هر کدام از آن ها عمل انتقال زون را انجام دهد.
root@kali:~# chmod 755 dns-axfr.sh root@kali:~# ./dns-axfr.sh megacorpone.com admin.megacorpone.com has address 50.7.67.187 beta.megacorpone.com has address 50.7.67.165 Fs1.megacorpone.com has address 50.7.67.166 interanet.megacorpone.com has address 50.7.67.188 mail.megacorpone.com has address 50.7.67.155 mail2.megacorpone.com has address 50.7.67.163 ns1.megacorpone.com has address 50.7.67.186 ns2.megacorpone.com has address 50.7.67.154 ns3.megacorpone.com has address 50.7.67.170 router.megacorpone.com has address 50.7.67.190 router.megacorpone.com has address 10.7.0.1 siem.megacorpone.com has address 50.7.67.180 snmp.megacorpone.com has address 50.7.67.181 syslog.megacorpone.com has address 50.7.67.178 test.megacorpone.com has address 50.7.67.182 vpn.megacorpone.com has address 50.7.67.189 www.megacorpone.com has address 50.7.67.162 www2.megacorpone.com has address 50.7.67.164 root@kali:~#
ابزار DNSRecon یک اسکریپت مدرن و پیشرفته در بازیابی رکوردها و اطلاعات DNS میباشد که بزبان Python نوشته شده است. اجرای اسکریپت dnsrecon بر روی دامین تستی megacorpone.com، خروجی زیر را در بر خواهد داشت:
root@kali:~# dnsrecon –d megacorpone.com –t axfr [*] testing NS Servers for Zone transfer [*] Checking fore Zone Transfer for megacorpone.com name servers [*] Resolving SOA Record [*] SOA ns1.megacorpone.com 50.7.67.186 [*] Resolving NS Records [*] NS Servers found: [*] NS ns2.megacorpone.com 5.7.67.154 [*] NS ns1.megacorpone.com 5.7.67.186 [*] NS ns3.megacorpone.com 5.7.67.170 [*] Removing any duplicate NS server IP Addresses… [*] [*] trying NS server 50.7.67.154 [*] 50.7.67.154 Has port 53 TCP open [*] Zone Transfer was successful!! [*] MX@.megacorpone.com fb.mail.gandi.net 217.70.184.163 [*] MX@.megacorpone.com fb.mail.gandi.net 217.70.184.162 [*] MX@.megacorpone.com spool.mail.gandi.net 217.70.184.6 [*] MX@.megacorpone.com spool.mail.gandi.net 2001:4b98:c:521::6 [*] A admin.megacorpone.com 50.7.67.187 [*] A fs1.megacorpone.com 50.7.67.166 [*] A www2.megacorpone.com 50.7.67.174 [*] A test.megacorpone.com 50.7.67.182 [*] A ns1.megacorpone.com 50.7.67.186 [*] A ns2.megacorpone.com 50.7.67.154 [*] A ns3.megacorpone.com 50.7.67.170 [*] A www.megacorpone.com 50.7.67.162 [*] A siem.megacorpone.com 50.7.67.180 [*] A mail2.megacorpone.com 50.7.67.163 [*] A router.megacorpone.com 50.7.67.190 [*] A mail.megacorpone.com 50.7.67.155 [*] A vpn.megacorpone.com 50.7.67.189 [*] A snmp.megacorpone.com 50.7.67.181 [*] A syslog.megacorpone.com 50.7.67.178 [*] A beta.megacorpone.com 50.7.67.165 [*] A interanet.megacorpone.com 50.7.67.188
این ابزار یکی دیگر از ابزارهای محبوب در زمینه بازیابی و بدست آوردن اطلاعات از DNS یا همان DNS Enumeration است. اجرای این اسکریپت را بر روی دامین zonetransfer.me، که صرفا اجازه انتقال زون (zone transfer) بما میدهد، تست خواهیم کرد که در نهایت خروجی زیر بما برگشت داده میشود:
root@kali:~# dnsenum zonetransfer.me dnsenum.pl VERSION:1.2.2 ------ zonetransfer.me ------ Host’s addresses: Zonetransfer.me 7200 IN A 217.147.180.162 Name Servers: Ns12.zoneedit.com 3653 IN A 209.62.64.46 Ns16.zoneedit.com 6975 IN A 69.64.68.41 Mail (MX) Servers: ASPMX5.GOOGLEMAIL.COM 293 IN A 173.194.69.26 ASPMX.L.GOOGLE.COM 293 IN A 173.194.74.26 ALT1.ASPMX.L.GOOGLE.COM 293 IN A 173.194.66.26 ALT2.ASPMX.L.GOOGLE.COM 293 IN A 173.194.65.26 ASPMX2.GOOGLEMAIL.COM 293 IN A 173.194.78.26 ASPMX3.GOOGLEMAIL.COM 293 IN A 173.194.65.26 ASPMX4.GOOGLEMAIL.COM 293 IN A 173.194.70.26 Trying Zone Transfer for zonetransfer.me on ns12.zoneedit.com… Zonetransfer.me 7200 IN SOA Zonetransfer.me 7200 IN NS Zonetransfer.me 7200 IN NS Zonetransfer.me 7200 IN MX Zonetransfer.me 7200 IN MX Zonetransfer.me 7200 IN MX Zonetransfer.me 7200 IN MX Zonetransfer.me 7200 IN MX Zonetransfer.me 7200 IN MX … Office.zontransfer.me 7200 IN A 4.23.39.254 Owa.zonetransfer.me 7200 IN A 207.46.197.32 Info.zonetransfer.me 7200 IN TXT Asfdbbox.zonetransfer.me 7200 IN A 127.0.0.1 Conberra_office.zonetransfer.me 7200 IN A 202.14.81.230 Asfdbvolume.zonetransfer.me 7800 IN AFSDB Email.zonetransfer.me 2222 IN NAPTR Dzc.zonetransfer.me 7200 IN TXT Robinwood.zonetransfer.me 302 IN TXT Vpn.zonetransfer.me 4000 IN A 174.36.59.154 _sip._tcp.zonetransfer.me 14000 IN SRV Dc_office.zonetransfer.me 7200 IN A 143.228.181.132 Ns16.zoneedit.com Bind Version: 8.4.x Brute force file not specified, bye. root@kali:~#
دستور finger در سیستم عامل لینوکس و خانواده یونیکس برای Enumerate کردن کاربران از راه دور نیز قابل استفاده است . این دستور در حالت معمول برای بدست آوردن اطلاعات از کاربران Local مورد استفاده قرار می گیرد. این دستور امکان مشاهده home directory ، login time ، Idle times ، office location و آخرین زمانی که ایمیل ارسال و دریافت شده است را به شما نشان می دهد. برای اینکه بتوانید از این دستور استفاده کنید بایستی این ابزار بر روی سیستم شما نصب شده باشد ، قالب استفاده کردن از این دستور بسیار ساده است و بصورت کلی به شکل زیر قابل استفاده است :
finger [-b] [-f] [-h] [-i] [-l] [-m] [-p] [-q] [-s] [-w] [username]
سویچ b : باعث چاپ شدن home directory کاربر به همراه shell در قالب طولانی یا long format می شود
سویچ f : باعث چاپ شدن header که معمولا در قالب غیرطولانی یا non-long format است می شود
سویچ h : باعث چاپ شدن فایل project. در قالب long format می شود
سویچ i : باعث چاپ قالب خروجی idle می شود که معمولا فقط شامل login name ، terminal ، login time و idle time می شود
سویچ l : باعث چاپ خروجی در حالت long format می شود.
سویچ m : تمامی آرگومان های خروجی را بر اساس username هماهنگ می کند
سویچ p : باعث جاپ شدن فایل plan. در قالب long format می شود
سویچ q : باعث چاپ خروجی سریع یا quick می شود که تقریبا شبیه short format است.
سویچ s : باعث جاپ خروجی بصورت short format می شود
سویچ w : باعث چاپ full name بصورت short format می شود
برای مثال اگر دستور root$] finger –l Server1@tosinso.com را وارد کنید لیستی از کاربرانی که در روی آن سرور وجود دارند برای شما نمایش داده می شود. دقت کنید که این در صورتی است که تنظیمات امنیتی بر روی سرور مقابل انجام نشده باشد . finger ابزار مناسبی برای enumeration در لینوکس است.پیش زمینه های ورود به دنیای هک و امنیت قطعا دوره های آموزش شبکه های کامپیوتری و به صورت ویژه دوره آموزش نتورک پلاس است.
در دوره آموزش هک قانونمند و یا دوره CEH شما به خوبی با نحوه پیاده سازی چنین حملاتی آشنا می شوید و صد البته مفاهیم مربوط به ماهیت و مفاهیم امنیت شبکه و هک و نفوذ را نیز در دوره آموزش سکیوریتی پلاس آموزش خواهید دید. پیشنهاد می کنم اگر هنوز در خصوص دنیای هک و نفوذ دارای ابهام هستید حتما مقاله چگونه هکر شویم در این لینک را مطالعه کنید. امیدوارم مورد توجه شما عزیزان قرار گرفته باشد. با تشکر محمد نصیری
بنیانگذار انجمن تخصصی فناوری اطلاعات ایران ، هکر کلاه خاکستری ، کارشناس امنیت اطلاعات و ارتباطات
محمد نصیری هستم ، بنیانگذار انجمن تخصصی فناوری اطلاعات ایران و مجموعه توسینسو ، هکر قانونمند و کارشناس امنیت سایبری ، سابقه همکاری با بیش از 80 سازمان دولتی ، خصوصی ، نظامی و انتظامی در قالب مشاور ، مدرس و مدیر و ناظر پروژه ، مدرس دوره های تخصص شبکه ، امنیت ، هک و نفوذ ، در حال حاضر در ایران دیگه رسما فعالیتی غیر از مشاوره انجام نمیدم ، عاشق آموزش و تدریس هستم و به همین دلیل دوره های آموزشی که ضبط می کنم در دنیا بی نظیر هستند.
زمان پاسخ گویی روز های شنبه الی چهارشنبه ساعت 9 الی 18
فقط به موضوعات مربوط به محصولات آموزشی و فروش پاسخ داده می شود