pwnable.kr ו-pwnable.tw מוסבר - אתגרי ניצול בינארי קלאסיים¶
אחרי שלמדתם מה זה buffer overflow בתיאוריה, ואולי אפילו ניסיתם את זה על משהו כמו Narnia ב-OverTheWire, מגיע השלב שבו אתם רוצים להוכיח לעצמכם שאתם באמת מבינים ניצול בינארי (binary exploitation) - לא רק לשנן איך זה עובד, אלא לשבת מול בינארי אמיתי ולפרק אותו. בשביל השלב הזה יש שני אתרים ותיקים וידועים בעולם ה-CTF - pwnable.kr ו-pwnable.tw.
איך זה עובד בפועל - מודל ה-SSH¶
בניגוד לרוב הפלטפורמות המודרניות שנותנות לכם ממשק ווב נוח, שני האתרים האלה עובדים בשיטה קלאסית ופשוטה - SSH. אתם מקבלים שם משתמש וסיסמה (או מפתח), מתחברים לשרת האתגר דרך טרמינל, ופשוט נמצאים שם. בתיקייה שלכם תמצאו את קובץ הבינארי של האתגר, ולפעמים גם את קוד המקור בשפת C.
המטרה בכל אתגר היא זהה - יש קובץ דגל שקריא רק למשתמש אחר במערכת, בדרך כלל משתמש עם הרשאות גבוהות יותר משלכם. אתם צריכים למצוא חולשה בבינארי - אולי buffer overflow, אולי בעיית format string, אולי שגיאת לוגיקה - ולנצל אותה כדי להריץ קוד בהרשאות של אותו משתמש אחר, ומשם לקרוא את הדגל. זו חוויה הרבה יותר קרובה למה שקורה במציאות מאשר סתם להריץ exploit מוכן על מטרה מרוחקת - אתם ממש חיים בתוך המערכת שאתם תוקפים.
pwnable.kr וה-Toddler's Bottle - הכניסה הכי עדינה שיש¶
הקטגוריה הראשונה שכל מי שמתחיל ב-pwnable.kr נתקל בה נקראת Toddler's Bottle, ולא סתם - זו כניסה מתחשבת במיוחד לעולם ניצול הבינארי. האתגרים שם בנויים בעדינות, עם הסברים מספיקים כדי שלא תרגישו אבודים, אבל עם מספיק אתגר אמיתי כדי ללמוד. חלק מהאתגרים הראשונים בכלל לא דורשים כתיבת exploit מורכב - הם מלמדים אתכם לקרוא קוד C בעיון, להבין הרשאות קבצים בלינוקס, ולחשוב כמו תוקף לפני שאתם בכלל נוגעים בכלים כמו gdb או pwntools.
זה בדיוק מה שהופך את pwnable.kr לצעד טבעי אחרי לימוד יסודות ה-C ו-buffer overflow - הוא לא זורק אתכם למים העמוקים, אלא בונה אתכם בהדרגה אמיתית, אתגר אחרי אתגר.
pwnable.tw - קרוב יותר לעולם ה-CTF האמיתי¶
אם pwnable.kr הוא בית ספר, pwnable.tw הוא כבר הצעד הבא - האתגרים שם נוטים להיות קרובים יותר לסגנון שתפגשו בתחרויות CTF אמיתיות ובבינאריים מהעולם האמיתי. תמצאו שם פחות "חידות מלמדות" ויותר תרחישים שמדמים תוכנות אמיתיות, עם הגנות מודרניות כמו ASLR ו-stack canaries שאתם צריכים לעקוף. זה דורש כבר הבנה טובה יותר של הכלים - pwntools, gdb עם תוספים כמו pwndbg, וידע בסיסי באדריכלות x86 ו-x86-64.
המעבר מ-pwnable.kr ל-pwnable.tw הוא טבעי - קודם בונים ביטחון בקריאת קוד ובניצול בסיסי, ואז עוברים לתרגילים שמדמים איך זה נראה כשמערכות הגנה מודרניות מנסות לעצור אתכם.
מערכת נקודות ומה קורה אחרי¶
בשני האתרים יש מערכת נקודות - כל אתגר שווה כמות מסוימת של נקודות בהתאם לרמת הקושי שלו, ויש לוח מובילים שמראה מי פתר הכי הרבה. זה לא המטרה העיקרית, אבל זה נותן תחושת התקדמות נחמדה ומניע לחזור ולנסות אתגרים שקצת יותר קשים ממה שאתם רגילים אליהם.
הדרך הנכונה להתייחס לצמד הזה היא כתחנה אמצעית - לא ההתחלה המוחלטת (זו צריכה להיות הבנה בסיסית של C ותיאוריית buffer overflow, למשל דרך Narnia), ולא הסוף. אחרי שאתם מרגישים בנוח שם, מכונות ה-Pwn ב-HackTheBox הן היעד הטבעי הבא - שם החולשות משולבות בתוך מכונות שלמות עם שירותים אחרים, בלי שמישהו מצביע לכם בדיוק על הבינארי הבעייתי. אם אתם רוצים ליווי מסודר שבונה את הבסיס הזה צעד אחר צעד, תבנו את הבסיס עם קורס בדיקות החדירה שלנו.
ניצול בינארי הוא תחום שדורש סבלנות - אתם תבלו זמן על אתגר אחד יותר משהייתם רוצים, ותלמדו הכי הרבה דווקא מהתקיעות האלה. אם אתם נתקעים ורוצים לדבר עם אנשים שעברו את אותו אתגר, יש לזה מקום.
לסיכום¶
pwnable.kr ו-pwnable.tw הם שני אתרים קלאסיים שמלמדים ניצול בינארי בשיטה הכי ישירה שיש - SSH לשרת, בינארי אמיתי, ודגל שצריך להרוויח בזיעה. תתחילו ב-Toddler's Bottle כדי לבנות ביטחון, תמשיכו ל-pwnable.tw כשאתם מוכנים לאתגרים קרובים יותר לעולם האמיתי, ותזכרו שהמטרה היא להבין לעומק, לא רק להעתיק exploit ולהריץ אותו.