Advertisement
Guest User

Untitled

a guest
Jun 19th, 2016
221
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.92 KB | None | 0 0
  1. לפני מספר שעות פרסמה מכללת HackerU אתגר נוסף, אך הפעם היא מציעה לפותרים להצטרף לסגל המרצים של "מסלול אבטחת המידע".
  2. הפוסט בפייסבוק כולל קישור לנקודת ההתחלה, ומבהיר כי יש למצוא את השם והסיסמה המתאימים - וכך תחשף כתובת המייל למשלוח התשובה.
  3. אם מישהו מכם מתכוון לנסות לפתור את האתגר בעצמו, שיפסיק לקרוא עכשיו.
  4.  
  5. דף האתגר מוביל לתמונה בשם hackeru.png, אך זו איננה נפתחת: הדפדפן טוען כי היא פגומה.
  6. השמטת שם הקובץ מהלינק חושף עמוד Index סטנדרטי ובו מופיע קובץ אחד בלבד -- התמונה; גודל התמונה "עגול" ועומד על 512 בתים.
  7. הורדת הקובץ והדפסת תוכנו באמצעות hexdump מראים כי הוא בוודאי קובץ הרצה כלשהו, אך נראה שהוא אינו מאוחסן בפורמט מוכר.. בכל מקרה, ברור שאין מדובר בתמונה.
  8. הפקודה file מבהירה כי זה הוא "x86 boot sector, code offset 0xd8"; אם כך, זה הוא קובץ הרצה המשמש כ-MBR וככזה הוא כתוב באסמבלי 16-ביט.
  9.  
  10. objdump התקשה להבין את מבנה הקובץ; הפקודה הבאה סייעה לו לבצע Disassembly לקובץ:
  11. קוד:
  12. objdump -D -b binary -mi386 -Maddr16,data16 hackeru.png
  13. [ניתן לצפות בקוד האסמבלי כאן.]
  14.  
  15. קטעי MBR עשויים להופיע במספר פורמטים ועלינו להבין באיזה מהם מדובר. הדף המתאים בויקיפדיה מתאר את הפורמטים השונים, כאשר לכל אחד מהם "מספרי קסם" שונים המפוזרים בו. עפ"י הקובץ שבידינו, עושה רושם שמדובר בפורמט הקלאסי-גנרי של מקטע MBR. בפורמט המדובר הקוד מתחיל כבר מהתו הראשון ואורכו מגיע ל-446 בתים לכל היותר. עיון מדוקדק יותר בקובץ יראה שהחל מהיסט מסויים כבר מתחילות להופיע מחרוזות: 0xd8; למעשה פלט הפקודה file כבר סיפר לנו על כך. לסיכום השלב הראשון, עושה רושם שלפנינו קובץ Crackme ייחודי אשר מכיל קוד אסמבלי 16-ביט באורך 208 בתים.
  16.  
  17. הקוד שנפרש ברור יחסית, אך עלינו לקחת בחשבון מספר גורמים:
  18. - מקטעי MBR נטענים לרוב לכתובת 7C00h
  19. - שירותים אלמנטריים, כגון הדפסת מחרוזות, אינם זמינים באופן המוכר לנו [printf] אלא ע"י פסיקות BIOS
  20. - פסיקות כאלה מקבלות את הפרמטרים שלהן דרך אוגרים ידועים מראש; הקוד שנבחן קצר כל-כך עד שניתן להבין מה כל פסיקה עושה מההקשר בו היא מופיעה
  21.  
  22. חיפוש זריז בקוד האסמבלי מראה כי ישנן פקודות call לא מעטות, אך למעשה הקריאות מתבצעות כמעט תמיד לאותן שתי כתובות: הפונקציה המופיעה בהיסט-0xbd וזו המופיעה ב-0xcc.
  23. פעולתן של הפונקציות ברורה עפ"י ההקשר והפרמטרים המועברים אליהן בכל פעם שהן נקראות: הראשונה היא פונקציה המקבלת קלט באורך חסום מהמשתמש ומחזירה אותו, והשניה מדפיסה מחרוזת המועברת לה במצביע. הפונקציה שנותרה היא מעין "main", והניתוח שלה קל למדי: ניתן להבחין בקריאות ל-0xcc כדי ללמוד על ההודעות המודפסות בכל שלב וכך להבין היכן להתמקד.
  24.  
  25. [Offset 0x0]
  26. נראה שההדפסה הראשונה היא הדפסת הבאנר "Welcome to HackerU MBR Challenge, Made By RomanZ !!!". מייד לאחריו מגיעה הדפסת המחרוזת "Username: ", ולאחריה קריאה ל-0xbd, כלומר קלט מהמשתמש. ניתן להבחין שאורך הקלט המבוקש הוא 4.
  27. מייד לאחר מכן מתחיל הקוד לסרוק את הקלט שהתקבל תו אחר תו ולבחון את תוכנו באמצעות בדיקות פשוטות; אם אחת הבדיקות נכשלת - הקוד קופץ ל-0x93, שם ניתן לראות כי מודפסת המחרוזת "Wrong, Press Enter To Try Again :)".
  28. מהבדיקות המופעלות על תווי הקלט ניתן ללמוד כי שם המשתמש המבוקש הוא "z43r".
  29.  
  30. [Offset 0x53]
  31. לאחר מכן, מדפיס הקוד את המחרוזת "Password: " ופונה לקבל קלט מהמשתמש: ניתן לראות כי הקלט המבוקש הוא באורך 10 תווים. סדרת הפעולות כאן פשוטה יותר בהשוואה לזו שהתבצעה על שם המשתמש: לולאה המבצעת 10 איטרציות קוראת תו אחד בכל פעם מהקלט שהתקבל כסיסמה, מבצעת פעולה פשוטה של (c ^ 7) + 2 ומשווה את התוצאה למחרוזת הנמצאת בכתובת 0x18b; יש לשים לב כי סריקת המחרוזת ב-0x18b מתבצעת בסדר הפוך. קוד פייתון קצר מבצע את הפעולה ההפוכה כדי לחלץ את הסיסמה המבוקשת:
  32. קוד:
  33. >>> t = '\x32\x36\x36\x4d\x36\x77\x35\x74\x39\x60'
  34. >>> ''.join(chr((ord(a) - 2) ^ 7) for a in reversed(t))
  35. 'Y0u4r3L337'
  36. לבסוף, עלינו לבדוק את נכונות הפתרון. מכיוון שמקטעי MBR לא ניתנים להרצה על מערכת הפעלה כך סתם, יש להשתמש בכלי שידמה טעינת מערכת מאפס; כלי כזה הוא QEMU הידידותי:
  37. קוד:
  38. qemu-system-i386 -m 16 -boot c -hda hackeru.png
  39. נראה שהפתרון נכון ;)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement