
הטקסט המלא של הדקות הראשונות בהרצאה «התקפת Buffer Overflow שלב 2 - שליטה על EIP» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
שלום לכולם, בהרצאה הזו אנחנו רוצים להשתלט על אוגר EIP שבו שמורה הכתובת של פקודה הבאה לביצוע אנחנו רוצים לגרום למעבד לעשות את הפקודות שלנו שהשרה תבצע את הפקודות שאנחנו נגיד לו במקום התוכנה המקורית זה נקרא להשתלט על אוגר EIP ולשתול שם את הכתובת הבאה לביצוע, את הכתובת שלנו שאנחנו נרצה
ודבר ראשון, מה אנחנו צריכים לעשות? צריכים להפעיל את הקורבן שלנו אני מפעיל מכונה וירטואלית של הקורבן הוא אומר לי להתחבר ב-vpn או דרך ווב אנחנו מחוברים ב-vpn דיברנו על זה בהרצאות קודמות הוספנו לעצמנו עוד שעה ועד שהוא מכין לכתוב את IP אני רוצה להזכיר לכם מה עשינו בשיעור קודם
בשיעור קודם בהרצאה קודמת שלחנו A כפול 100 פעמים ואז כפול 200 וכפול 300 400 500 שלחנו ככה אלפיים פעם אות A עד שהגענו למצב שהתוכנה קרסה ולתוך אוגר EIP נכנסה אות A שלנו ראינו שם קוד אסקי של 41 נכנס לתוך EIP זה אומר שהצלחנו גם להקריס אותו וגם להשתלט על כתובת הבאה לביצוע עכשיו אני רוצה לדעת בדיוק כמה פעמים
צריך לשלוח אות A כדי להגיע ל-EIP בדיוק איפה נמצא EIP למה כדי ששם אני אני אוכל לשתול את הכתובת הבאה לביצוע שאני רוצה.
השאלה היא כמה פעמים צריך לשלוח אות A. אז כדי שיהיה לנו יותר קל, מביאים לנו סקריפט מאוד מאוד נחמד. הנה, דרך אגב, הכתובת מוכנה.
אפשר לקחת אותה, את הכתובת הזאת, ולעשות רימור דסקטופ, שולחן עבודה מרוחק לקורבן שלנו. הנה, כאן אנחנו עושים רימור דסקטופ, מתחברים לקורבן.
מה קרה לו? הנה, התחברנו לקורבן. שימו לב, יש לנו פה VPN מחובר, יש לנו רימור דסקטופ לקורבן, וכאן נרשום את כל הפקודות שלנו.
אוקיי, בואו נריץ את הקורבן קודם כול. אנחנו צריכים לעשות פה Run as Administator. בתוך התוכנה לפתוח את הקובץ שלנו של השרת שנמצא בדסקטופ. זה למעשה המעבדה שלי, שבה אני מתרגל את התקיפה, וכשהיא תהיה מוכנה, אני אשלח את הקוד של התקיפה לשרת האמיתי ואשתלט עליו.
גדול יותר, הנה, זה יותר גדול, ועושים דיבאג run. הנה, השרת עובד. אז עשיתי פייל open, פתחתי אותו, ועשיתי לו run.
יופי, יש לי שרת שעובד. יפה, זאת הכתובת שלו, זה הקורבן שלי, אני באתגר הראשון, פאזינג כבר עשינו. דרך אגב, לא לשכוח לעשות את זה, כי פתחנו הכל מחדש.
אז כאן ב-RDP צריך להריץ את הפקודה, שמגדירה את הסקריפט של מונה, זה סקריפט שהולכים להיעזר בו בהמשך. הנה, הוא מגדיר לו איפה לעבוד ואני חוזר חזרה לחלון שלי.
אוקיי, אז פאזינג עשינו, גילינו שיש באג, גילינו שאלפיים פעם לשלוח סימן זה מקריס אותו, זה מה שעשינו בהרצאה הקודמת, אני לא אחזור על זה.
עכשיו אנחנו רוצים להשתלט על EIP ויש לנו פה סקריפט שיעזור לנו. בואו נראה, ניקח את זה, נעתיק את זה ונקרא לו exploit py. אוקיי, אני עושה קובץ חדש, create document empty file, פלויט py ככה הם ביקשו שנקרא לו, יכולנו גם לקרוא לו בכל שם אחר ועושים אדיט, מכניסים פה את הסקריפט, שימו לב יש פה את ה-IP
שלי כבר בתוך הסקריפט, פורט 1137, זה משתנה עזר, בואו נקפוץ לסוף הסקריפט ונראה מה קורה כאן, קודם כל הוא מנסה, איפה שהתראי, הוא מנסה לפתוח תקשורת מול משתנה IP, שזה המשתנה IP, מול פורט מסוים, מול פורט מסוים, זה IP ופורט משתנים, וכאן הוא פותח מולם סוקט.
סוקט זה בעצם התחברות. מדפיס לי על המסך, מתחבר סנדינג איבל באפר. שולח את הבאפר המרושע. באפר זה למעשה חוצץ או מאגר כזה של אותיות וסימנים.
ופה מתבצעת שליחה של באפר לתוך הסוקט הזה שפתחנו s.send. פתחנו סוקט ובסוקט הזה שולחים משתנה באפר נשלח לשם.
זה השם של המשתנה והוא כותב לי done. אם הוא כתב done, הוא הצליח, אם יש קריסה, אם הוא נופל, אז מה שקורה שהוא נופל לכאן לאקספשן, טריי וקאץ', אתם רואים מנסה ואם הוא לא מצליח לשלוח אז הוא כותב כנות קונקט.
טוב, השאלה זה מה הבאפר הזה, מה זה המשתנה הזה באפר? או, המשתנה הזה באפר היה לנו לפני כן בהרצאה קודמת, אמרנו שבאפר זה aaa ככה, המון המון פעמים זה היה 100, 200, 300, 400, 500, כל פעם הוספנו a.
עכשיו במקום לשלוח את הבאפר הזה רק אות A אנחנו מחלקים אותו לא יודע לכמה A פה אני רוצה לשלוח 1, 2, 3, 4 B ופה אני רוצה לשלוח C כאשר ה-B הזה אני רוצה שהוא ייכנס לתוך EIP זאת אומרת אני רוצה להבין כמה אותיות A מגיעות לפני ה-EIP אחרי שאני אגלה את זה אני רוצה לשתול בתוך EIP את ה-B ואחרי שאני שותל ב-EIP באוגר של הפקודה הבאה
לביצוע אני אחרי זה רוצה לשתול C, מה זה ה-C? זה יהיה הפיילורד שלי אז למעשה אני רוצה כזה דבר הדבר הזה הולך להיות פה, לחלק הזה זה סתם דריסה מפגרת, קוראים לה אוברפלואו אחרי זה EIP, זה אוגר EIP ואחרי זה כאן מתחיל הפיילורד פיילורד זה בעצם הפצצה שלי, MSF קונסול, כן?
זוכרים? MSF קונסול, MSF ונום כל אלו שמייצרים לנו את הקוד הזדוני שלי. אז אני רוצה לדעת כמה פעמים צריך לשתול פה אות A עד שאנחנו מגיעים בדיוק למקום שייכנס לתוך EIP.
הרי לפני כן עשינו הכל אות A בלי הבחנה. עכשיו אני רוצה לדעת כמה פעמים נכנסת אות A לפני שמגיעים למקום שבו יש את הכתובת של EIP ואחרי זה אני רוצה בהמשך שיהיה לי מקום ל-payload שלי, לפצצה. ומה אני אגיד ל-EIP?
לבצע את הפיילורד. זאת אומרת, אני אשלח לו את ה-Aים שידרסו את הכל, אחרי זה אני אשלח לו את ה-EIP שיגיד לו מה לבצע, ומה אני אגיד לו לבצע? את הפיילורד שלי.
זאת המטרה בגדול. אנחנו ניכנס לכל מיני פרטים. השאלה זה כמה פעמים פה צריכה להיות אות A. אני לא יודע, 1913 או 1822, מאיפה אני יודע? אני עד עכשיו שלחתי הכל Aים, וראיתי שאם אני שולח 2,000 ומשהו Aים, זה נכנס ל-EIP, ככה אני גיליתי שיש לי אפשרות בכלל לתקוף אותו. עכשיו שאלה, כמה בדיוק Aים צריך?
אוקיי, אז איך אנחנו נגלה כמה Aים צריך? איך אנחנו נעשה את הדבר הזה? אנחנו נעשה דבר פשוט, כמו שהם כותבים לנו כאן. אנחנו נעשה פאטרן ייחודי, אנחנו לא נרשום A או B או C, אנחנו נרשום A1, A2, A3, וככה נגלה איזה מספר ייפול לנו על EIP.
אנחנו מריצים את הדבר הזה, לא 600 אלא יותר אנחנו צריכים כי זה נפל ב-2000 אז בוא נלך לכאן ונעשה דבר כזה נעשה length נניח של 2400 נכון זה נפל ב-2000 והם כותבים לנו פה תעשה 400 bytes longer יותר ארוך מאשר הנפילה זוכרים הנפילה הייתה סביב 2000 נעשה 2400 הם סתם נותנים לנו פה 600 כדי לבדוק שאנחנו קוראים הוראות כמו שצריך אז אנחנו
מפעילים פה אלה 2400 גם אני יכול לבדוק כאן תסתכלו פה נכנסתי לכאן למעלה תראו פה למעלה ל-right apps ופתחתי את הלינק הראשון ואני רואה פה גם שהוא יוצר את ה-MSF pattern 2400 אז אני מפעיל את ה-MSF pattern הזה 2400 עושה paste והנה הוא יוצר לי דפוס מה זה הפאטרן