PracticU

התקפת Buffer Overflow
שלב 2 - שליטה על EIP

בלי כתוביותעם כתוביות
PracticU › קורס סייבר למתחילים - Hacking - בדיקות חוסן תשתיתי ופריצה ל-Windows 10/11 - קורס זה נדרש למבחן ההסמכה היוקרתי OSCP › התקפת Buffer Overflow שלב 2 - שליטה על EIP
מילון מושגים:
מעבד - יחידת העיבוד המרכזית של המחשב, שמבצעת את הפקודות של התוכניות ומנהלת את החישובים.
ASCII - תקן לקידוד תווים שמייצג אותיות, ספרות וסימנים כמספרים, ומשמש בסיס לייצוג טקסט במחשב.
VPN - רשת פרטית וירטואלית שיוצרת חיבור מוצפן דרך האינטרנט, כאילו המכשיר מחובר ישירות לרשת מרוחקת.
באג - תקלה או שגיאה בקוד שגורמת לתוכנה להתנהג בניגוד למצופה.
סקריפט - קובץ המכיל רצף פקודות שמבוצעות על ידי מפרש, לרוב כדי להפוך משימות לאוטומטיות.
הרשאה - קביעה אילו פעולות ומשאבים מותרים למשתמש או לתהליך לאחר שזהותו אומתה. שולטת במי רשאי לעשות מה.
זיכרון - רכיב מהיר ונדיף שבו המחשב שומר נתונים ותוכניות בזמן ריצתם. תוכנו נמחק עם כיבוי המחשב.
לוג - רישום מתועד של אירועים ופעולות שמתרחשים במערכת או בתוכנה, המשמש למעקב ולאיתור תקלות.

התקפת Buffer Overflow שלב 2 - שליטה על EIP
בשיעור זה אנו לומדים להשתלט על אוגר מצביע הפקודה הבאה לביצוע, כדי שהשרת יבצע את הפקודות שלנו במקום אלה של התוכנה המקורית. אנו בונים סקריפת ניצול, מזהים בעזרת תבנית תווים ייחודית וכלי המונה את המיקום המדויק שבו הקלט חודר אל האוגר, ומתקנים סטייה קטנה עד שהאות הרצויה נכנסת בדיוק למקום הנכון.
נושאי הסיכום המוצגים בשיעור:
1. המטרה של ההרצאה: להשתלט על אוגר מצביע הפקודה הבאה לביצוע, שבו שמורה הכתובת של הפקודה הבאה לביצוע, ולגרום למעבד לבצע את הפקודות שלנו במקום אלה של התוכנה המקורית. זה נקרא להשתלט על האוגר ולשתול בו את הכתובת הבאה לביצוע שאנחנו רוצים.
2. חזרה על הפאזינג: בהרצאה הקודמת שלחנו את האות A כפול מאה, אז כפול מאתיים, אז כפול שלוש מאות וכך הלאה עד אלפיים פעמים, עד שהתוכנה קרסה ואל אוגר מצביע הפקודה נכנסה האות A. ראינו שם את קוד ה-ASCII של ארבעים ואחת נכנס אל האוגר, מה שאומר שהצלחנו גם להקריס את התוכנה וגם להשתלט על כתובת הפקודה הבאה לביצוע.
3. השאלה המרכזית: כמה פעמים בדיוק צריך לשלוח את האות A כדי להגיע אל האוגר, איפה בדיוק הוא נמצא. רק כשנדע זאת נוכל לשתול שם את הכתובת הבאה לביצוע שאנו רוצים. הכתובת מוכנה באתר ואפשר לקחת אותה ולעשות שולחן עבודה מרוחק אל הקורבן.
4. הכנת הסביבה: מתחברים לקורבן כשיש לנו VPN מחובר ושולחן עבודה מרוחק, ושם נרשום את כל הפקודות. מריצים את התוכנה של השרת בהרצה כמנהל, פותחים בתוכה את קובץ השרת שנמצא בשולחן העבודה ומריצים אותה. זו למעשה המעבדה שבה מתרגלים את ההתקפה, וכשהיא תהיה מוכנה ישלחו את קוד ההתקפה אל השרת האמיתי וישתלטו בו. פאזינג כבר ביצענו וגילינו שיש באג, וגם בשלב זה יש להריץ בשולחן העבודה המרוחק את הפקודה שמגדירה את סקריפט המונה, שסקריפט שניעזר בו בהמשך.
5. סקריפת הניצול: מעתיקים את הסקריפט שהאתר נותן ושומרים אותו בקובץ חדש בשם פיילוט פי. יש בו את ה-IP שלנו, את פורט 1337 ומשתנה עזר. בסוף הסקריפט הוא מנסה לפתוח תקשורת מול משתני ה-IP והפורט, פותח מולם סוקט, שהוא בעצם חיבור, מדפיס שהוא שולח את החוצץ הזדוני, שולח את משתנה החוצץ אל הסוקט שנפתח ומדפיס שסיים. אם מתרחשת קריסה הוא נופל אל בלוק החריגים וכותב שלא הצליח להתחבר.
6. מהו החוצץ: בהרצאה הקודמת החוצץ היה רק אותיות A רבות. עכשיו במקום לשלוח רק את האות A מחלקים אותו: אותיות A, ואז אות B שאנו רוצים שתיכנס אל מצביע הפקודה הבאה לביצוע, ואז אות C שהיא יהיה הפיילואד שלנו, הפצצה. אנו רוצים להבין כמה אותיות A מגיעות לפני האוגר, ואחרי שנגלה זאת נשתול את האות B באוגר ואחר כך את הפיילואד. החלק הראשון הוא סתם דריסה מפוזרת שנקראת גלישת חוצץ, אחריו מגיע האוגר ואחריו מתחיל הפיילואד, והפיילואד הוא בעצם הפצצה שלנו, הקוד הזדוני שהכלים שהכרנו מייצרים.
7. תבנית תווים ייחודית: איך מגלים כמה אותיות A צריך? עושים תבנית ייחודית: במקום לרשום אות A או אות B, רושמים רצף ייחודי של שילובי אותיות ומספרים, כמו A גדול, a קטן, 0, אז A גדול, a קטן, 1 וכך הלאה. כך נגלה איזה ערך ייפול על האוגר. מריצים את הכלי שמייצר את התבנית באורך של 2400 ולא 600, כי הנפילה הייתה סביב האלפיים, וההוראות אומרות לעשות ארבע מאות בתים יותר ארוך ממקום הנפילה. אם שילוב תווים כלשהו מהתבנית ייכנס בדיוק אל האוגר, נדע כמה סימנים בדיוק צריך לשלוח לפניו ונזהה את המיקום המדויק של כניסת האוגר.
8. הכנסת התבנית לסקריפט: לוקחים את כל התבנית ומכניסים אותה לתוך הסקריפט, שם זה יהיה החוצץ שלנו. הסקריפט מחלק את החוצץ למשתני עזר לנוחיותנו, ואפשר לדחוף את התבנית לאיזה משתנה שרוצים, כי בתחילה כל החלקים ריקים. דוחפים אותה לתוך משתנה הפיילואד כפי שההוראות מבקשות, שומרים ומריצים את הסקריפט מתוך הרשאות מוגברות בקאלי.
9. הקריסה הראשונה עם התבנית: התוכנה קורסת ועוברת להשהיה עם שגיאת גישה, כי ניסתה לגשת לכתובת שאינה קיימת בזיכרון, וזה בדיוק מה שהאוגר הזדונה גרם לה. עכשיו אפשר לחפש בתוך התבנית איפה נמצא הערך שנכנס לאוגר ולדעת בדיוק כמה אותיות A צריכות להירשם לפני הגעה אל האוגר.
10. חיפוש אוטומטי בעזרת המונה: במקום לחפש ידנית, משתמשים בכלי המונה שהגדרנו קודם. אומרים לו למצוא איפה בתוך התבנית נמצא הערך שנכנס לאוגר, והכלי לבד הולך אל האוגר, מסתכל מה יושב שם ומציין באיזה מיקום בתוך התבנית נמצא הערך הזה. מתברר שהערך נמצא במיקום 1982, כלומר צריך 1982 פעמים את האות A לפני שמגיעים למקום הנכון, ושם בסקריפט הניצול משתילים את האות A 1982 פעמים לפני האות B. את החוצץ הישן אפשר למחוק, כי כבר אינו נחוץ.
11. הבדיקה הראשונה והכשל: בונים את החוצץ החדש: 1982 אותיות A, ואז אות B שצריכה להיכנס בדיוק אל האוגר, ואז האות C שתהיה הפצצה. מריצים הכל מההתחלה בעזרת איפוס הדיבאגר והרצת התוכנה. מתקבלת קריסה, אבל אל האוגר נכנס שוב הערך 41, ובזיכרון נראה A ואז B ואז C. זה נראה קרוב לנכון, אבל הרצף נכנס למקום הלא נכון, אל המחסנית ולא אל האוגר המבוקש.
12. גילוי הטעות ביומן הדיבאגר: עוברים ליומן הנתונים של הדיבאגר ורואים שהכלי הצביע על המיקום 1978 ולא 1982, כי קראנו את המספר בטעות. בגלל הבלבול עוד האות A נכנסה אל האוגר, והאות B והאות C נכנסו רק אחר כך. רוצים לפגוע בדיוק בתוך האוגר, ולכן מריצים שוב את התוכנה מההתחלה ומנסים פעם שנייה.
13. הצלחה: בניסיון השני אל האוגר נכנס הערך 42, שהוא בדיוק מה שרצינו. דרסנו את כל הזיכרון באותיות A עד שהגענו לאות B, שנכנסה אל מקום הפקודה הבאה לביצוע, ואחריה יש את האות C שבה נכניס את הפיילואד הזדוני. ההסבר המפורט על מבנה הזיכרון נעשה בהרצאות קודמות של גלישת חוצץ, וכאן דובר בקצרה.
14. המסקנה: בתוך האוגר נכנס הערך 42, כלומר אנחנו יודעים בדיוק איפה לשתול, וזו הייתה המטרה. גילינו יחד שאחרי 1978 פעמים של האות A, שזו דריסה מפוזרת שלא מעניינת אותנו, מגיעה האות B, שהיא הכתובת שנכנסת אל האוגר. לשם נכניס כתובת לביצוע, ונרצה שהיא תבצע את הפיילואד שלנו, את הפצצה, שאותה נשתול בהמשך הקלט.
15. הצעד הבא ותווים אסורים: בהרצאה הבאה נכין את הפיילואד, אבל לפני כן נגלה אילו תווים אסור לשלוח על הקו. לדוגמה התו אפס גורם לסיום התקשורת, כי הוא מסמן את סוף המחרוזת: המחרוזת בסופה מסתיימת באפס, ואז התוכנה חושבת שהחוצץ נגמר ואינה ממשיכה לקרוא את כל החלק שאחריו, כי החוצץ שלנו מורכב מכמה מחרוזות מחוברות. חוץ מהאפס קיימים עוד תווים כאלה, ואותם נגלה בהרצאה הבאה בכך שננסה לשלוח את כל התווים האפשריים ונראה מה לא עובר על הקו.
בשיעור הבא נעסוק בנושא התקפת Buffer Overflow שלב 3 - זיהוי תווים פסולים.
בסוף השיעור בנינו סקריפת ניצול מובנית, גילינו בעזרת תבנית תווים ייחודית וכלי המונה שהאוגר ממוקם בדיוק אחרי 1978 תווים, תקנו סטייה שנתגלתה ביומן הדיבאגר והצלחנו לגרום לערך שלנו להיכנס בדיוק אל מצביע הפקודה הבאה לביצוע.
SR12613HE

