- این سری درسها (ضروریات ویندوز سرور) به چه دردی
میخورند؟
تجربه بهم ثابت کرده که خیلی از افرادی که ویندوز سرور هک
میکنند، بعد از اینکه به 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/html\n\n"; 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:\> 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:\tur2\far30ساختارش خیلی ساده است، حتما فهمیدین که اول دستور 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:\tur2\far30اگه dir بگیرم، اینو میبینم:
Volume in drive C is FREE-START Volume Serial Number is 3623-07E6 Directory of C:\tur2\far30 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:\tur2\far30> move ali1000.txt c:\tur2فرق دستور move با copy اینه که فایل اصلی منتقل میشه نه کپی! یعنی از محل قبلی پاک میشه و به محل جدید میاد!! حالا که فولدر far30 حالی شده (یعنی هیچ فایل یا فولدری در اون نیست) میتونم پاکش کنم. اول میام یه فولدر پایینتر، با دستور:
C:\tur2\far30> 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:\WINNT\system32 12/07/1999 04:00a 236,304 cmd.exe 1 File(s) 236,304 bytes Directory of i:\WINNT\system32\dllcache 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:\WINNT\system32 i:\WINNT\system32\dllcacheاین 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به همین راحتی!
I:\WINNT\system32> tftp.exeیا اینکه مستقیما از هرجایی که باشم، بنویسم:
C:\> i:\winnt\system32\tftp.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 هم، همین کارو میکردیم.