פתרון אתגר protostar|stack3

פתרון אתגר protostar|stack3

הכנה:

אפתור היום את אתגרי protostar, שהם אתגרי אקספלואיטציה בינארית בלינוקס.
סדרת אתגרים זו נמצאת באתר:exploit-exercises.com, שמציג שלל אתגרים באקספלואיטציה בינארית. חוץ מאתגרי protostar.
בשביל לפתור את האתגר, נדרש מכם להוריד מכונה וירטואלית של האתגר ולהתקין אותה.
מומלץ לקרוא לפני קריאת פוסט זה, את הפוסטים הקודמים בקטוגוריית protostar.
 לאחר הקריאה, תוכלו לצפות בפתרון האתגר: https://youtu.be/f1yHRcTkUm0
פיתרון האתגר:
ראשית, נסתכל על קוד המקור שניתן לנו:

View post on imgur.com

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

אנו שמים לב כי ביכולתו של הערך fp, לקרוא לfunction pointer(מצביע לנקודת זיכרון, ששם נמצאת הפונקציה שבתוכנה). ואנו שמים לב לפונקציה win, ששם נמצא ההודעה על פתרון האתגר. המטרה שלנו היא: לגרום לפונקציה win לפעול וכך לקבל את ההודעה על פתרון האתגר.

משום שהתוכנה פגיעה בbuffer overflow, נוכל לכתוב את fp. כפי שזכור לנו שביכולתו לקרוא לfunction pointer ועם הכתובת של הפונקציה win, הוא יוכל לקרוא לפונקצה win.

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

שמתם לב בטח מה הנתון השני, ואם לא כעבור 64 בייטים נשכתב את fp. כיצד נגלה את הנתון השני?, את הנתון השני ניתן לגלות בעזרת התוכנה nm.

התוכנה nm, תראה לנו את כל נקודות הזיכרון שמצביעות לפונקציות בתוכנה. לכן ניתן פקודה nm stack3 , ונסתכל היכן הכתובת של הפונקציה win נמצאת.

להלן התוצאות:

View post on imgur.com

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

לפי מה שאנו יודעים,  נכתוב את הכתובת של הפונקציה win בשיטת סידור הבייטים little endian. ונדאג שיהיו 64 בייטים לפני שימלאו את buffer, כדי שהכתובת של הפונקציה win תשוכתב לfp.

לפניכם הקספלואיט שלנו:

View post on imgur.com

וכך פתרנו את האתגר בהצלחה.

מקווה שנהנתם ולמדתם, אפק.

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *