PracticU

התקפה buffer overflow - אוגר EIP

בלי כתוביותעם כתוביות
PracticU › קורס סייבר למתחילים - Hacking - בדיקות חוסן תשתיתי ופריצה ל-Windows 10/11 - קורס זה נדרש למבחן ההסמכה היוקרתי OSCP › התקפה buffer overflow - אוגר EIP
מילון מושגים:
חולשה - פגם או חולשה במערכת או בתוכנה שעלול לאפשר פגיעה באבטחה אם לא יטופל.
הקסדצימלי - שיטת ספירה בבסיס 16, המשתמשת בספרות 0-9 ובאותיות A-F, ונפוצה לייצוג ערכים בינאריים בקצרה.
ASCII - תקן לקידוד תווים שמייצג אותיות, ספרות וסימנים כמספרים, ומשמש בסיס לייצוג טקסט במחשב.
בינארי - ייצוג מידע בבסיס 2 בעזרת הספרות 0 ו-1. גם קובץ הכולל קוד מכונה ולא טקסט קריא.
מעבד - יחידת העיבוד המרכזית של המחשב, שמבצעת את הפקודות של התוכניות ומנהלת את החישובים.
Kali Linux - הפצת Linux המיועדת לבדיקות אבטחה וחדירות, הכוללת אוסף כלים לבחינת מערכות.
Linux - מערכת הפעלה בקוד פתוח מבוססת ליבת Linux, נפוצה מאוד בשרתים וקיימת בהפצות רבות כמו Ubuntu.

