כתיבת קוד — שיעור 40
Stack Buffer Overflow
כל 2 משימות הקוד שנשמרו מהשיעור מופיעות כאן, עם דרישות, דוגמאות וקוד פתיחה. אפשר לכתוב פתרון בעורך המקומי וללחוץ על „בדיקת AI” לקבלת ציון, רמזים והערות.
T4 · מתקדם500 נק'~25 דק'analysis
Offset לכתובת החזרה מ-Disassembly
בהינתן ה-disassembly של vuln() (char buf[80], קומפל ב--O0 -fno-stack-protector), חשב כמה בתים מתחילת buf יש עד כתובת החזרה (saved RIP). רמז: buf נטען מ-rbp במרחק המופיע ב-lea; אחריו 8 בתים של saved rbp ואז כתובת החזרה. הגש מספר עשרוני.
; vuln(): char buf[80]; read(0,buf,300);
lea -0x50(%rbp),%rax ; כתובת buf
...
call read@plt
דוגמאות
buf ב-rbp-0x50 → offset = 0x50 + 8
הפתרון נשמר מקומית אוטומטית.
T3 · בינוני300 נק'~12 דק'analysis
זיהוי מיטיגציה מ-Disassembly
ב-disassembly של פונקציה מוגנת מופיע `mov %fs:0x28,%rax` בכניסה, והשוואה לפני ה-ret שקופצת ל-__stack_chk_fail אם הערך השתנה. איזו מיטיגציה זו?
; פונקציה מוגנת (disassembly חלקי):
mov %fs:0x28,%rax ; טעינת ה-canary לתוך המסגרת
...
; לפני ret: השוואת ה-canary; אם שונה -> __stack_chk_fail
(a) NX (Non-Executable Stack)
(b) Stack Canary
(c) ASLR
(d) PIE
דוגמאות
(פורמט) → אות, למשל b
הפתרון נשמר מקומית אוטומטית.