14-08-2005, 19:35
|
|
|
חבר מתאריך: 09.08.02
הודעות: 26
|
|
אממ
shellcode כשמו הוא, נועד כדי להריץ shell.
בעקרון המטרה של התקיפה, היא לשנות את הערך של
eip
שבו נמצאת הכתובת של הפקודה הבאה לביצוע.
אנחנו צריכים להציף את המחסנית של התוכנית, עם מחרוזת (בגודל מסוים) שכוללת כמות מסויימת של nop בהתחלה (כדי שגם אם לא נדע את הכתובת בדיוק של ה shellcode שלנו, עדיין נוכל לתת לו כתובת קרובה מספיק) קוד ה shellcode באמצע, וכתובת ה SHELLCODE (או כתובת קרוה מספיק, בסוף)
כשניצור את המרוזת ניצור אותה ככה שנעשה קודם כל CAST ל LONG ונתחיל למלא את המחרוזת בכתובת המסויימת שמצאנו.
אחר כך ניגש להתחלה ונתחיל למלא את המחרוזת בכמות NOP מסויימים (לא משנה כמה) ולבסוף
(באמצע) נעתיק את הקוד שלנו.
SHELLCODE הוא קוד אסמבלי שהומר לקוד הקסדצימלי. (בעזרת תוכנית יוניקס ששמה OBJDUMP לדוגמא)
לפעמים קוד האסמבלי יכלול קריאה ל SETUID, או SETREUID לפני הרצת הSHELL
(משפחת EXEC) אך המטרה העיקרית שלנו היא לגרום לתוכנית בעלת הרשאת ROOT להריץ את הקוד ולקבל את אותה ההרשאה לSHELL שלנו. (לדוגמא ניצור את המחרוזת בעזרת תוכנית אחת, ואז ניתן אותה כארגומנט לתוכנית אחרת(
ד"א שים לב מה קורה כאשר יש SEGMENTATION FAULT:
פשוט (לדוגמא כשאנחנו מנסים להכניס למחרוזת שיכולה להכיל רק 30, 60 A)
ערך שיועתק אל IP,(שוב הכתובת הבאה לביצוע) יהיה 0X41414141 A בהקסדצימל, שהיא כמובן כתובל לא נגישה.
תראה שכאשר תעתיק ל EIP כתובת קיימת, התוכנית תעשה פלאים (:
אמממממ זה על רגל אחת (אולי יש כמה דברים שלא הכי הסברתי נכון....אבל הרבה זמן לא עברתי על זה)
בקשר למדריכים:
יש לך עשרות מדריכים ברשת, ואם בכל זאת את רוצה ספר, אז יש אחד שקוראים לו
THE SHELLCODERS HANDBOOK.
שים לב שצריך ידע מוקדם ב C וקצת ASM.
אם אתה רוצה נושא חדש בC הייתי ממליץ לך ללמוד לתכנת ליוניקס (בהנחה שאתה משתמש)
ספר מומלץ הוא ADVANCE PROGRAMMING IN THE UNIX ENVIRONMENT
חוץ מזה THE C PROGRAMMING LANGUAGE אף פעם לא מזיק,
|