התקפה buffer overflow - אוגר EIP
בשיעור זה ממשיכים את עבודת המחקר על הפגיעות שאותרנו בשיעור הקודם וממקדים אותה: אחרי שהוכח שהשירות קורס מקלט ארוך, לומדים למצוא בדיוק אילו תווים בקלט דורסים את אוגר ה EIP, כדי שיהיה אפשר לשלוט בו במקום לגרום רק לקריסה.
נושאי הסיכום המוצגים בשיעור:
1. שכפול הקריסה בקלט קבוע: הפאזר הקודם שלח אורכים הולכים וגדלים בלולאה כי לא ידענו מתי הקריסה מתרחשת. עכשיו, אחרי שידוע שהקריסה מתרחשת בין 700 ל 800 תווים, שולחים במכה אחת 800 תווים זהים, השירות קורס מיד, וכך שוכפלת הקריסה בצורה ודאית.
2. מה מראה המנפה שבירות: במנפה יש ארבעה חלונות עיקריים, קוד המכונה באסמבלי, רשימת האוגרים, המחסנית, ותצוגת זיכרון בשלוש עמודות, כתובת, ייצוג הקסדצימלי וייצוג ASCII. באפשרותך לחפש בתוך הזיכרון מחרוזת בינארית, וכלי הנגישות ניתן להרצה במצב מנהל ולחבר אותו לתהליך הרץ בפקודת המשך ריצה.
3. מה מצאנו אחרי הקריסה: אוגר ה EIP מלא בתווי 41, שהם האות A בטבלת ASCII. כלומר ארבעת התווים ששולטים בהוראה הבאה שהמעבד מבצע מגיעים מהקלט שלנו, אבל עדיין לא ידוע באיזה מיקום בדיוק מתוך ה 800.
4. למה חשוב המיקום המדויק: אם רוצים להפנות את ההוראה הבאה לכתובת אחרת, למשל לקפוץ לקוד שלנו, חייבים לדעת בדיוק אילו תווים מהקלט נופלים ב EIP, האם אלה התווים 710 עד 714 או 792 עד 796. בלי מיקום מדויק אין שליטה אמיתית.
5. הרעיון של מחרוזת תבנית ייחודית: במקום תווים זהים יוצרים מחרוזת ארוכה שבה כל תו אינו חוזר ברצף. כך, כשקוראים את ארבעת התווים שנפלו ב EIP, מזהים מיד את מקומם במחרוזת, ומשם את האורך המדויק שמוביל אל הדריסה.
6. הכלי ליצירת התבנית: ב Kali Linux קיים כלי שיוצר מחרוזת ייחודית באורך שמבקשים ממנו. מבקשים 800 תווים, משום שהקריסה ידועה בתחום 700 עד 800, ומעתיקים את התבנית אל תוך הסקריפט שלנו במקום התווים הזהים.
7. הרצה מול המנפה: מפעילים מחדש את השירות שקרס, מחברים את המנפה אליו במצב מנהל, משחררים לריצה, ושולחים את הסקריפט המעודכן. השירות קורס בחריגת גישה, והפעם ה EIP מציג ייצוג הקסדצימלי של ארבעה תווים ייחודיים מהתבנית, לא עוד AAAA.
8. פענוח הייצוג: את הייצוג ההקסדצימלי אפשר לפענח עם מחשבון מחרוזות מקוון שמחזיר את התווים עצמם. מתקבל רצף ייחודי של ארבעה תווים שקיים פעם אחת בדיוק בתוך התבנית.
9. הכלי למציאת האורך: במקום לספור 800 תווים ביד, משתמשים בכלי המשלים שמקבל את התבנית המקורית ואת הרצף שנמצא ב EIP ומחזיר את ההיסטה, במקרה שלנו 780. כלומר התוכנה קורסת בדיוק אחרי 780 תווים, והתווים 781 עד 784 הם אלה שנופלים ב EIP.
10. אימות המספר: כדי לוודא שהמספר מדויק, שולחים שוב 800 תווים אבל מובנים, 780 תווי A, ואז ארבעה תווי B, ואז 16 תווי C כדי להשלים את האורך. אם ה EIP מציג בדיוק ארבעה B, ההיסטה מדויקת. אם הוא מציג תערובת של B ו C, יש סטייה שיש לתקן בסקריפט. הבדיקה עברה, ה EIP הציג ארבעה B.
11. המשמעות והלקח ההגנתי: בשלב זה שולטים בדיוק בתוכן אוגר ה EIP, והשלבים הבאים בקורס מראים כיצד למנף שליטה זאת. מבחינה הגנתית זו תזכורת שגם קריסה פשוטה היא רק התחלה, ושקלט לא מאומת בשירותי רשת עלול להוביל עד לשליטה בזרימת הביצוע, ולכן בדיקות גבולות ועדכוני גרסה הם הגנה הכרחית.
בשיעור זה שוכפלנה הקריסה בקלט קבוע, הוכח שתווי הקלט דורסים את אוגר ה EIP, נוצרה מחרוזת תבנית ייחודית בעזרת כלי התבנית, פוענח רצף ה EIP ונמצאה בעזרת כלי ההיסטה הדרך המדויקת, 780 תווים עד הדריסה, והמספר אומת בקלט מובנה שהציג ארבעה B באוגר.
בשיעור הבא נעסוק בנושא מציאת מקום בזיכרון עבור Payload - Shellcode.
SR11900HE

פרקי ההרצאה: התקפה buffer overflow - אוגר EIP

  1. 00:00

    שחזור הקריסה עם 800 תווים

  2. 01:00

    היכרות עם Immunity Debugger

  3. 02:47

    עדכון הפאזר לשליחה חד פעמית

  4. 04:42

    שליטה באוגר EIP

  5. 05:54

    מציאת המיקום המדויק בזיכרון

  6. 08:07

    יצירת מחרוזת תווים ייחודית

  7. 10:32

    הרצה מחדש וזיהוי הכתובת

תמלול ההרצאה: התקפה buffer overflow - אוגר EIP

הטקסט המלא של הדקות הראשונות בהרצאה «התקפה buffer overflow - אוגר EIP» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:02

    אנחנו ממשיכים עם ההתקפה של ה-Buffer Overflow. לאחר שבנינו את הפאזר שבאמצעותו גרמנו לאפליקציה SyncPrize לקרוס, וראינו שיש לנו פוטנציאל לתקיפה, אנחנו רוצים להמשיך ולנסות לשכפל את התקיפה, כאשר עכשיו במקום לשלוח את כל ה-2,000 תווים, נשלח רק 800. קריסה קורית בין 700 ל-800.

  2. 00:34

    החלון השמאלי העליון מראה לי פה את הפקודות בשפת אסמבלר, כן, שפת מכונה. רק את הדברים האלה המעבד מבין. כן, שפת אסמבלי, בסוף זה מתורגם ל-0 ו-1.

  3. 00:48

    כן, אתם רואים, יש פה מוב, יש פה אינס, יש פה קול, כן, קריאה לפונקציה. וזה החלון השמאלי העליון, קוד באסמבלי. החלון הימני העליון זה הרגיסטרים, האוגרים.

  4. 01:05

    פה אני יכול לראות את הרגיסטרים ברגע שאני אריץ את ה-Immunity, כן, ברגע שאני מבצע ה-Touch ל-Immunity, כן, ברגע שאני עושה פה ה-Touch, אתם רואים הסיניק פריז באדום, זה אומר שהוא כבר ב-Touch, אז מה שקורה זה שהאפליקציה עוצרת, כן, שימו לב בפאוס.

  5. 01:27

    ואם אני רוצה להמשיך את הריצה שלה, אני צריך ללחוץ על F9. אוקיי, כרגע האפליקציה רצה. בסדר? אז פה אנחנו נראה את הרגיסטרים, פה, החלון הזה הימני התחתון, אנחנו נראה את הסטאק, כן, את המחסנית עצמה, מה שדיברנו בהקדמה, ופה זה הדאמפ, כן, פה אנחנו נראה את כל ה-X הדצימלי, כן,

  6. 01:51

    שהאפליקציה, אם אנחנו רוצים למצוא סטרינג למשל בתוך הקוד, אני יכול לבצע פה חיפוש, כן, לסטרינג, לסרצ' פור, ואני יכול למצוא ביינר סטרינג, זה מחולק לשלוש עמודות, העמודה הכי שמאלית זה הכתובת של תא הזיכרון, פה זה ה-X הדאמפ, כן,

  7. 02:13

    הייצוג ה-X הנצימאלי, ופה זה הייצוג האסקי, כן, שזה קצת יותר מוכר לנו, גם מהווייר שארק. פה אני יכול לראות ממש את התווים ולנסות לעשות חיפוש בסטרינגים.

  8. 02:28

    זה המידע שהם מכילים מהכתובות הזיכרון. אז בואו נשכפל את הקריסה, אז ניכנס לקאלי לינוקס. אוקיי, ויש לי פה כבר סקריפט, סינק פריז 01. אם אני אפתח אותו אני אראה שבמקום אלפיים שהיה לי מקודם היה לי פה לולה בווייל שעוברת כל פעם שולחת 100 ואז עוד 100 זה כבר 200 ואז עוד 100 300 וראינו שמתוך האלפיים

  9. 02:59

    זה קורס בין 700 ל-800 אז אני רוצה כרגע לשלוח ישר בבת אחת במכה אחת 800a ואז אני אראה את האפליקציה קורסת בואו נבדוק את זה פה יש לי את הבקשה העצמה כן יש לי פה את הבאפר שכרגע אני לא צריך להגדיל אותו אני יודע בדיוק שהגודל שלו הוא בסקריפט הקודם שראינו עם הלולת while, בואו תראו אותו,

  10. 03:25

    זה הפאזר שלנו. פה הצענו לולה כי לא ידענו באמת מתי היא תקרוס, כמה תווים. לקחנו ריזיקה של 2000, ואחרי 800 זה קרס, ופה בוופר כל פעם הוספנו 100. כרגע אני לא צריך את זה, מה שאני עושה, אני שולח ישר 800. אז

  11. 03:47

    בואו נשים פה את הקציה, אורר, כן, יש לי פה את הווימוור, וכרגע שימו לב, הוא ב-F9, כלומר הוא בריצה, ואני אשלח את הקריפט הזה, אני אפעיל אותו.

  12. 04:08

    מה שיקרה, אני אשלח בבת אחת את כל ה-800, בואו תראו איך זה קורס מיד. עושה את זה, עושה ככה, וככה. בואו נלחץ פה על Enter, ונעבור לפה מהר, והנה הקריסה, כן? הקריסה קרתה ממש בשנייה אחת, כי בבת אחת שלחנו 800 תווים, אז ראינו את הקריסה, סנדינג, ומודיע שהודענו.

  13. 04:40

    אז הצלחנו לשחזר את הקריסה, אבל עדיין יש לנו בעיה, אנחנו לא יודעים איפה בדיוק זה קרס, כן, שימו לב פה, אני רואה שה-EIP שלי, כן, שלחנו שמונה מוטבים, והצלחנו לגרום להשתלט על ההוראה הבאה, שהיא 41 באקסה, זה הטב A, כן, באסקי, ארבע פעמים A,

  14. 05:04

    הצלחנו לשלוט על ה-EIP, אבל אין לנו מושג איפה בדיוק, כן, בין ה-700 ל-800, איפה בדיוק, אנחנו צריכים לדעת בדיוק כמה תווים בדיוק לשלוח, ואז, אני לא אקדים את המאוחר, בסרטים הבאים נבין למה זה הכרחי.

  15. 05:22

    המספר המדויק, כי אנחנו כרגע שולטים פה על תאים בזיכרון, ואני אהיה חייב לדעת את התא המדויק, כי אם אני רוצה, בואו, כבר התחלנו לדבר על זה, אז נגיד, אם אני לא רוצה ש-EIP יהיה A, כן, אני רוצה ש-EIP תהיה איזו הוראה של להפעיל קוד זדוני מסוים, או לקפוץ, לבצע איזה ג'אמפ לקוד זדוני שנמצא בכתובת זיכרון כזאת וכזאת,

  16. 05:50

    וכרגע זה לא טוב לי אם אני לא יודע בדיוק, כן? אני צריך שה-EIP שלי, שהשלב הבא בתוכנית יפעיל את הקוד הזדוני שלי, וככה אני אדע לנצל את החולשה.

  17. 06:03

    לכן אני חייב בדיוק להבין איפה מתוך ה-800 תווים של ה-A, איזה בדיוק תווים אלה, איזה מספר הם במערך, אם זה 710 עד 714 או שזה 792 עד 796, אני צריך לדעת בדיוק כי אני צריך לשלוט על AP ברמה של להכניס פה משהו זדוני או לקפוץ לטאב הזיכרון אחר שהוא משהו זדוני, אז אני יכול לעשות דבר כזה.

  18. 06:33

    קודם כל, לפני הכל, אני צריך לטעון את הסינפריז מחדש כי אחרי קריסה יש פה Access Violation, אני חייב לטעון אותו מחדש, יש פה את הסרוויס, נבצע סטארט ו-Immunity דיבאגר, אני מריץ אותו כאדמיניסטרטור, כן? כי זה רץ בהרשאות סיסטם ואם לא נריץ באדמיניסטרטור לא נראה את ה-SyncBreeze,

  19. 07:01

    כן? אני מתכוון שלא נראה את ה-SyncBreeze פה ב-Attach. אז אני כרגע מציע טאץ' ל-SyncBreeze וזכרו, ברגע שעושים הטאץ', התוכנה הוא מביא את התוכנה ל-Immunity, כן?

  20. 07:18

    הוא מריץ את הקוד בתוך ה-immunity אבל הוא בפאוז. ואם אני רוצה להגיד לתוכנה לרוץ, אני אומר F9. F9 עכשיו זה כביכול, יש לי את הפייג' הזה של הלוגין והוא מחכה שיכניסו לו שם וסיסמה.

  21. 07:36

    כן, במקרה שלנו, כן, כל אפליקציה ומה שהיא מבצעת. אז אני רוצה להבין מה נופל על ה-EIP מכל המחוזת הארוכה. אז יש דרך שאפשר לעשות את זה, זה ליצור סטרינג שכל אות בסטרינג לא חוזרת על עצמה, שכל תו לא חוזר על עצמו.

  22. 07:57

    אז בזכות זה שנבצע סטרינג שכל תו שם הוא ייחודי, אנחנו נוכל להבין, ברגע שנראה את ההוראה הבאה, את הארבעה תווים הבאים, נוכל להבין את המיקום של התווים, של הארבעה תווים האלה של ה-AP בתוך ה-800 תווים שאנחנו הולכים כרגע ליצור.

  23. 08:16

    אז אני כרגע עובר ל-Kali Linux, בקאלי לינוקס יש כלי שנקרא msf-pattern-create, נקרא msf-pattern, יש קריאט, קריאט זה כרגע ליצור את הסטרינג, את המחרוזת הארוכה הזאת, כן, מה שהתפקיד שלו, של ה-msf-pattern-create, הכלי הזה זה ליצור מחרוזת עם תווים שלא חוזרים על עצמם,

  24. 08:42

    בסדר? כי אם יש לי תווים שחוזרים על עצמם כמו ה-aaa הארוך, זה לא נותן לי כלום, כי אני לא יודע מה התווים הייחודיים שנפלו על ה-eap.

  25. 08:54

    ניצור כרגע מינוס L, כן, זה האורך של המחרוזת. 800, אני רוצה 800 תווים כי הקריסה הייתה בין 700 ל-800, זכרו?

  26. 09:04

    ומקודם שכפלנו את הקריסה אבל עם 800, אנחנו לא יודעים איפה זה בין 700 ל-800. כרגע אני מבקש 800 תווים ואני לוחץ על Enter. שימו לב, 800 תווים שאף תו לא חוזר על עצמו ברצף, כן, זאת הכוונה, שהוא לא חוזר על עצמו ברצף.

  27. 09:23

    למשל פה ה-a חוזר על עצמו אבל לא ברצף וככה אני אוכל לראות איזה בדיוק רצף של תווים נופלים לי על ה-eip שזה ההוראה הבאה שהקוד אמור לבצע.

  28. 09:42

    מה שאני עושה עכשיו אני רוצה להחליף אני רוצה להכניס לעדכן את הסקריפט שלי עם ה-800 תווים האלה כן אני למעשה מעתיק את כל התווים האלה עושה קופי כן אני כבר עשיתי את זה מקודם.

  29. 09:57

    פותח את הליפפד ואני רוצה לראות את הטינק בריז 0.2. שימו לב שפה באינפוט באפר זה האינפוט זכרו שאנחנו מבצעים את הלוגין שמשתמש כלשהו וסיסמה שהיא האורך של כל התווים האלה זאת למעשה המחרוזת הארוכה כן אני עדיין שולח 800 תווים אבל לא תווים דומים כן לא את ה-800 פעמים תו a אלא אני שולח מותבים שהם ייחודיים.

  30. 10:33

    אז עדכנו את הסקריפט שלנו, ואני מזכיר שהבאנו את הסינקבריז למצב של הפעלה, ועכשיו נשלח את הסקריפט הזה ונראה על מה EIP יצביע לנו.

  31. 10:47

    ננקה מסך, סינקבריז 02, זה הסקריפט המעודכן עם השמונה מותבים שיצרנו עם ה-MSF create pattern.

  32. 10:57

    אני לא יכול להראות פה מסך מול מסך, אז בואו נריץ את זה ונעבור כרגע כאן, שימו לב התוכנה קרסה access violation when executing כן כי הוא חרג מגבולות הבאפר שלו מגבולות הזיכרון ושימו לב eip מצביע על הכתובת הזאת כן זה הייצוג ב-x הדצימאלי 42 30 61 42 זה הייצוג ה-x הדצימאלי אני רוצה לראות את הייצוג של

לקורס המלא: קורס סייבר למתחילים אונליין

ההרצאה הקודמת: התקפה Buffer Overflow - בדיקת היתכנות - Fuzzer

ההרצאה הבאה: מציאת מקום בזיכרון עבור Payload - Shellcode

הרצאות קשורות מקורסים אחרים

  • התקפה DNS spoof
  • עצירת התקפה - SOC
  • הצפה של כתובות MAC - התקפה MAC Flooding
  • התקפה מסוג CSRF - הסבר נוסף

קורסים נוספים במסלול

  • קורס SOC - מיישם הגנת סייבר
  • קורס פריצה ומבדקי חדירה לתשתית ארגונית - בדיקות חוסן מתקדמות ל-Active Directory - קורס זה נדרש למבחן ההסמכה היוקרתי OSCP
  • קורס פריצה ומבדקי חדירה לאתרי אינטרנט - בדיקות חוסן לאתרים - Web Pentesting - קורס זה נדרש למבחן ההסמכה היוקרתי OSCP
  • קורס סייבר והאקינג ל-Android - פריצה לטלפונים ואפליקציות אנדרואיד - בודק חוסן - Mobile App Pentesting