אוקיי חברה מתנצל אבל אחרי שראיתי שהגדר של ניסוח מדרכים באמצעות AI נהיה הפקר גם אני החלטתי לחסוך זמן
וכמובן שלא סמכתי עליו לחלוטין אלא בדקתי כל פקודה שהוא הביא לראות אם היא תקינה ועובדת כמו שצריך
היום נרד לשטח ונבדוק תרחיש אמיתי של תקיפת קופסה שחורה - Black Box (בלק בוקס).
כלומר תקיפה די על עיוור אנחנו לא בדקנו מראש דפים פגיעים יותר או פחות אלא ישר באנו לנגח את האתר
במצב כזה, אנחנו מגיעים לאתר כהאקרים זרים מהאינטרנט. אין לנו שם משתמש, סיסמה או קוקיז - Cookies (קוקיז) שיאפשרו לנו להיכנס לעמודים הפנימיים. השער היחיד שפתוח בפנינו הוא עמוד הלוגין - Login (לוגין) הציבורי.
אנחנו הולכים לנצל פגיעות SQL Injection (סקוול אינג'קשן) בשדה שם המשתמש (username) של טופס ההתחברות, כדי לעקוף את מנגנון האבטחה ולהכריח את השרת להוציא לנו את כל המידע הרגיש החוצה - ישירות למסך של קאלי (Kali).
דרישת קדם: הגדרת רמת האבטחה במעבדה
לפני שמתחילים, עלינו לוודא שהמעבדה נמצאת במצב הפגיע ביותר שלה.
באתר של Mutillidae (מוטילידיי), גשו לתפריט העליון, חפשו את הכפתור Toggle Security (טוגל סקיוריטי) ולחצו עליו עד שתראו שרמת האבטחה שונה למצב 0 (Security Level: 0). מצב זה מדמה אתר אמיתי שנכתב בצורה רשלנית לחלוטין וללא שום הגנות על שדות הקלט.
שלב 1: מיפוי ובדיקת פגיעות
הפנינו את הכלי ישירות אל עמוד הלוגין. מכיוון שטופס ההתחברות נשלח בשיטת POST (פוסט) שבה הנתונים חבויים בגוף הבקשה, הגדרנו את הפרמטרים שלו בעזרת הדגל --data.
פתח את הטרמינל והרץ את הפקודה הבאה:
sqlmap -u "https://127.0.0.1/index.php?page=login.php" --data="username=test&password=test&login-php-submit-button=Login" -p username --dbms=mysql --batch --dbs
פירוט הפרמטרים בפקודה:
-u (קיצור של URL - יוראל): מגדיר את כתובת היעד הציבורית של עמוד הלוגין שאותו אנחנו רוצים לבדוק.
--data (דאטה): מכיל את השדות שנשלחים בטופס ה-POST (פוסט). הכנסנו ערכי דמי (username=test&password=test) פלוס השם של כפתור השליחה כדי שהשרת יחשוב שמשתמש אמיתי לחץ עליו.
-p username (פרמטר): פקודה מפורשת לכלי לבדוק רק את השדה של שם המשתמש, ולא לבזבז זמן על בדיקת שדה הסיסמה או לחצן השליחה.
--dbms=mysql (די-בי-אמ-אס): אומר לכלי שמסד הנתונים מאחורי הקלעים הוא MySQL (מאי-סקוול). זה חוסך בדיקות מיותרות של סוגי מסדי נתונים אחרים כמו אורקל או סקוול-סרבר.
--batch (באטץ'): פקודה שאומרת לכלי לעבוד במצב אוטומטי - לבחור תמיד באפשרות ברירת המחדל (Yes - יס) ולא לעצור באמצע הסריקה כדי לשאול אותנו שאלות.
--dbs (דאטאבייסז): הוראה מפורשת שאומרת: אם מצאת פגיעות, תשלוף מיד את רשימת בסיסי הנתונים הקיימים בשרת.
מה קרה כאן מאחורי הקלעים?
השרת ניסה לייצר עבור הכלי עוגיית אורח זמנית בשם PHPSESSID (פי-אייץ'-פי-סס-אי-די). הכלי אישר אותה אוטומטית כדי לשמור על קשר רציף מול האתר. הוא זיהה ששדה ה-username פגיע, ובסיום הסריקה הציג לנו רשימה של בסיסי נתונים. זיהינו שהבסיס המרכזי של האתר נקרא mutillidae (מוטילידיי).
שלב 2: שליפת הטבלאות מתוך בסיס הנתונים
עכשיו כשיש לנו את שם ה-Database (דאטאבייס), אנחנו רוצים לדעת אילו טבלאות קיימות בתוכו כדי למקד את התקיפה. הרצנו את הפקודה הבאה:
sqlmap -u "https://127.0.0.1/index.php?page=login.php" --data="username=test&password=test&login-php-submit-button=Login" -p username --dbms=mysql --batch -D mutillidae --tables
פירוט הפרמטרים החדשים בפקודה:
-D mutillidae (דאטאבייס): מגדיר לכלי באיזה בסיס נתונים ספציפי להתמקד (במקרה שלנו, זה שגילינו בשלב הקודם).
--tables (טייבלז): פקודה לשלוף את שמות כל הטבלאות (ה"מגירות") שנמצאות בתוך אותו בסיס נתונים.
מה קרה כאן מאחורי הקלעים?
הכלי לא סרק את האתר מחדש. הוא טען את נקודת ההזרקה ששמר בזיכרון מהסבב הקודם (טכניקה שנקראת Resumed Session - ריזומד סשן). הוא שלח שאילתה ששלפה רשימה של 13 טבלאות. מתוכן, סימנו את הטבלה המעניינת ביותר עבורנו: accounts (אקאונטס), שם שמורים המשתמשים.
שלב 3: מיפוי העמודות בטבלת המשתמשים
לפני שאנחנו מורידים מידע סתם, אנחנו צריכים להבין את המבנה הפנימי של הטבלה שבחרנו. נרצה לדעת אילו טורים (Columns - קולומז) קיימים בה:
sqlmap -u "https://127.0.0.1/index.php?page=login.php" --data="username=test&password=test&login-php-submit-button=Login" -p username --dbms=mysql --batch -D mutillidae -T accounts --columns
פירוט הפרמטרים החדשים בפקודה:
-T accounts (טייבל): מנחה את הכלי להתמקד אך ורק בטבלה הספציפית שנקראת accounts (אקאונטס).
--columns (קולומז): הוראה לשלוף את שמות הטורים (הכותרות) ואת סוגי המידע שיש בטבלה הזו.
מה קרה כאן מאחורי הקלעים?
הכלי חילץ את המבנה וגילה שיש בטבלה 10 עמודות שונות, כולל שדות כמו שם פרטי, סטטוס מנהל, ומה שחשוב לנו באמת: העמודות username (יוזרניים) ו-password (פסוורד).
שלב 4: הורדת המידע (The Dump - הדאמפ)
זהו שלב סגירת המעגל. ביקשנו מהכלי לשלוף רק את שני הטורים שמעניינים אותנו ולרוקן את התוכן שלהם למחשב שלנו:
sqlmap -u "https://127.0.0.1/index.php?page=login.php" --data="username=test&password=test&login-php-submit-button=Login" -p username --dbms=mysql --batch -D mutillidae -T accounts -C username,password --dump
פירוט הפרמטרים החדשים בפקודה:
-C username,password (קולומז): הגדרה מפורשת לשלוף נתונים אך ורק משתי העמודות האלו, כדי לא לבזבז זמן ותעבורה על מידע לא רלוונטי.
--dump (דאמפ): הפקודה שמבצעת את חילוץ הנתונים בפועל והורדתם למסך.
התוצאה הסופית:
מסד הנתונים הריץ לולאה והחזיר פלט נקי של 41 משתמשים רשומים במערכת בטקסט גלוי (Clear Text - קליר טקסט), כולל שם המשתמש והסיסמה של מנהל המערכת (admin / adminpass). בנוסף, המידע נשמר אוטומטית כקובץ בתצורת CSV (סי-אס-וי) בתוך תיקיית הפלט של הכלי בקאלי.
שורה תחתונה לחלק זה: כשעמוד ציבורי כמו לוגין אינו מאובטח (רמת אבטחה 0), הגנות פנימיות כמו עוגיות או בדיקות הרשאות הופכות ללא רלוונטיות. האקר יכול להשיג שליטה מלאה בנתונים מבלי לעבור את דף הבית. בפרק הבא נראה מה עושים כאשר האתר מוגן יותר, ואיך עובדים מול עמודים פנימיים באמצעות עוגיות מהדפדפן (Grey Box Testing - גריי בוקס טסטינג).
ועוד נקודה לציון הבדל בין קופסה אפורה לשחורה הוא
בשחורה אנחנו באים על עיוור בלי קוקיז ותוקפים בדף פגיע
באפורה אנחנו באים עם קוקיז חיבור בהרשאה מסוימת לאתר וממנו מנסים לעלות למעלה בהרשאה
וחברה אם משהו לא ברור הוא לא מובן וכמו כן כל הערה והארה יתקבלו בברכה
מצפה לתגובות כאן