
הטקסט המלא של הדקות הראשונות בהרצאה «מציאת כתובת סטטית להרצת קוד מתוך ה-STACK» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
שלום לכולם, אנחנו ממשיכים עם הבאפר אוברפלואו. ראינו כמה סרטים עד עכשיו של באפר אוברפלואו, הצלחנו להבין מה קורה בדיוק בתוכנה, הצלחנו לבנות את הפאזר שלנו, לאחר מכן הצלחנו לייעל אותו ולשלוט על ה-EAB.
שימו לב, בו הצלחנו לשלוט על ה-EAB באמצעות התו שה-X הדצימאלי שלו זה 42. לאחר מכן גם התפטרנו מכל התווים הרעים שיכולים להזיק לנו לבאפר, שמבצעים כל מיני טרמינט, מסיימים את הסטרינג שלנו בגלל שהמשמעות שלהם זה לסיים העתקה של קוד ב־C של התווים של הסטרינג ב־C,
או פוסט ריקווסט של ה־HTTP שהוא גם סוג של טרמינט. הצלחנו להעיף את כולם ולהגיע למצב שאנחנו יכולים להריץ את הבאפר שלנו ושהוא יישלח כולו אל המטרה.
הדבר הבא זה לנסות לגרום ל-EIP שלנו, שזו המשמעות של ה-EIP כמו שאמרנו, ההוראה הבאה שקוד שלנו אמור לבצע. אנחנו רוצים לגרום ל-EIP שלנו להצביע על החלק בזיכרון ששם התחיל השל קוד שלנו.
אנחנו יכולים למנף פה משהו שנקרא Jump ESP. Jump ESP זאת הוראה באסמבלר שכל משמעותה זה לקפוץ אל ה-ESP. ראינו שב-ESP שלנו אנחנו יכולים להכניס לשם את השייל קוד.
כן, קודם ראינו את כל התווים שהצלחנו להיכנס אליהם ולראות מה קורה בדיוק ב-ESP. אנחנו יכולים להגיד שההוראה הבאה, ה-EAP יצביע על ההוראה הבאה, זה לקפוץ אל ה-ESP.
הייתי יכול לחשוב, כמו שכבר אמרנו, שאם פה ב-EAP אני פשוט אתן את הכתובת של ה-ESP, אז זה לא יעזור לנו, כן? כי כל פעם ה-ESP, כל הרצאה של הסינקבריזה ESP משתנה.
זה לא יעזור אם אנחנו פה ב-EAP נגיד לו קפוץ לכתובת הזאת ואז ברגע שתקפוץ לכתובת הזאת תבצע את מה שניתן לך שם, זה יכול לשל קוד, אבל זה לא עוזר כי כל פעם ה-ESP משתנה.
אנחנו צריכים למצוא כתובת שהיא סטטית, שהיא לא משתנה ושאין בה תווים רעים, bad characters, ושהיא לא מוגנת בכל מיני טקשן של randomize או ASLR או DEP, זה כל מיני מנגנונים במערכת ההפעלה שבאים ומנסים למנוע מצב של buffer overflow על ידי נתינה כתובות פנדומליות.
בואו נראה, בואו ננסה למצוא את המודול, יש לי פה בעליון איתי, אני יכול להיכנס למודולים שנטענו ברגע שהרצתי את הסינקבריז, אז מונה מודולס, אני לוחץ על זה, זה כבר גול, אז אני יכול לראות פה, כן, אני צריך לחפש את הסינקבריז שלי,
כן, כל המודולים שנטענו פה, למעשה הסינקבריז משתמש בהם בשביל ההרצאה שלו, שימו לב יש לי פה את הסינק בריז סינק ברס נקודה אי אקסי שבאמת קודם לא הסברתי פה פה זה הכתובת שממנה מתחיל המודול הבייס כתובת הטופ כן הגודל של
הכתובת בסייז יש לי פה את הבייס אדרס ואת הטופ אדרס שהמודולים האלה יכולים להשתמש בהם את הגודל של המודול יש לי פה כל מיני דגלים למשל כמו asr אוסף seh שאמורים לבוא מנסות למנוע את ה-Buffer Overflow.
ה-eSLR זה מנגנון בווינדוס, יחסית ווינדוס 7 זה התחיל שבא ומנסה למנוע את ההתקפות של Buffer Overflow. אז אם אני רואה פה טרום, זה אומר שאני לא יכול לבצע את ההתקפה, אבל אראה פה את ה-Sync Breeze הזה, אני רואה שהכל פה False,
כן, אז כביכול זה מודול שמתאים לי. בתוך המודול הזה אני אצטרך למצוא את הכתובת הסטטית, כתובת זיכרון סטטית, כמו למשל Jump ESP, זאת הוראה באסמבלר צריך לראות אם יש בתוך הדבר הזה את ההוראה הזאת ואז ברגע שאני אגיד ל-EAP פרוץ לשם אז תמיד הוא יקפוץ
לכתובת שהיא סטטית ואז לא תהיה בעיה להפעיל את השל קוד אבל מה הבעיה פה? נכון אמנם פרוטקשן בפולס אבל שימו לב הוא מתחיל פה ב-0,0 ואמרנו ש-0,0 זה לא טוב כן? כל הטווח כתובות זה 0,0 פה 0, 0, 0, 0, 0, 0, 0. תשימו לב, הטווח הזה שסימנתי פה,
כן, כן, ה-0, 0 הראשונים, כמו שאתם זוכרים, זה נקרא bad character, תווים רעים, כן, שאמורים, אני זוכר נכון, את ההעתקה של ה-string ב-C, כן, היו שם כמה תווים רעים, איזה 49 תווים שהיינו צריכים להסיר אותם מהבאפר שלנו, כן, שימו, יש את הסרטון הזה שאני מראה איך כל פעם אני מריץ את התוכנה,
ואז אני רואה בדאמפ איפה התו שחתך לי את כל ההרצאה ותקע לי אותה, ואז הסרתי אותו והמשכנו הלאה עד שמצאנו את כל התווים הרעים. שימו לב, הטווח כתובות הזה הוא לא טוב לי כי יש בו את ה-00.
אז בואו נחפש משהו אחר. יש פה את הליב SPP, גדי אלאל. שימו לב, באמת הכל פה פולס מבחינת הפרוטקשן, זה מצוין לי, וגם אין לי פה כתובת שמתחילה ב-00, זה 1,0,0 ואין בעיה מבחינת תווים רעים בכתובות האלה, כן, שימו לב שאתה עובר 0,0 אמנם יש לי פה
אבל לא נמצא בהתחלה של הכתובות, כן, זה אומר שתסתכל לפי ההתחלה ואם יש לי 0,0 בהמשך כמו פה ופה ופה אין בעיה איתו, כן, כי הוא מתייחס למספר הגדול.
אז עכשיו אחרי שמצאתי מודול שנטען בתוך הסינקבריז שמתאים לי גם מבחינת פרוטקשן שלא קיים, כן הפרוטקשן הזה אומר לבצע רנדומיזציה לכתובות ומצוין הוא פה לא קיים וגם מבחינת תווים רעים בכתובות אין לי.
שלב הבא זה למצוא הוראת אסמבלר שהמודול הזה ישתמש בה כדי לקפוץ לעוגר של ה-ESP של ראש המחסנית בואו נחזור לכלי לינוקס שלנו ואני יכול גם לחפש אותו פה אבל פה אצטרך לחפש בכל המודולים.
קודם כל רוצה למצוא את הטובת של ההוראה לאחר מכן למקד אותו לחפש אותה רק בליב spp בואו נעשה את זה יש כלי שנקרא msf אז זה משל ניכנס אליו פה בכלי הזה