این سری درسها (ضروریات ویندوز سرور) به چه دردی میخورند؟
تجربه بهم ثابت کرده که خیلی از افرادی که ویندوز سرور هک میکنند، بعد از اینکه به shell دست مییابند، نمیدونند که بعدش دنبال چی باشند. حتی بعضیها بعد از اینکه به کمک یک نرمافزار آماده این کار رو انجام میدهند، حتی نمیتونند از دستورات خط فرمانی ویندوز استفاده کنند. این درس راجع به همینها بحث میکنه، یعنی اینکه من فرض میکنم که شما به shell ویندوز دست پیدا کردید، حالا چطوری باهاش کار کنید و سطح اختیارات خود رو بالاتر ببرید.
شاید از من بپرسید که من هنوز راجع به اینکه چطوری به shell دست پیدا کنیم، مقالهای ارائه نکردم، پس این درس به چه دردی میخوره؟ جواب اینه که این درس پیشنیاز درسهای بعدی خواهد بود. اگر شما سیستمعامل ویندوز ۲۰۰۰ یا xp دارید، اکثر مطالب این مقاله رو میتونید روی کامپیوتر خودتون تست کنید. اگه میخواین shell ویندوز رو در کامپیوتر خودتون بیارید، دکمه Start رو کلیک کرده گزینه Run را فشار دهید و اونجا بنویسید: cmd که مخفف command prompt است.
نکته بعدی اینکه فرض کنید که شما به یک کامپیوتر و shell اون دسترسی پیدا کردید ولی میخواهید که بدونید که در شبکهای که این کامپیوتر قرار داره چه کامپیوترهای دیگهای هست و وظایف اونا چیه و یا چطوری میشه از طریق این کامپیوتر به اونا دسترسی پیدا کرد. این موضوع مربوط به مقالهای به نام (هک کردن شبکهای از ویندوز سرورها) است که اگه عمری باشه، بعدها توضیح میدم.
پس این مقاله به شما میگه که وقتی به shell ویندوز در یک کامپیوتر رسیدید، چه کارهای دیگهای در همون کامپیوتر میتونید انجام بدید!
این سری درسها رو از سطح مبتدی تا پیشرفته براتون میگم. بنابراین ممکنه بعضی درسها بهدردتون نخوره...
مطلب آخر اینه که من متخصص ویندوز سرور نیستم! پس اگه ایرادی در این مقاله میبینید، حتما برام پیغام بذارید :)
- تقسیمبندی انواع سیستمعاملهای ویندوز
همانطور که میدونید ویندوز انواع مختلفی داره که میشه همه رو تو دو گروه تقسیمبندی کرد:
۱- ویندوزهای desktop یا ویندوزهای dos family که عبارتند از: ویندوزهای قدیمی ( تا سری 3.1 )، ویندوز ۹۵، ویندوز ۹۸ و ویندوز Me
۲- ویندوزهای nt یا ویندوزهای server که عبارتند از: ویندوزهای nt ورژن 3.0 و 4.0 ، ویندوز 2000 ( ویندوز nt ورژن 5.0 )، ویندوز XP و ویندوز NET Server 2003.
بحث ما راجع به سری دوم ویندوزهاست.
- دستورات کار با فایلها و فولدرها
این دستورات همونهایی هستند که در سیستمعامل باستانی!! مایکروسافت یعنی MS DOS استفاده میشدند. کاربران ویندوز معمولا نیازی به یادگیری اونا احساس نمیکنند چون همه کارها رو در محیط گرافیکی و معمولا از طریق ماوس انجام میدهند. ولی چون shell حالت متنی دارد، شما باید با این دستورات آشنا بشوید. shell رو باز کنید. متن زیر ظاهر میشه:
Microsoft Windows 2000 [Version 5.00.2195] (C) Copyright 1985-1999 Microsoft Corp. I:>
دقت کنید که سیستمعاملی که من shell رو در اون آوردم، ویندوز ۲۰۰۰ است و درایو پیشفرض من که معمولا همان درایوی است که ویندوز در اون نصب شده، درایو I است. شما مسلما چیز متفاوتی خواهید دید. مینویسم:
I:> C:
تا به درایو C وارد بشم. حالا prompt تغییر میکنه و نشون میده که الان در درایو C هستم:
C:>
مینویسم:
C:> dir
و لیست زیر ظاهر میشه:
Volume in drive C is FREE-START Volume Serial Number is 3623-07E6 Directory of C: 09/06/2003 06:29a <DIR> GAMES 08/15/2003 06:20p 1,806,727 phpMyAdmin-2.5.3-rc1-php.zip 06/17/2002 07:06p <DIR> upload 06/19/2002 07:02p <DIR> mailserver 09/13/2002 03:59a 8,053 port-tcp-c.c 02/27/2003 10:28p <DIR> mp3 04/18/2003 07:38a 1,152 araz.pl 3 File(s) 1,815,932 bytes 4 Dir(s) 95,502,336 bytes free
اینها در واقع لیست فایلها و دایرکتوریهای موجود در درایو C کامپیوتر من است. مثلا اینجا GAMES یک فولدر ( دایرکتوری) است چون در در اون سطر کلمه <DIR> اومده که معنی دایرکتوری میده. ولی araz.pl که آخرین سطر از لیسته، فایله. حالا مینویسم:
C:> cd games
و جواب میشنوم:
C:GAMES>
یعنی وارد فولدری بع اسم games شدهام. بازم دستور dir رو مینویسم که ببینم در این فولدر چه فایل یا فولدرهایی هست و جواب میشنوم:
Volume in drive C is FREE-START Volume Serial Number is 3623-07E6 Directory of C:GAMES 09/06/2003 06:29a <DIR> . 09/06/2003 06:29a <DIR> .. 09/06/2003 06:29a <DIR> FORMULA1 09/06/2003 06:35a <DIR> SP 09/06/2003 06:36a <DIR> SUPER 09/06/2003 06:39a <DIR> UF 0 File(s) 0 bytes 6 Dir(s) 95,502,336 bytes free
که میگه ۶ دایرکتوری وجود داره. دوتای اولی دایرکتوریهای واقعی نیستند، چون اگه بنویسم:
C:GAMES> cd .
جواب میگیرم:
C:GAMES>
یعنی هیچ اتفاقی نیفتاد. و اگه بنویسم:
C:GAMES> cd ..
جواب میشنوم:
C:>
یعنی یه فولدر به عقب برگشتم و اومدم به همون ریشه درایو C که قبلا بودم. پس الان در درایو C هستم و چون قبلا دیدهام که فایلی به اسم araz.pl در اون هست میخوام محتویات این فایل متنی رو ببینم. مینویسم:
C:> type araz.pl
و جواب میشنوم:
#!/usr/bin/perl print "Content-type: text/htmlnn"; use Socket; my ($remote, $port, @thataddr, $that, $them, $proto, $getpage ); $remote = shift || 'www.securitytracker.com'; $port = 80; @thataddr=gethostbyname($remote) or die "Not Connected"; $that=pack('Sna4x8',AF_INET, $port, $thataddr[4]); $proto=getprotobyname('tcp'); socket(SOCK, PF_INET, SOCK_STREAM, $proto) or die $!; connect(SOCK, $that) or die $!; ........
این محتویات فایل araz.pl است. میخوام یک متنی فایل جدید بسازم، که محتویاتش فقط یک سطر باشه مثلا salam bar to و نامش هم باشه ali1000.txt برای اینکار چند راه وجود داره که دو تاشو میگم:
۱- میتونید بنویسید:
C:> echo salam bar to > ali1000.txt
۲- و میتونید بنویسید:
C:> copy con ali1000.txt
و enter زده و جمله!! salam bar to را اونجا تایپ کنید و وقتی تمام شد، ترکیب: CTRL + Z رو فشار بدید که فایل تموم بشه.
در هر دو حالت چون ما در درایو C و در ریشه ( یعنی نه در یک فولدر خاص ) بودیم، فایل همینجا درست میشه و اگه دستور dir رو اجرا کنید،میبینید که یک فایل جدید به لیست اضافه شده. حالا میتونید با دستور:
C:> type ali1000.txt
محتویات فایل رو ببینید، اگرچه الانشهم میدونید چی هست! میخواهیم یک فولدر جدید به اسم tur2 بسازیم. مینویسیم:
C:> md tur2
حالا اگر dir رو بنویسم، میبینم که فولدر جدید ایجاد شده. حالا میخوام برم تو فولدری که ساختم. مینویسم:
C:> cd tur2
و بعد dir میگیرم. میبینم فعلا فقط همان دو فولدر . و .. در اینجا وجود داره که قبلا گفتم چی هستند. اگه بخوام یه فولدر جدید در داخل این فولدر tur2 به اسم far30 بسازم، مینویسم:
C:tur2> md far30
و اگر dir بگیرم، میبینم اینها وجود دارند:
Volume in drive C is FREE-START Volume Serial Number is 3623-07E6 Directory of C:tur2 10/04/2003 07:17p <DIR> . 10/04/2003 07:17p <DIR> .. 10/04/2003 07:18p <DIR> far30 0 File(s) 0 bytes 3 Dir(s) 95,477,760 bytes free
یعنی فولدر far30 هم اضافه شده. میخوام فایل ali1000.txt رو از ریشه به فولدر far30 که خودش در فولدر tur2 است، کپی کنم. مینویسم:
C:tur2> copy c:ali1000.txt c:tur2far30
ساختارش خیلی ساده است، حتما فهمیدین که اول دستور copy رو مینویسم. بعد با یک فاصله، مسیر و نام فایلی که میخوام کپی کنم رو مینویسم و در آخر با یک فاصله، مسیری که میخوام فایل کپی بشه رو مینویسم. دقت کنید که فایل اصلی دست نخورده باقی میمونه و یک کپی جدید در مسیر جدید ایجاد میشه. میتونستم همین فایل رو به درایو D کپی کنیم که در این حالت باید بنویسم:
C:tur2> copy c:ali1000.txt d:
که فایل به درایو D کپی بشه. حالا یه دستور جدید، میخوام فایل ali1000.txt رو از درایو C پاک کنم، مینویسم:
C:tur2> del c:ali1000.txt
دقت کنید که چون من الان در فولدر tur2 هستم ولی فایلی که قراره پاک کنم در ریشه است، مسیر رو باید بنویسم، ولی اگر فایل همونجایی که من الان هستم بود، مینوشتم:
C:> del ali1000.txt
نکته مهم اینه که وقتی روی کامپیوتر خودم shell رو باز کردم، میتونم ببینم که کجا قرار دارم ( با نگاه به پرامت که مثلا اینجا <c:tur2 بود) ولی در shell ی که موقع هک کردن به اون میرسیم، معمولا این پرامت ظاهر نمیشه. اونجا چطوری میشه فهمید کجا هستم؟ خیلی سادهاست با دستور زیر:
cd
که جواب میده:
c:tur2
چون قبلا فایل ali1000.txt رو به فولدر far30 موجود در فولدر tur2 موجود در درایو C کپی کردم، میرم همونجا مینویسم:
C:> cd c:tur2far30
اگه dir بگیرم، اینو میبینم:
Volume in drive C is FREE-START Volume Serial Number is 3623-07E6 Directory of C:tur2far30 10/04/2003 07:18p <DIR> . 10/04/2003 07:18p <DIR> .. 10/04/2003 07:08p 15 ali1000.txt 1 File(s) 15 bytes 2 Dir(s) 95,477,760 bytes free
اگه بخوام این فایل رو منتقل کنم به فولدر tur2 از درایو C (یعنی به یه فولدر پایین تر) از دستور زیر استفاده میکنم:
C:tur2far30> move ali1000.txt c:tur2
فرق دستور move با copy اینه که فایل اصلی منتقل میشه نه کپی! یعنی از محل قبلی پاک میشه و به محل جدید میاد!! حالا که فولدر far30 حالی شده (یعنی هیچ فایل یا فولدری در اون نیست) میتونم پاکش کنم. اول میام یه فولدر پایینتر، با دستور:
C:tur2far30> cd ..
و با دستور جدید زیر که مخصوص پاک کردن فولدر ( نه فایل ) است، فولدر far30 رو پاک میکنم:
C:tur2> rd far30
و فولدر پاک میشه. حالا میخوام اسم فایل ali1000.txt رو به araz.inc تغییر بدم، مینویسم:
C:tur2> ren ali1000.txt araz.inc
یه dir بیرید که مطمئن بشین!! حالا میخوام یه کپی از این فایل که اسمش هست araz.inc بگیرم ولی با اسم ali1000.inc و در همین فولدر. پس مینویسم:
C:tur2> copy araz.inc ali1000.inc
حالا اگه dir بگیرید، ۲ تا فایل میبینید. حالا میخوام هر دو تا فایل رو منتقل کنم به درایو C ولی به ریشه، میبینم که هر دو فایل حرف اولشون a است و پسوندشون inc میتونم به دو شکل بنویسم:
C:tur2> move a*.inc c:
ولی چون فقط همین دوتا فایل در این فولدر بود، میتونستم بنویسم:
C:tur2> move *.* c:
گرفتین چی شد؟ حالا یه جدید میخوام برم به فولدر و درایوی که فولدر ویندوز باشه. میتونم یکی یکی درایو ها رو برم و از همه dir بگیرم تا برسم به اونی که درایو winnt داره، ولی چون این کامپیوتر خودمه و میدونم که فولدر ویندوز من کجاست!! مینویسم:
C:tur2> I:
و بعد
I:> cd winnt
و یک dir میگیرم. میبینم که لسیتی از فایلها و فولدرهای زیادی از جلو چشم رد میشه ولی نمیتونم همه رو ببینم. اگه بخوام صفحه به صفحه ببینم، مینویسم:
I:winnt> dir /p
که این سویچ p مخفف page است. اگه بخواین لیست همه سویچها رو ببینید، میتونید بنویسید:
I:winnt> dir /?
حالا یه چیز جالب! با دستورات زیر اول برگردیم به ریشه درایو I و بعد برگردیم درایو C :
I:winnt> cd .. I:> C:
حالا میخوام مستقیما از درایو C محتویات فولدر winnt از درایو I رو اونهم به صورت صفحه به صفحه بخونم:
C:> dir i:winnt /p
حالا یه چیز بسیار مهم، میخوام بدون دادن مسیر! لیست فایلها رو در فولدر مربوط به ویندوز ببینم:
C:> dir %SystemRoot%
اینه... !!! پس در Shell کلمه %SystemRoot% یعنی فولدر ویندوز. یه سویچ جدید برای دستور dir رو میخوام بگم. فرض کنید که من یادم رفته فایل اجرایی cmd.exe در کدام فولدر از درایو I ( که در کامپیوتر من فولدر مربوط به ویندوز هست ) قرار داره. چون نمیتونم برم تک تک فولدرها رو ببینم، باید از سویچی استفاده کنم که وقتی یه مسیر بهش میدم، بره و تمام سوراخ سنبههای اون فولدر ( یعنی همام فولدرهای داخلیتر ) رو هم ببینیه. از سویچ s استفاده میکنم و مینویسم:
C:> dir i:cmd.exe /s
و جواب میشنوم:
Volume in drive I has no label. Volume Serial Number is DC24-A09D Directory of i:WINNTsystem32 12/07/1999 04:00a 236,304 cmd.exe 1 File(s) 236,304 bytes Directory of i:WINNTsystem32dllcache 12/07/1999 04:00a 236,304 cmd.exe 1 File(s) 236,304 bytes Total Files Listed: 2 File(s) 472,608 bytes 0 Dir(s) 1,255,153,664 bytes free
پس این دستور توانست فایل مربوطه رو در دو تا فولدر پیدا کنه، یعنی اینا:
i:WINNTsystem32 i:WINNTsystem32dllcache
این cmd.exe همونه که ما در run نوشتیم که shell ویندوز اومد. حالا برمیگردم به درایو C ( دستورش که یادتون هست! ) و dir میگیرم و میبینم که فایل ali1000.inc هنوز هم اونجا هست. میخوام یه دستور جدید رو بگم. ببینید گاهی پیش میاد که ما فایلی رو به یک سرور میفرستیم ولی میخوایم به صورت مخفی یا hidden باشه. دستوری که فایل ali1000.inc رو مخفی میکنه، اینه:
C:> attrib +h ali1000.inc
حالا اگه dir بگیرم، دیگه فایل ali1000.inc رو نمیبینم. البته هنوز هم هست!! اگه بخوام به کمک دستور dir فایلهای مخفی رو ( از جمله ali1000.inc ) ببینم، از سویچ a استفاده میکنیم:
C:> dir ali1000.inc /a
حالا میخوام فایل رو از حالت مخفی در بیارم، مینویسم:
C:> attrib -h ali1000.inc
به همین راحتی!
اینا دستورات معمولی dos بود که براتون نوشتم. این دستورات خیلی زیاد هستند و من فقط تعداد کمیشو براتون گفتم. اگه کتاب داس تو انباری خونتون پیدا کردین، میتونین دستورات بیشتری یاد بگیرید!!!
- پسوند فایلها و مفاهیم آنها در ویندوز
در سیستمعامل ویندوز پسوندها مفاهیم خاصی دارند.
۱- فایلهای اجرایی پسوند exe یا com یا bat دارند. ( فایلهای با پسوند bat رو batch file میگن که مجموعهای از دستورات داس رو میتوننی توش بنویسین که به ترتیب اجرا بشوند پس میتونین به کمک دستور type محتویاتشو ببینید). ولی فایلهای exe و com فایلهای اجرایی هستند که محتویاتش براتون قابل خوندن نیست ولی قابل اجراست. حالا میخوام یه فایل اجرایی رو براتون بیارم که ببینید که در shell چطوری میتونید فایل اجرایی رو اجرا کنید! میخوام فایل tftp.exe رو اجرا کنم. اول یه dir میگیرم از فولدر %SyestemRoot% و میبینم که این فایل در فولدر i:winntsystem32 قرار داره. حالا میخوام اجراش کنم. به دو طریق میتونم این کارو انجام بدم، اولی اینکه برم تو فولدر winntsystem32 و بعد بنویسم:
I:WINNTsystem32> tftp.exe
یا اینکه مستقیما از هرجایی که باشم، بنویسم:
C:> i:winntsystem32tftp.exe
و جواب بشنوم:
Transfers files to and from a remote computer running the TFTP service. TFTP [-i] host [GET | PUT] source [destination] -i Specifies binary image transfer mode (also called octet). In binary image mode the file is moved literally, byte by byte. Use this mode when transferring binary files. host Specifies the local or remote host. GET Transfers the file destination on the remote host to the file source on the local host. PUT Transfers the file source on the local host to the file destination on the remote host. source Specifies the file to transfer. destination Specifies where to transfer the file.
پس چون پسوند فایل من exe بود فهمیدم که با نوشتن اسم اون میتونم اجراش کنم. اگه یادتون باشه واسه ابزارهای خطفرمانی مثل nc هم، همین کارو میکردیم.
۲- فایلهای استاندارد:
فایلهای اجرایی در ویندوز با سایر سیستمعاملها از نظر پسوند فرق میکنه. مثلا در سیستمهای مبتنی بر یونیکس ممکنه اصلا فایل اجرایی پسوندی نداشته باشه! ولی یه سری فایلها هستند که یهجورایی استاندارد شدهاند. مثلا فایلهای تصویری ( که پسوندهای gif، jpg و... دارند)، فایلهای html ( که پسوندهای html یا htm دارند )، فایلهای asp ، php، و ... پس آشنایی با این فایلها و فرمت اونا میتونه خیلی کمک کنه. فرض کنید که شما یه سایت وب رو هک کردید ولی نمیتونید یه فایل html طراحی کنید که بجای صفحه اول سایت قرار بدید، نتیجه این میشه که نمیتونید پز بدید!!!
۳- فایلهای نرمافزارهای کاربردی:
نرمافزارهای کاربردی هرکدوم خروجیهاشونو با یه پسوند خاص ارائه میکنند. مثلا فایلهای فتوشاپ پسوند psd دارند. فایلهای MS Word پسوند doc دارند و...
- انواع سیستمهای فایل در ویندوز
منظور من از سیستمهای فایل در واقع روش پارتیشنبندی و فرمتکردن درایوهایی است که در ویندوزها استفاده میشه. مایکروسافت از زمانی که داس رو ارائه داد تا حالا از روشهای مختلف برای سیستمهای فایل استفاده کرده است.
۱- FAT16 : در سیستمعامل داس استفاده میشد.
۲- FAT32 : از ویندوز ۹۵ تا me استفاده میشد.
۳- NTFS 4.0 : در سیستمهای nt 4.0 استفاده میشد.
۴- NTFS های جدید : از ویندوز ۲۰۰۰ به بعد استفاده میشود. هرجا گفتم NTFS منظور این NTFS هاست. مثلا NTFS ویندوز ۲۰۰۰ ورژن 5.0 هستش.
نکته تابلو: سیستمعاملهای جدیدتر میتونن از روشهای پارتیشنبندی مربوط به سیستمعاملهای قدیمیتر سر دربیاورند ولی برای اجرای بهتر نیاز به پارتیشنبندی مخصوص خود دارند. مثلا برای اینکه ویندوز ۲۰۰۰ سرور بتونه از امکاناتی که داره ( که بعدا میگم چیها داره! ) استفاده کنه خداقل یک درایو باید به روش NTFS فرمت بشه.