PimpMyRide

נכתב על ידי Yaakov Cohen

PimpMyRide

בואו נתחיל, קיבלנו קובץ jar garage.jar. הוצאנו את הקוד שלו בעזרת האתר הזה. ניתן למצוא את הקבצים כאן.

שמנו לב שהקובץ jar הכיל גם את הקוד של הלקוח וגם את הקוש של השרת.

 

בואו נסתכל בקוד של השרת. אנחנו רואים שכאשר הלקוח בוחר באופציה [3] Save garage השרת מבצע סרליזציה לאובייקט של החנייה ושולח את זה למשתמש:

 

ואז הלוקח לוקח את המערך ושומר את זה לקובץ בשם "garage":

 

וכאשר הלקוח בוחר באופציה [2] Load existing garage זה לוקח את הקובץ של החנייה ושולח לשרת:

 

השרת לוקח את המידע שהתקבל מבצע סרליזציה לאובייקט חנייה בלי לבצע שום בדיקה:

 

במחקלה garage אפשר לראות אובייקט פרטי private Employee garageManager; שאף פעם לא מקבל ערך. בתרשים זרימה של הקוד במחלקת garageManager אנו רואים שהפונקציה readObject כתובה עם אימפלמנטציה מותאמת, הפונקציה הזאת נקראית כאשר אובייקת עובר סרליזציה:

 

אם רק היינו יכולים ליצור garageManager ולשנות את closeMessageFile מ-close.txt ל-/flag.txt...

רק רגע, אנחנו כן יכולים!

אז התוכנית היא כזאת:

  1. ליצור אובייקט חנייה עם garageManager ערוך.
  2. לשלוח את זה לשרת. התהליך סרליזציה ב-garageManager יקרא /flag.txt ב-closeMessage.
  3. נשמור את החנייה לקובץ.
  4. נזין את הדגל.

ערכנו את אובייקט החנייה:

 

ייצרנו אובייקט חנייה חדש:

 

שלחנו אותו לשרת: [2] Load existing garage, וקיבלנו מהשרת אובייקט חדש: [3] Save garage.

בקובץ מצאנו את הדגל: BSidesTLV{I_Am_Inspector_Gadget}.

Success