כתיבת קוד — שיעור 42
Format String Exploitation
כל 2 משימות הקוד שנשמרו מהשיעור מופיעות כאן, עם דרישות, דוגמאות וקוד פתיחה. אפשר לכתוב פתרון בעורך המקומי וללחוץ על „בדיקת AI” לקבלת ציון, רמזים והערות.
T4 · מתקדם450 נק'~28 דק'algorithmic
סורק פגיעויות Format String
ממש find_fmt_bugs(lines) שמזהה פגיעויות format-string: קריאות ל-printf/fprintf/sprintf/snprintf/syslog שבהן ארגומנט ה-*format* אינו מחרוזת-ליטרל (מתחיל ב-") אלא משתנה נשלט-משתמש. מיקום ה-format: printf→ראשון, fprintf/sprintf/syslog→שני, snprintf→שלישי. החזר (מספר_שורה, שם_פונקציה) לכל פגיעות.
דוגמאות
find_fmt_bugs(['printf(user_input);']) → [(1, 'printf')]
find_fmt_bugs(['printf("%s", user_input);']) → [] # ליטרל = בטוח
הפתרון נשמר מקומית אוטומטית.
T3 · בינוני250 נק'~10 דק'analysis
סיווג הפגיעות
קוד מכיל את הקריאה `printf(user_input);` כאשר user_input נשלט על-ידי המשתמש. איזו פגיעות זו, שמאפשרת גם קריאה שרירותית (%x/%s) וגם כתיבה שרירותית (%n)?
(a) Format String
(b) Integer Overflow
(c) Use-After-Free
(d) SQL Injection
דוגמאות
(פורמט) → אות
הפתרון נשמר מקומית אוטומטית.