פונקציית hash היא מונח כללי עבור סוג של פונקציות. הפלט הוא נתונים בינאריים באורך קבוע, לסוג זה של פונקציה יש את המאפיינים הבאים:
: מחושב מקלט מהתנגשות היא פשוטה ומהיר, אבל מציא את אותה קלט מהפלט הוא נקודות פלט שונות
תפקידים מרכזיים של פונקציית hash הוא לאחסן את הסיסמה בבטחה. במקום לשמור את הסיסמה ישירות (כלומר, סיסמה בטקסט ברור), אלא לשמור את ערך ה-hash של הסיסמה בעת אימות, אתה צריך לחשב שוב את הערך ה-hash של הסיסמה שהושמר. על ידי השוואה לערך ה-hash של הסיסמה שנשמרת, תוכל לדעת אם הסיסמה נכונה. בשל האופי החד-כיווני של פונקציית hash ומאפיינים של אילוצים התנגשות, תוקף קשה לדעת את הסיסמה עצמה גם אם הוא מקבל את ערך hash של הסיסמה.
תוקף קיבל את ערך האש של הסיסמה האם באמת אין דרך לדעת את הסיסמה עצמה? כמובן שלא. למרות שזה לא ריאלי לחשב את הסיסמה ישירות על פי ערך ה-hash של הסיסמה מבחינה מתמטית, אנחנו יודעים שפונקציית ה-hash מחושבת מקלט פשוטה ומהירה. במקרה הגרוע ביותר, אתה יכול לנסות את הסיסמאות שבני אדם עשויים להגדיר הם רק אותם, נבדק בזה אחר זה. אם אתה מזל, עדיין יכול לנסות אותם. הפעולה של ניסיון מתמיד לקבל את הקלט המתאים לערך האש נקרא פיצוץ.
בהתבסס על הרעיון הזה, הופיע hashcat. אומרים כי hashcat נולד כדי להוכיח כי פיצוץ hash הוא עניין פשוט מאוד. hashcat טוען שהוא כלי הפיצוץ hash המהיר ביותר בעולם, והוא אפילו תומך ב-GPU ו-FGPA, אם יש לך.
hashcat לא רק מהיר, אלא גם תומך באופן מקצועי יותר מ-200 פונקציות hashcat פקודת השימוש:
hashcat - help
אתה יכול לראות את רשימה של כל פונקציות hashcat הנתמכות על ידי hashcat אם יש יותר מדי, אני לא אפרסם אותם כאן. hashcat מותקן ברירת מחדל ב-
Kali וניתן להשתמש בו ישירות. אבל Kali שלי מותקן ב- VirtualBox, תמיד מרגיש כי הזדמנויות וירטואליות איטיות יותר, אז אני רוצה להשתמש ב- hashcat במארח פיזי. הולך תחילה לאתר הרשמי של hashchat כדי להוריד את hashchat עד כה, הגרסה האחרונה היא v3.5.0, שפורסמה ב-2017.04.05. ממועד העדכון, ניתן לראות כי hashchat מלא חיוניות. כדי להימנע מהצרות של הידור, הורדה ישירות את החבילה הבינארית, רק 2.7M, וזה קטן מאוד בהשוואה למשחקים שעלולים לעתים קרובות עשרות ג'.
לאחר השלמת ההורדה, דחיק את hashcat ותראה:
hashcat32.bin
hashcat32.exe
hashcat64.bin
hashcat64.exe
hashcat64.exe> <55x56>hashcat64.exe> בחרתי hashcat64.bin למען היופי, הוסיף שורה לקובץ ~/.bashrc:alias hashcat='hashcat64.bin '
לאחר ששמור, פתח מחדש את הטרמינל הווירטואלי כדי להפוך את קובץ ~/.bashrc לתוקף, לא משנה איפה, הזן את הפקודה hashcat ישירות.
בסדר, עכשיו אתה יכול להתחיל להשתמש ב-hashcat כדי לפצץ hash שונים.
md5 צריך להיות אחת הפונקציות hash המפורסמות ביותר והנפוצות ביותר. תחילה השתמש ב-Python כדי ליצור כמה ערכים md5 לפיצוץ, הקוד הוא כדלקמן:
יבוא hashlib passwords = ['>123123', ' bond007', ' xxxxx ', ' *H @&(NT*@BR#^'] for password in passwords: md5 = hashlib.md5() md5.update (password) הדפס md5.hexdigest ()
בהתאמה, התוצאות התפוקה הן:
4297f44b13955235245b2497399d793 CBDB7E2B1ED56CEB796AF2DF07205A3 DAD3A37A9D50688B5157698ACFD7AEE d77db958c179bbffae04b2b908b75c26
שמור את תוצאות הפלט בקובץ md5.hash, עם ערך hahs אחת בשורה. לאחר מכן השתמש ב- hashcat כדי לפצץ את ערכי hash האלה, הפקודה היא כדלקמן:
hashcat -w 3 -A 0 -m 0 --remove -o md5.out md5.hash wordlist.dic
} פרמטרים-w משמשים למצב עבודה מצוין, ישנם ארבעה סוגים, כפי שמוצג בטבלה להלן:
| N | Performance | Runtime | Power Consumption | Desktop Impact |
|---|---|---|---|---|
| 1 | Low | 2 ms | Low | מינים | ; Borit = -
| } 2 | Default | כלכלה | { | } Noticeable | 96 ms | High | Unresponsive |
| 4 | Nightmare | 480 ms | Insane | Headless |
הפרמטר-A משמש לציין מצב ההתקפה המשמעות של 0 היא ישירה ורציפה, כלומר, פיצוץ עם מילון סיסמה. ישנם חמישה ערכים של -A, כפי שמוצג בטבלה להלן:
| N | מצב | 0 | Street | Combination | {1000P}
|---|---|
| 3 | Brute-force |
| 6 | Hybrid Wordlist + Mask |
| 7 | Hybrid Mask + Wordlist |
{100017} } } {
} {100018} {100018} {100018} {100018} } } {100018} {100018} } } } } פונקציית hash של הערך, 0 מצביע על כך שפונקציית hash היא md5, הערכים האחרים מוצגים בטבלה הבאה:
| N | שם | Cattage; Fontage; Fontage | - Fontage (0.Fontage: :|
|---|---|---|---|
| 0 | MD5 | <1.5> Raw Hash = "קופס 2x18> " "קופס 2x18> "קופס; "קופס; "קופס 2x18"; 2x18"; "; ; "; 2x18"; 2x19"; ; ; "; | |
| MySQL4.1/MySQL5 | שרת Database | ||
| 1000 | NTLM | ||
| 1800 | sha512crypt border-right: 0px; בודר-בוטום: 0px; border-left: 0px; צבע העליון: rgb (235, 235); פונה-משפחה: אנריט; פונט-סגנון: אנריט; מרגין: 0px; outline: 0px; padding: 0.75 RAM; vertical-align: top; קו גבוה: 1.5;">2611 | vBulletin<v3.8.5 | Forums, CMS, E-Commerce, מסגרות |
טבלה זו ארוכה מדי אני מראה רק כמה פונקציות hash הכרובות במאמר זה, אתה יכול לראות את כל בפרמטר -help כדי להצביע על כולם.
המשמעות של פרמטר 5. שני הפרמטרים האחרונים של
md5.hash ו-wordlist.dic הם ערך ה-hash ומילון הסיסמה שיהיה להתפוצץ בהתאמה. שניהם ערך ה-hash ומילון הסיסמה הם שורה אחת. התוכן ב-md5.hash מחושב על ידי Python אם אין לך מילון סיסמה מתאים ביד, תוכל להשתמש בפקודה:
wget -O wordlist.dic https://samsclass.info/123/proj10/500_passwords.txt
下载一个。现在完事具备,按下回车,结果华丽地报错:(
clGetPlatformIDs(): CL_PLATFORM_NOT_FOUND_KHR
התקין את הדברים האלה בסך הכל: אם מהירות הרשת טובה, הפקודה הראשונה תדווח על שגיאה: אבל זה נראה שזה לא משפיע על משהו, אז הוא התעלם מזה. לאחר התקנת אלה, לחץ שוב על RECUE ופעלתי את הפקודה המקורית לדיווח על השגיאה, ומצאתי שלא דווחו שוב על השגיאה, והושלמה בהרף. לאחר ביצוע הפקודה, בדקתי את התוכן של הקבצים md5.hash ו-md5.out ומצאתי שיש רק hash אחד שנותרו ב-md5.hash שלושת הhash שהתפוצצו בהצלחה הועברו לקובץ md5.out שלושה ערכי hash וערכים המקוריים שלהם, כפי שמוצג באיור להלן: sudo apt get install gcc make p7zip-full git lsb-core
wget http://registrationcenter-download.intel.com/akdlm/irc_nas/9019/opencl_runtime_16.1.1_x64_ubuntu_6.4.0.25.tgz
tar -xvf opencl_runtime_16.1.1_x64_ubuntu_6.4.0.25.tgz
cd opencl_runtime_16.1.1_x64_ubuntu_6.4.0.25
sudo ./install.sh
/sbin/ldconfig.real: /usr/lib/nvidia-375/libEGL.so.1<58x61>mbis 6x59>not2>
/sbin/ldconfig.real: /usr/lib32/nvidia-375/libEGL.so.1 הוא לא A symbolic link
2. סיסמת הכניסה של Windows Management hash>
בדרך כלל, הוא ממוקם ב
C:\Windows\system32\config\SAM
קובץ SAM מוגנים על ידי Windows ולא ניתן לקרוא אותם ישירות ודורשים להשתמש בכלים כגון SAMInside. מצא מכונת וירטואלית של Windows 1<
5>
5>
0> לאחר שניתן לשבור את הסיסמה, אבל זה לא משנה, לבחור בסבלנות להשקיע את הקוד
5>
5>
0>
hashcat -w 3 -A 0 -m 1000 --remove -o win7.out: win7.out>win7.out: win7.hash wordlist.dic
לאחר ביצוע, בדוק את הקובץ win7.out ומצא כי הפיצוץ בהצלחה 16x7.16 356CEE0C89FB65ED6D6aa7A445C4CE5:rush2112
כיצד לקבל קובץ SAM אנא עיין ב"כיצד לייצא Windows Hash Series 1". להלן מתעד את תהליך הקריאה שלי של קבצי סאם במכונה וירטואלית Windows 7.
אם מדובר במכונה פיזית, פשוט השתמש ב-Win PE כדי להפעיל את המכונה וקרא את קובץ SAM בדיסק. אני מכונה וירטואלית, אתה יכול לקרוא את הקבצים בדיסק הווירטואלי על ידי התקנת קובצי דיסק וירטואלי למערכת הקבצים. המכונה הווירטואלית שאני משתמש היא VirtualBox, אשר יכול לעשות זאת באמצעות הפקודה vdfuse. אם אין vdfuse, עליך להתקין תחילה את virtualbox-fuse:
sudo apt-get install virtualbox-fuse
תוכל גם להוריד את חבילת ההתקנה של virtualbox-fuse ולהתקין את עצמך.
לאחר ההתקנה, יש את הפקודה vdfuse, שיכולה להתחיל מיפוי דיסק וירטואלי ולהתקנה:
mkdir -p ~/vmdisk sudo vdfuse -t vmdk -f Win7Pro32.vmdk ~/vmdisk/
לאחר ביצוע הצעד הזה, בדוק את ספריית ~/vmdisk, ישנם שלושה קבצים: EntireDisk, Partition1/Partition1 ו-Partition2, ספרייה חדר 59: 58~disk mkdir -p ~/vmdisk_1 mkdir -p ~/vmdisk_2
השתמש בפקודה mount כדי לתקן את שלושת הקבצים של EntireDisk, Partition1 ו-Partition2 בהתאמה:
sudo mount ~/vmdisk/EntireDisk/m777x77> sudo mount ~/vmdisk / Partition1 ~/vmdisk_1 sudo mount ~/vmdisk/Partition2 ~/vmdisk_2
מצא כי EntireDisk נכשל. התוכן של Partition1 הוא לא מה שרציתי, Partition2 הוא קובץ במכונת וירטואלית של Windows 7, שזה בדיוק מה שרציתי. העתיק את קובץ SAM היעד שלנו מ-vmdisk_fs:
cp ~/vmdisk_2/Windows/System32/config/SAM ./
אגב, העתיק גם את קובץ המערכת:
/Systems / x x x101x x x106x10xxxxxxx9xx143 justforfund: $ 6 $ 0fokwg59 $ 6hpMS5dM9wDT/42DDoSD0i0g/whab50xs9ievlc3v20yf1krmxzhgxcm0efv6xu69hdgmz4fwamzso4hqagq0:17373:0:999:7:7:::x103x106x1010>/ בדוק את התוכן של קובץ ה-SAM, כפי שמוצג בתמונה למטה, זה לא קובץ טקסט פשוט זה אכן בסגנון של Windows,
בסדר, למרות שקובץ ה-SAM נפתח בהצלחה, אבל עדיין לא קיבלנו hash מה עלינו לעשות הבא? אתה יכול רק להשתמש בכלים כדי לנתח את התוכן של קובץ SAM. קבל את קובצי SAM והן את קובצי מערכת ל-Kali, הפעל את הפקודה:
samdump2 -o sam.hash SYSTEM SAMואז צפו ב-sam.hash, ותוכלו גם לראות את ערך ה-hash של סיסמת ההתכנס של כל משתמש. כל שורה בקובץ sam.hash היא משתמש, והפורמט של כל שורה הוא:
שם משתמש: RID:LM-hash ערך: NTLM-hash ערךשים לב שהפורמט זה הוא פורמט פלט הפקודה samdump2, לא "פורמט סיסמת hash תחת Windows".
3. פיצוץ סיסמת כניסה לינוקס hash
קודם כל, עליך להיות מחשב המפעיל את מערכת לינוקס. זה קל לומר, מכונה וירטואלית מספיק. לאחר מכן, הפעל את הפקודה הבאה להוסיף משתמש חדש והגדיר סיסמה למטרות פיצוץ שלנו:
sudo adduser -justforfun
linux ערך הכניסה של משתמש מאוחסן בקובץ/פקודה/ צפה: 15x
מתייחס לסוג הפונקציה hash המשמשת הוא SHA-512, למעט "$ 6$", ב-linux, "$ 1$" מתייחס ל-MD5, "$ 2a$" מתייחס ל-Blowfish, "$ 2y$" מתייחס ל-Blowfish (correct handling of 8-bit chars), "$ 5$" מתייחס SHA-256, ראה ויקיפדיה: passwd לפרטים. בנוסף, הקובץ / etc/login.defs מתואר גם את האלגוריתם hash. החלק "0fokwg59" לפני
"$6$" עד "$" הבא הוא מלח. מה זה מלח? Baidu יודע שהתשובה של CNB2009 לשאלה "מה זה ערך מלח md5" היא פשוטה וקלה להבנה:
היא אמצעי להפוך לאותה סיסמה להיות ערכי hash שונים, זה מלוח. MD5 עצמו אינו הפיך, אבל כיום יש מסדי נתונים רבים באינטרנט התומכים בשאילתה אנטי. אם מסד הנתונים של סיסמת המשתמש דלפף בטעות, האקרים יכולים לקבל את סיסמת המשתמש באמצעות שאילתה אנטי, או לפצח באלימות על קוד hash (כלומר, המשמש על ידי אנשים רבים) המופיעים בתדירות גבוהה יותר במסד הנתונים (כי הוא בדרך כלל סיסמה חלשה). ערך המלח הוא ערך אקראי נוסף שנוסף במהלך תהליך hash של הסיסמה. לדוגמה, הזהות שלי הוא אפילפסיה ω ④ והסיסמה היא 123456. כאשר היא מאוחרת במסד הנתונים, ניתן להש את המחרוזת "123456/אפילפסיה ω ④", ובעת אימות הסיסמה, משמש גם את המחרוזת "(הסיסמה שיש לאמת)/אפילפסיה ω ④". כאשר סיסמה טיפשת נוספת היא 123456, אתה עדיין יכול לבנות ערכים שונים של hash וניתן לאמת אותה בהצלחה. בשלב זה, הזהות שלי משמש כערך מלח כדי לסיסמה מורכב. אז.. תפקידו של ערך מלח הוא להפחית את הפסדים הנגרמים על ידי דליפת מסד נתונים. אם RP שלך טוב מאוד, ניחש שהסיסמה שלי היא 123456, אני לא יכול לעצור אותך
התשובה היא עבור md5, ופונקציות hash אחרות זהות. החלק לאחר המלח הוא ערך האש. כעת העתיק את כל החלק השני לקובץ linux.hash, התוכן של linux.hash צריך להיות:
$ 6 $ 0xxxg59x <23hms5dm9wdt / 42DDoSD0i0g/whab50xs9ievlc3v20yf1krmxzhgx0efv6xu6xu69hdgmz4fz4wamzso4hqagq0 ואז השתמש בפקודה הבא לאחר זמן קצת, הפיצוץ הושלם, צפו את התוצאות:werner@Yasser:~/hashcat$ cat linux.out $ 6 $ 0fokwg59$ 6hpMS5dM9wDT/42DDoSD0i0g/whab50xs9ievvlc3V20YF1krmxzhgcm0efv6xu69HDGMZ4fwamzso4hqagq0:4321.
4. פיצוץ סיסמת הכניסה Mysql hash
ראשית, חייב להיות Mysql. זה רק במכונה הווירטואלית שלי. Baidu יודע שערך hash של סיסמת הכניסה של Mysql נשמר בקובץ user.MYD. איפה הקובץ user.MYD? גם אני לא יודע, פשוט מחפש אותו:
test@test-VirtualBox:~$ sudo find / -שם user.MYD <52ql 52> /var/lib/mysql/mysql/user.MYD. אם הקובץ זה לא ייכנס על /var/lib/mysql/mysql/user.MYD<6x58> sudo<60x70>cat /var/lib/mysql/6x
x66x
xxxxx65> לאחר זמן מה, הפיצוץ הושלם, צפו את התוצאות:werner@Yasser: ~/hashcat$ cat mysql.out 6B8255FB466413D6B1B72464E23428C94BCB: viperניתן לראות כי הפיצוץ מוצלח.
5. פיצוץ Discuz! סיסמת פורום
Discuz! זוהי תוכנית פורום php ידועה בסין והוא נמצא בשימוש נרחב. עכשיו בואו נפוצץ את דיסקוז! ערך hash של סיסמת המשתמש. קודם כל, אתה צריך למצוא את ערך האש, איפה אתה יכול למצוא את זה? כמובן מדיסקוז! במסד הנתונים.
יכול להיות Discuz! איפה מסד הנתונים? פתרתי את זה, הורד את הגרסה האחרונה של Discuz מהאתר הרשמי שלו! קוד מקור, הפעל והתקין, תקבל Discuz! מסד הנתונים
Discuz! שם מסד הנתונים המוחדל נקרא ultrax, שבו טבלה pre_ucenter_members שומר את ערך hash של סיסמת הכניסה "pre_" הוא קידומה ברירת המחדל שניתן לשנות במהלך התקנה, אבל "ucenter_members" לא ישתנה. השתמש בהצהרת sql הבאה כדי לבדוק את ערך hash של סיסמת הכניסה:
בחר password, salt מ pre_ucenter_members;
שמור ערך hash וערך מלח לקובץ:
echo 69BCBA126B93C6F397983629A0F7053:c13fd9 > discuz.hashערך המלח וערך המלח נמצאים באותה שורה, מחולקים ב":". לבסוף, פוצץ את סיסמת הכניסה Discuz hash עם הפקודה הבאה:
hashcat -w 3 -a 0 -m 2611 - revive -o discuz.out discuz.hash wordlist.dicלאחר רגע, הפיצוץ הושלם. התוצאות:
werner@Yasser: ~/hashcat$ cat discuz.out 69BCBA126B93C6F397983629A0F7053:c13fd9:winterניתן לראות כי הפיצוץ מוצלח.
6. מבחן מילון גדול
עד כה, השתמשנו במילון קטן עם רק 500 מילים בכל פעם, וזה לוקח רק רגע לכל פעם כדי להתפוצץ בהצלחה כל מיני hash. זה לא מוזר? הסיבה לכך היא כי הגדרתי בכוונה את הסיסמה החלשה במילון כדי להתאמן את השימוש ב- hashcat, אחרת זה לא יגרום לאנשים להרגיש רע מאוד. בפועל, זה בלתי אפשרי להיות כל כך מזל טוב. בואו נחשב באופן אקראי את ערך md5 של סיסמה פחות חלשה, לפצץ אותו עם מילון גדול, מצד אחד, לנסות מזל, ומצד שני, לראות כמה מהיר hashcat יכול להיות.
חישוב תחילה את ערך md5:
import hashlib md5 = hashlib.md5 () md5.update (" werner123456!!") הדפסת md5.hexdigest ()הפלט הוא:
יכול לשמור b17133f9abff287ed0546c1af2b171f7ולאחר מכן בחר מילון בגודל 10.5G המכיל 940 מיליון סיסמאות, להתחיל להתפוצץ: { 100077 100071 {100071 {100077 100077 100077 התחלתי להתפוצץ לפני השינה, וקמתי למחרת כדי להסתכל על התוצאות ומצאתי:
סטארted: Wed Jul 26 22:55:27 2017 Stopped: Wed Jul 26 23:02:28 2017במקור לקח רק 7 דקות! חשבתי שזה ייקח 7 שעות, 60 פעמים מהר יותר ממה שציפיתי! למרבה הצער, ערך hash לא התפוצץ בהצלחה, נראה כי "werner123456 !!!" אינו במילון הסיסמה. נראה שאני צריך להכין מילון סיסמה של 100G, אבל זה מאוד לא נוח לשמור ולהעביר מילון כל כך גדול. האם אין דרך אחרת? כמובן, אתה זוכר את מצב ההתקפה? השתמשנו במצב "Streight", והבא, בואו נבחן כמה דפוסים אחרים.
7. סיכום
משתמש ב-hashcat Flasting hash, הראשון הוא למצוא את ה-hash במערכות שונות, תוכנה שונות יש מיקומות אחסון ה-hash שונים, ולכן יש צורך למצוא במדויק את הערך ה-hash; השני הוא לקבוע נכון את סוג hash, לקבוע אם hashcat תומך בזה hash, ולבחור את הפרמטר -m הנכון, אחרת זה כמעט בלתי אפשרי להצליח; השלישית היא שמילון הסיסמה צריך להיות טוב יותר אם זה יכול להתפוצץ בהצלחה בסופו של דבר תלוי במילון. למרות שמילון הסיסמה הוא גדול ככל שזה טוב יותר, הוא עדיין גדול יותר, hashcat ידוע גם במהירות שלה, מילון גדול אינו בעיה עבור hashcat. כאן מילון טוב יותר: דלת דליפה קודמת + אוסף מילון סיסמה חלשה נפוץ 7Z , סיסמה דחיסה היא: anywlan. בנוסף, אם אתה אוסף הרבה מילונים קטנים, אתה יכול למזג, למיין ולכפול את המילונים הקטנים כדי לקבל מילון גדול כדי להקל על פיצוץ hashcat. אם המילון הקטן נמצא באותו ספרייה, אתה יכול להשתמש בפקודה:
cat * | sort > Merge.dicאם המילון הקטן מסודר לפי קטגוריה ומופץ בספריות מרובות שכבות? ברור שלא ניתן להשתמש בפקודת cat בלבד, אבל למעשה זה צריך רק פקודה אחת בהנחה שהמילונים הקטנים מאוחסנים בספריית MyDictionary, ניתן לכתוב את הפקודה כדלקמן:
{ } find ./MyDictionary -type f -exec cat {}{} ; | sort | uniq > Merge.dic