כתיבת קוד — שיעור 46
ASLR, PIE ו-Canary Bypass
כל 2 משימות הקוד שנשמרו מהשיעור מופיעות כאן, עם דרישות, דוגמאות וקוד פתיחה. אפשר לכתוב פתרון בעורך המקומי וללחוץ על „בדיקת AI” לקבלת ציון, רמזים והערות.
T3 · בינוני350 נק'~15 דק'analysis
קריאת הגנות מ-readelf
נתון פלט readelf של בינארי. האם הגנת NX (stack לא-ניתן-להרצה) מופעלת? ענה 'yes' או 'no'.
readelf על הבינארי מראה:
ELF Header -> Type: EXEC
Program Header -> GNU_STACK flags: RWE
דוגמאות
GNU_STACK flags: RW → NX מופעל (yes)
הפתרון נשמר מקומית אוטומטית.
T4 · מתקדם450 נק'~25 דק'build
הקשחת קוד פגיע (Hardening)
הפונקציה הבאה פגיעה ל-Stack Buffer Overflow כי scanf("%s") אינו חסום. כתוב גרסה *מוקשחת* שקולטת בבטחה לכל היותר 15 תווים ל-buffer בגודל 16, ומדפיסה 'Hi <name>'. קלט ארוך ייחתך בבטחה במקום לדרוס את ה-stack.
הקוד הפגיע:
void greet(){
char name[16];
scanf("%s", name); // ללא גבול -> Stack Buffer Overflow
printf("Hi %s\n", name);
}
דוגמאות
Alice → Hi Alice
AAAA...(100 תווים) → Hi AAAAAAAAAAAAAAA (15, בלי crash)
הפתרון נשמר מקומית אוטומטית.