פרקי ההרצאה: התקפת Buffer Overflow שלב 2 - שליטה על EIP

  1. 00:00

    המטרה: שליטה באוגר EIP

  2. 00:57

    חזרה על הקריסה הראשונה

  3. 01:55

    הכנת הסביבה לניסוי

  4. 03:24

    הכרת סקריפט הניצול

  5. 04:56

    מבנה החוצץ בסקריפט

  6. 05:56

    תכנון ההתקפה כולה

  7. 07:10

    מציאת המיקום המדויק של EIP

  8. 08:15

    יצירת דפוס תווים ייחודי

תמלול ההרצאה: התקפת Buffer Overflow שלב 2 - שליטה על EIP

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

  1. 00:02

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

  2. 00:28

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

  3. 00:51

    בשיעור קודם בהרצאה קודמת שלחנו A כפול 100 פעמים ואז כפול 200 וכפול 300 400 500 שלחנו ככה אלפיים פעם אות A עד שהגענו למצב שהתוכנה קרסה ולתוך אוגר EIP נכנסה אות A שלנו ראינו שם קוד אסקי של 41 נכנס לתוך EIP זה אומר שהצלחנו גם להקריס אותו וגם להשתלט על כתובת הבאה לביצוע עכשיו אני רוצה לדעת בדיוק כמה פעמים

  4. 01:22

    צריך לשלוח אות A כדי להגיע ל-EIP בדיוק איפה נמצא EIP למה כדי ששם אני אני אוכל לשתול את הכתובת הבאה לביצוע שאני רוצה.

  5. 01:34

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

  6. 01:43

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

  7. 01:57

    מה קרה לו? הנה, התחברנו לקורבן. שימו לב, יש לנו פה VPN מחובר, יש לנו רימור דסקטופ לקורבן, וכאן נרשום את כל הפקודות שלנו.

  8. 02:08

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

  9. 02:31

    גדול יותר, הנה, זה יותר גדול, ועושים דיבאג run. הנה, השרת עובד. אז עשיתי פייל open, פתחתי אותו, ועשיתי לו run.

  10. 02:41

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

  11. 02:53

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

  12. 03:06

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

  13. 03:15

    עכשיו אנחנו רוצים להשתלט על EIP ויש לנו פה סקריפט שיעזור לנו. בואו נראה, ניקח את זה, נעתיק את זה ונקרא לו exploit py. אוקיי, אני עושה קובץ חדש, create document empty file, פלויט py ככה הם ביקשו שנקרא לו, יכולנו גם לקרוא לו בכל שם אחר ועושים אדיט, מכניסים פה את הסקריפט, שימו לב יש פה את ה-IP

  14. 03:42

    שלי כבר בתוך הסקריפט, פורט 1137, זה משתנה עזר, בואו נקפוץ לסוף הסקריפט ונראה מה קורה כאן, קודם כל הוא מנסה, איפה שהתראי, הוא מנסה לפתוח תקשורת מול משתנה IP, שזה המשתנה IP, מול פורט מסוים, מול פורט מסוים, זה IP ופורט משתנים, וכאן הוא פותח מולם סוקט.

  15. 04:05

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

  16. 04:20

    ופה מתבצעת שליחה של באפר לתוך הסוקט הזה שפתחנו s.send. פתחנו סוקט ובסוקט הזה שולחים משתנה באפר נשלח לשם.

  17. 04:31

    זה השם של המשתנה והוא כותב לי done. אם הוא כתב done, הוא הצליח, אם יש קריסה, אם הוא נופל, אז מה שקורה שהוא נופל לכאן לאקספשן, טריי וקאץ', אתם רואים מנסה ואם הוא לא מצליח לשלוח אז הוא כותב כנות קונקט.

  18. 04:48

    טוב, השאלה זה מה הבאפר הזה, מה זה המשתנה הזה באפר? או, המשתנה הזה באפר היה לנו לפני כן בהרצאה קודמת, אמרנו שבאפר זה aaa ככה, המון המון פעמים זה היה 100, 200, 300, 400, 500, כל פעם הוספנו a.

  19. 05:04

    עכשיו במקום לשלוח את הבאפר הזה רק אות A אנחנו מחלקים אותו לא יודע לכמה A פה אני רוצה לשלוח 1, 2, 3, 4 B ופה אני רוצה לשלוח C כאשר ה-B הזה אני רוצה שהוא ייכנס לתוך EIP זאת אומרת אני רוצה להבין כמה אותיות A מגיעות לפני ה-EIP אחרי שאני אגלה את זה אני רוצה לשתול בתוך EIP את ה-B ואחרי שאני שותל ב-EIP באוגר של הפקודה הבאה

  20. 05:38

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

  21. 06:03

    זוכרים? MSF קונסול, MSF ונום כל אלו שמייצרים לנו את הקוד הזדוני שלי. אז אני רוצה לדעת כמה פעמים צריך לשתול פה אות A עד שאנחנו מגיעים בדיוק למקום שייכנס לתוך EIP.

  22. 06:19

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

  23. 06:37

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

  24. 06:49

    זאת המטרה בגדול. אנחנו ניכנס לכל מיני פרטים. השאלה זה כמה פעמים פה צריכה להיות אות A. אני לא יודע, 1913 או 1822, מאיפה אני יודע? אני עד עכשיו שלחתי הכל Aים, וראיתי שאם אני שולח 2,000 ומשהו Aים, זה נכנס ל-EIP, ככה אני גיליתי שיש לי אפשרות בכלל לתקוף אותו. עכשיו שאלה, כמה בדיוק Aים צריך?

  25. 07:16

    אוקיי, אז איך אנחנו נגלה כמה Aים צריך? איך אנחנו נעשה את הדבר הזה? אנחנו נעשה דבר פשוט, כמו שהם כותבים לנו כאן. אנחנו נעשה פאטרן ייחודי, אנחנו לא נרשום A או B או C, אנחנו נרשום A1, A2, A3, וככה נגלה איזה מספר ייפול לנו על EIP.

  26. 07:37

    אנחנו מריצים את הדבר הזה, לא 600 אלא יותר אנחנו צריכים כי זה נפל ב-2000 אז בוא נלך לכאן ונעשה דבר כזה נעשה length נניח של 2400 נכון זה נפל ב-2000 והם כותבים לנו פה תעשה 400 bytes longer יותר ארוך מאשר הנפילה זוכרים הנפילה הייתה סביב 2000 נעשה 2400 הם סתם נותנים לנו פה 600 כדי לבדוק שאנחנו קוראים הוראות כמו שצריך אז אנחנו

  27. 08:07

    מפעילים פה אלה 2400 גם אני יכול לבדוק כאן תסתכלו פה נכנסתי לכאן למעלה תראו פה למעלה ל-right apps ופתחתי את הלינק הראשון ואני רואה פה גם שהוא יוצר את ה-MSF pattern 2400 אז אני מפעיל את ה-MSF pattern הזה 2400 עושה paste והנה הוא יוצר לי דפוס מה זה הפאטרן

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

ההרצאה הקודמת: התקפת Buffer Overflow - שלב 1 - זיהוי חולשה - Fuzzing

ההרצאה הבאה: התקפת Buffer Overflow - שלב 3 - זיהוי תווים פסולים

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

  • בניית שלב - חלק 1
  • שליטה מרחוק - RDP
  • התקפת CSRF
  • התקנת vCenter 8 - שלב ראשון

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

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