רודמאפ לפריצת אתרים מתקדמת - מה לומדים אחרי SQLi ו-XSS¶
הגעתם לשלב שבו SQL Injection כבר לא מפחיד אתכם, אתם יודעים לזהות XSS בעיניים עצומות, ועברתם לא מעט זמן ב-Burp Suite עושים ריקון בסיסי. זה שלב מצוין, אבל זה גם השלב שבו הרבה אנשים נתקעים - כי אין מפה ברורה למה עושים אחר כך. אז הנה אחת.
אני כותב את זה כי אני רואה את זה כל הזמן - אנשים שסיימו את היסודות ומתחילים לקפוץ באקראי בין נושאים, בלי סדר, בלי הבנה של איך הדברים מתחברים. זה עובד, אבל זה לוקח פי שלושה זמן ממה שצריך. אז בואו נבנה מסלול הגיוני.
למה בכלל צריך רודמאפ ולא סתם ללמוד "הכל"¶
החולשות המתקדמות לא עצמאיות אחת מהשנייה כמו שהיסודות היו. SQLi ו-XSS אפשר ללמוד כל אחת בנפרד לגמרי. אבל ברגע שעולים שלב, החולשות מתחילות להיות שילובים - חולשה קטנה במקום אחד שמאפשרת חולשה גדולה במקום אחר. בלי סדר לימוד נכון, קשה להבין למה בכלל שתי חולשות "לא קשורות" יוצרות יחד בעיה חמורה. אז יש היגיון בסדר שאני מציע כאן.
שלב ראשון - התקפות אימות והרשאה¶
אחרי היסודות, הכיוון הטבעי הבא הוא לעבור מ"לתקוף את הקוד" ל"לתקוף את הזהות של המשתמש עצמו".
- JWT - JSON Web Tokens. להבין איך טוקנים חתומים עובדים, מה קורה כשאלגוריתם החתימה לא מאומת נכון בצד שרת, ומתי אפשר לזייף טוקן שלם בלי לדעת את המפתח הסודי.
- OAuth 2.0. הפרוטוקול שרוב האתרים משתמשים בו ל"התחברות עם גוגל" ודומיו, מלא בפינות חשוכות - redirect_uri לא מאומת, state חסר, ובעיות קישור חשבונות שמובילות להשתלטות על חשבון של משתמש אחר.
- חולשות ניהול הפעלה - Session Management. מה קורה לטוקן אחרי logout, והאם אפשר לחטוף הפעלה פעילה של מישהו אחר.
שלב שני - התקפות בצד השרת¶
השלב הבא מזיז את המבט מהדפדפן לשרת עצמו, ולאיך שרתים מתקשרים ביניהם.
- SSRF - Server-Side Request Forgery. לגרום לשרת לשלוח בקשות מטעמכם למקומות שהוא לא אמור לגשת אליהם, לפעמים אפילו לרשת הפנימית של הארגון עצמו.
- הברחת בקשות - Request Smuggling. ניצול חוסר התאמה באיך שני שרתים בשרשרת מפרשים את אותה בקשת HTTP, כדי "להבריח" בקשה נוספת שהשרת הראשון לא רואה בכלל.
- Prototype Pollution. חולשה ספציפית ל-JavaScript ו-Node.js שמאפשרת הזרקת תכונות לכל אובייקט באפליקציה דרך פונקציות מיזוג לא זהירות. כתבנו עליה פוסט נפרד כי היא מספיק חשובה בשביל זה.
שלב שלישי - APIs מודרניים ולוגיקה עסקית¶
אחרי שהבנתם את התשתית, הזמן לעבור לאיפה שרוב האתרים המודרניים באמת חיים - APIs מורכבים ולוגיקה עסקית ייחודית לכל אתר.
- GraphQL. משטח תקיפה שונה לגמרי מ-REST - שאילתות מקוננות שמעמיסות על השרת, חשיפת שדות שלא אמורים להיות ציבוריים, ובעיות הרשאה שקל לפספס כי הכל עובר דרך endpoint אחד.
- Race Condition. מה קורה כשכמה בקשות מגיעות במקביל לאותו קטע קוד לפני שהראשונה סיימה לעדכן את המצב - קופון הנחה שאפשר לממש פעמיים, בדיוק באותה מילישנייה.
- פגמים בלוגיקה עסקית. חולשות שאין להן חתימה, אין להן CVE, ואי אפשר לסרוק אותן אוטומטית. הן דורשות שתבינו איך האתר הספציפי הזה אמור לעבוד, ואיפה ההנחות של המפתחים נשברות.
שרשור חולשות - הכישרון שמפריד בין טוב למעולה¶
הדבר החשוב ביותר שאני יכול להגיד לכם על השלב המתקדם הוא זה - החולשות הכי משמעותיות כמעט אף פעם לא נמצאות לבד. תוקף טוב לא מוצא "חולשת SSRF" ועוצר שם. הוא מוצא SSRF שחושף endpoint פנימי, שמכיל טוקן, שמאפשר לו לעקוף אימות, שמוביל בסוף להשתלטות מלאה על המערכת. כל שלב לבד אולי היה נחשב חומרה נמוכה. יחד, זו השתלטות מלאה.
זו בדיוק המיומנות שמפרידה בין מי שעובר על רשימת בדיקות ובין מי שבאמת חושב כמו תוקף.
איך מתרגלים את זה בפועל¶
הרודמאפ הזה חסר ערך בלי תרגול אמיתי, אז הנה איך אני ממליץ לגשת לזה:
- סביבות תרגול מובנות. יש כמה פלטפורמות מוכרות שבנויות בדיוק בשביל זה - מעבדות ממוקדות לכל סוג חולשה, עם דירוג קושי עולה. תעברו עליהן שיטתית לפי הסדר שתיארתי כאן.
- תוכניות באג באונטי. ברגע שאתם מרגישים בטוחים, זו הדרך הכי טובה לתרגל על מערכות אמיתיות, בצורה חוקית ומאושרת, על קוד שלא נבנה בשבילכם.
- קריאת דוחות ציבוריים. חוקרים רבים מפרסמים כתיבה מפורטת על חולשות שמצאו. אין דרך טובה יותר ללמוד שרשור חולשות מאשר לראות איך מישהו אחר עשה את זה בפועל.
איך זה מתחבר למה שבנינו¶
בניתי את קורס פריצת אתרים מתקדם בדיוק לפי הרודמאפ הזה, שלב אחרי שלב - לא כרשימת נושאים אקראית, אלא כמסלול שבו כל נושא בונה על הקודם ומכין אתכם לשלב הבא. אם קראתם עד כאן והתחלתם לזהות נושאים שאתם לא מכירים, זה בדיוק המקום שממשיך מאיפה שהיסודות נגמרו.
ובדיוק כמו בכל שלב אחר בדרך, אל תעשו את זה לבד. יש קהילה שלמה בדיסקורד שעוברת את אותו מסלול, מתייעצת, ומשווה פתרונות.
לסיכום¶
המעבר מיסודות לרמה מתקדמת הוא לא עניין של ללמוד עוד ועוד חולשות באקראי. זה עניין של להבין את הסדר ההגיוני - קודם אימות והרשאה, אחר כך צד שרת, ואז APIs ולוגיקה עסקית - ולתרגל כל שלב לעומק לפני שקופצים הלאה. תעקבו אחרי הרודמאפ, תתאמנו על כל שלב עד שהוא מרגיש טבעי, ותגלו שבשלב מסוים אתם כבר לא לומדים חולשות בודדות אלא רואים את כל התמונה.