PracticU

פריצה לשרת SQL מהאינטרנט - חלק 2

בלי כתוביותעם כתוביות
PracticU › קורס פריצה ומבדקי חדירה לאתרי אינטרנט - בדיקות חוסן לאתרים - Web Pentesting - קורס זה נדרש למבחן ההסמכה היוקרתי OSCP › פריצה לשרת SQL מהאינטרנט - חלק 2
מילון מושגים:
SQL Injection - חולשה שבה קלט זדוני מוחדר לשאילתת SQL, ומאפשר לתוקף לקרוא או לשנות נתונים במסד.
הרשאה - קביעה אילו פעולות ומשאבים מותרים למשתמש או לתהליך לאחר שזהותו אומתה. שולטת במי רשאי לעשות מה.
טבלה - מבנה במסד נתונים שמאחסן נתונים בשורות ועמודות. כל שורה היא רשומה וכל עמודה היא שדה.
עמודה - שדה בטבלת מסד נתונים שמחזיק ערך מסוג מסוים עבור כל שורה, למשל שם או תאריך.
חולשה - פגם או חולשה במערכת או בתוכנה שעלול לאפשר פגיעה באבטחה אם לא יטופל.
שאילתה - בקשה למסד נתונים לשלוף, להוסיף, לעדכן או למחוק נתונים, לרוב בשפת SQL.
סיסמה - מחרוזת תווים סודית שמשמשת לאימות זהות המשתמש בעת כניסה למערכת. ככל שהיא ארוכה ומורכבת יותר, כך קשה יותר לנחש אותה.
פונקציה - קטע קוד בעל שם שמבצע משימה מוגדרת, מקבל ערכי קלט (פרמטרים) ויכול להחזיר תוצאה. מאפשרת לארגן קוד ולהשתמש בו שוב.

פריצה לשרת SQL מהאינטרנט - חלק 2
השיעור ממשיך בנושא SQL Injection ומסביר למה מבנה מסד הנתונים עצמו הופך למידע רגיש כשהגישה אליו נחשפת. המטרה שלו היא להבין מה התוקף יכול לראות, ולמה ההגנה מתמקדת בהרשאות ובפרוצדורות.
מה מסד הנתונים חושף
למסד SQL יש טבלאות מערכת שמתארות את כל האובייקטים שבו, כולל טבלאות, עמודות ומפתחות. המרצה מבחין בין אובייקטים שהמשתמש יצר לבין אובייקטים שהמערכת יצרה. מי שמצליח לקרוא את טבלאות המערכת יכול להבין מה קיים במסד ולזהות טבלאות שמעניינות אותו, למשל טבלת לקוחות שיש בה פרטי תשלום.
השיעור מדגיש שהתוצאות חוזרות לאותו דף שממנו נשלחה הפנייה, ולכן התוקף רואה אותן. המרצה מציין שרובוטים מבצעים סריקות כאלה באופן אוטומטי, וזה מסביר למה חולשה כזאת נמצאת ונוצלת בקלות.
איך מצמצמים את הנזק
1. הרשאה לפרוצדורה בלבד: חשבון האתר מקבל הרשאת הרצה על פרוצדורה אחת, ולא הרשאת קריאה לטבלאות או לטבלאות המערכת. כך גם אם הקלט נפרץ, התוקף לא יכול לקרוא ישירות את מבנה המסד או את הנתונים.
2. פרוצדורה שמחזירה רק מה שצריך: הלוגיקה והשאילתה נמצאים בתוך הפרוצדורה, והאתר רואה רק את התוצאה. כך העמודות הרגישות בטבלה נשארות מחוץ להישג יד של האתר.
3. הגנה גם מפני גניבת פרטי החיבור: המרצה מדגים שאם הצליחו לגנוב את שם המשתמש והסיסמה של חשבון האתר, החשבון מוגבל לפונקציות שהוגדרו לו ולא לטבלאות. ההבדל בין הרשאה לטבלה להרשאה לפרוצדורה הוא ההבדל בין נתון חשוף לנתון מוגן.
4. ניטור פקודות: שימוש ב-SQL Profiler כדי לזהות פקודות חריגות שמגיעות מחשבון האתר. המרצה מציין שאנשי DBA ואבטחת מידע משתמשים בכלי הזה לאיתור בעיות.
שימו לב
הגדרת הרשאות נכונה מצמצמת את הנזק גם כשהקלט עצמו נפרץ. בסוף השיעור תדעו להסביר למפתח למה ההרשאות צריכות להיות מוגבלות לפרוצדורה ולא לטבלאות.
השיעור הבא בקורס: פריצה לשרת SQL מהאינטרנט - חלק 3

פרקי ההרצאה: פריצה לשרת SQL מהאינטרנט - חלק 2

  1. 00:00

    מבוא לטבלאות המערכת של SQL Server

  2. 00:57

    טבלת sys.objects וסינון טבלאות המשתמש

  3. 03:41

    עמודות המערכת וקישורן לטבלה לפי ID

  4. 05:39

    הפקודות שמאחורי הממשק הגרפי

  5. 06:31

    בדיקת השהיה לוודא שפקודה מתבצעת

  6. 08:35

    UNION לחיבור תוצאות של שתי שאילתות

  7. 10:11

    כלי Profiler לבדיקת הפקודה שהשרת מריץ

  8. 12:14

    התאמת מספר העמודות בשאילתות המאוחדות

תמלול ההרצאה: פריצה לשרת SQL מהאינטרנט - חלק 2

הטקסט המלא של הדקות הראשונות בהרצאה «פריצה לשרת SQL מהאינטרנט - חלק 2» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:04

    בסרט הזה אנחנו בעצם נדבר על פקודות של SQL Injection שאפשר לעשות מתוך אתר אינטרנט כדי לשלוף את הנתונים הפנימיים, כרטיסי אשראי, נתונים על המשתמשים.

  2. 00:19

    אז בשביל לעשות את כל זה ובעצם לבנות את השאילתא הזאתי אנחנו צריכים להכיר כמה דברים מאחורי הקלעים, מה שקורה מאחורי הקלעים של SQL. זה למעשה System Objects וכל מיני דברים של המערכת.

  3. 00:34

    אז אנחנו עכשיו נדבר קצת על sql עצמו ואיך הוא בנוי ואחרי זה נבנה מתוך זה שאילתה ששולפת לנו את כל הוויפנוכו של sql ונשלוף עמודות ובסוף אני אספר לכם את הסוף של הסרטון הזה אנחנו נשלוף כרטיס אשראי של הלקוחות מתוך הדאטאבייס שבשום פנים ואופן לא היינו צריכים להגיע לזה פשוט נמצא איפה זה נמצא את זה ונשלוף את זה

  4. 01:01

    בסוף אז איך עובד sql כמה דברים מאחורי הקלעים של sql אז יש לנו קודם סיס אובייקטס מה זה סיס אובייקטס זה טבלת מערכת שנקראת סיס אובייקטס יש לנו גם סרטים סרטים יותר מעמיקים בקורס של sql בדיוק על כל הנושא של הסיסטם וכשלומדים sql זה נראה משעמם ולא מעניין כי זה לא כזה רלוונטי

  5. 01:30

    לsql כביכול לתלמידים של sql אבל ברגע שמתחילים להתעסק בהאקינג זה הדבר הכי חשוב אז סיס אובייקט הוא כולל רשימה של כל האובייקטים שיש במערכת אוקיי של כל מה שיש כולל כל הטבלאות ומה שאנחנו רק רוצים יש פה אוקיי כל המפתחות כל הטבלאות כל מה שאתם יכולים לחשוב עליו עכשיו

  6. 01:37

    אנחנו רוצים רק את הטבלאות של היוזר אנחנו לא רוצים אנחנו לא רוצים בעצם את המפתחות ולא רוצים כל מיני דברים אנחנו צריכים פה לחפש עמודה שנקראת טייפ טייפ אתם רואים האם יוזר בנה את זה או מערכת בנתה את זה?

  7. 02:13

    אז בואו נעשה, קודם כל נראה רק את הטייפ שבו הטייפ שווה ל-OTU. אם אתם תריצו את השאילתה הזאת, אתם תראו שיש פה עכשיו רק אובייקטים שבנה המשתמש, שזה למעשה הטבלאות, ככה אני שולף את כל הטבלאות, יפה מאוד.

  8. 02:37

    עכשיו, מה זה עוזר לי? יפה, איך זה עוזר לי? בואו ננצל את זה כדי לרשום את השאילתה הזאת מתוך אתר אינטרנט. אם אנחנו נהיה באתר אינטרנט שחשוף ל-SQL Injection, אנחנו נעריץ לו את השאילתה הזאת, ונשלוף רשימה של כל הטבלאות שיש בדאטאבייס.

  9. 02:58

    ואחרי שאנחנו נדע את כל הטבלאות שיש בדאטאבייס, ועוד דקה אני אעשה את זה בפועל, אני רוצה רק להסביר לכם את החלק ה-SQLי של הסיפור הזה, אחרי שאני אדע לשלוף בעצם את כל הטבלאות, אני אוכל לשלוף את כל העמודות שיש בטבלאות.

  10. 03:14

    לדוגמה, זיהיתי שמאוד מאוד מאוד מאוד מעניינת אותי טבלת קסטמארס, טבלת לקוחות. למה? כי יש שם בפנים עמודה, אולי של פרטים של כרטיס אשראי או אימייל של יוזרים, ואז אני אוכל לשלוח להם ספאם, ויכול להיות שיש שם כרטיסי אשראי, יכול להיות אימייל, יכול להיות טלפון של משתמש,

  11. 03:35

    ואז אפשר לשלוח להם פרסומות וכל מיני שטויות, ויפה מאוד. אז בואו תראו. אני יכול לעשות דבר כזה סלקט כוכבית פרום משהו שנקרא סיס קולומס סיס קולומס זה בעצם גם טבלת מערכת אתם רואים זה נקרא טבלאות מערכת שבטבלה הזאת יש את כל העמודות העמודות העמודות

  12. 04:04

    שהן נמצאות בכל הטבלאות תסתכלו יש פה 769 שורות והעמודות האלו נמצאות בכל הטבלאות עכשיו איך אני יודע לאיזה טבלה זה שייך? לפי איך יודעים שלפי מה זה שייך יש פה מה שנקרא ID אוקיי עמודה של ID אתם רואים מזהה אתם רואים ID זאת אומרת שהעמודות האלו סיסקולום שייכות לטבלה מספר 3 עמודות האלו שייכות לטבלה

  13. 04:38

    5 עמודות האלו שייכות לטבלה 9 אז אנחנו עכשיו נעשה דבר כזה נראה מה ה-ID של ה-Customers בואו נראה מה ה-ID של ה-Customers וזה ונרשום פה where ID שווה למה שאנחנו צריכים, בואו נראה שזה יעבוד לנו.

  14. 05:03

    או, יפה מאוד, תסתכלו מה קרה. אני למעשה שלפתי מתוך columns, טבלה system columns, עמודות רק של טבלת customers, שזה מה שעניין אותי, אוקיי? והנה אני רואה פה עמודה שנקראת כרטיסי אשראי, כן? איפה, איפה כרטיסי אשראי?

  15. 05:27

    הנה, default credit card number. עכשיו שימו לב, מה שקורה פה זה דבר כזה, שעד עכשיו אתם מכירים שאפשר לראות ב-SQL נתונים דרך הממשק היפה הזה.

  16. 05:37

    דרך אגב, הממשק היפה הזה פה בצד, שמראה לנו את כל הנתונים ואת כל הפרטים ואת כל העמודות, הוא עושה בדיוק אותן פקודות מאחורי הקלעים. אבל למה אנחנו צריכים את הפקודות האלו? כי אנחנו הולכים לשלוח אותן מתוך אתר אינטרנט, אוקיי?

  17. 05:55

    זאת אומרת, אנחנו עכשיו מתוך אתר אינטרנט הולכים לשלוח את הפקודות האלו ולשלוף את כל הנתונים. יפה.

  18. 06:04

    כי אין לנו גישה ישירה לדאטאבייס, אנחנו בעצם נכנסים לאתר אינטרנט, בתוך האזור של ה-search שלו, כותבים את השאילתה, ושולפים את הנתונים על נניח פרטי כרטיס אשראי.

  19. 06:19

    אז בואו נעבור לחלק הזה, אחרי שהבנו מה זה Sys Objects, שזה רשימה של כל האובייקטים והטבלאות, Sys Columns, זה רשימה של כל העמודות וה-ID, זה השדה שמחבר ביניהם.

  20. 06:31

    אנחנו עכשיו נפעיל את האתר שלנו, וננסה לעשות עם זה משהו. אז קודם כל אמרנו דבר כזה, קודם כל אנחנו סוגרים גרש.

  21. 06:44

    אחרי שאנחנו סוגרים גרש אנחנו עושים פקודה חדשה. מריצים wait for delay 005 כדי לדעת האם זה עובד או לא. delay for 5 שניות ושני מקפים כדי להתעלם מכל מה שיש אחרי זה.

  22. 07:01

    כל מה שיש בהמשך אפשר להתעלם ממנו. יפה מאוד. בגלל שזה ללא פרמטרים זה מצליח והנה אתם רואים פה delay של 5 שניות.

  23. 07:11

    יפה. עכשיו אני רוצה לכתוב את הפקודות שהכנתי, הפקודות הרעות שהכנתי אני רוצה להכניס לפה. הבעיה זה איפה אני אראה אותם למסך, הרי איך זה יחזור אליי.

  24. 07:23

    אני רוצה להכניס אותם לפה לטבלה. הרי מה שקורה זה שהתוצאה של שאילתה חוזרת לפה לטבלה הזאת. אז אני צריך לדאוג לדעת איך אני מכניס לפה נתונים.

  25. 07:37

    אז איך אני אכניס לפה נתונים? יפה מאוד. אז אני אעשה דבר כזה, אני אעשה דבר כזה. אני, בואו נעשה קודם כל כזה דבר. אם אני אסגור פה את השאילתה הזאת אצלם, נסגור אותה.

  26. 07:51

    עוזרים לי בעצם. אופס, אופס, אתם רואים? נפל האתר. עכשיו באמצעיות האתר ייפול, אתם תקבלו כזה פשוט דף וזהו. בואו נסגור גרש זה נקודה פסיק ולהתעלם מהכל.

  27. 08:09

    אוקיי, נעשה כזה דבר. נסגור לו בעצם את השאילתה, נסגור לו את השאילתה בגרש ונגיד לו תתעלם מהכל. יופי, זה עבד.

  28. 08:19

    סגרנו את השאילתה ואמרנו לו להתעלם מהכל. אז כשאנחנו סוגרים את השאילתה סתם ככה, הוא למעשה מביא לנו את כל מה שיש לנו בטבלה. יפה מאוד. עכשיו אני עושה דבר כזה, אני לא רוצה, אני רוצה לעשות לו אוניון.

  29. 08:35

    אוניון זה למעשה לחבר תוצאות של שאילתה קודמת עם השאילתה הזאת. אוניון, ואני עושה לו סלקט 111. בואו תבינו מה זה אומר.

  30. 08:53

    אוניון זה אומר תחבר תוצאות של שאילתה קודמת, שזה זה, זה מה שאתם רואים על המסך, עם עוד שאילתה נוספת. לחבר את התוצאות האלו עם עוד משהו.

  31. 09:10

    סלקט 111 ייתן לי טבלה שרשום שם 1111. שימו לב מה יקרה עכשיו. אופס, באמצעיות אתם לא תראו את הקוד מקור של התוכנה, אתם תראו פשוט שהאתר נפל. בואו ננסה עוד פעם.

  32. 09:28

    כנראה שכחתי להגיד לו להתעלם ממה שיש אחרי זה בסוף. הנה, אתם רואים? ומה שאני צריך להגיד לו, שזה משהו ששכחתי להגיד לו, כל מה שיש אחריי תתעלם ממנו.

  33. 09:41

    הקוד המקורי של המתכנת תתעלם ממנו. הרי אתם זוכרים מה הקוד המקורי, כן? זה בעצם search רגיל. יפה, תסתכלו מה קרה. הוא חיבר בין שאילתה הזאת לתוצאות של שאילתה קודמת.

  34. 09:59

    אתם רואים? זה מאוד מאוד יפה. הוא חיבר בין התוצאות האלו לתוצאות האם. אם אנחנו רוצים לראות בדיוק איזה קוד הוא מעריץ, יש לנו פרופיילר.

  35. 10:09

    בואו ננסה לנקות את המסך, נעשה play על פרופיילר, ונגיד לו תריץ עוד פעם את ה-search. הוא הריץ את הסיוט שיביא לנו 111. נעצור את הפרופיילר שלו יאסוף עוד נתונים ונראה מה הוא עשה.

  36. 10:28

    הוא הריץ פקודה Select Name 3 עמודות From Products מטבלת המוצרים. איפה שה-Name Like אחוז עד עכשיו זה היה הקוד המקורי של התוכנה.

  37. 10:40

    ועכשיו אמור להיות המידע שצריך לחפש אותו. אני במקום המידע סגרתי לו את הגרש. ברגע שסגרתי לו את הגרש אז הוא מביא את כל השמות לא משנה מה כתוב בפנים. כי name like אחוז זה אומר כל השמות, הוא עושה, ולתוצאה הזאתי, שזה במקרה שלוש עמודות name, description וקיוורד, הוא מחבר אוניון עוד

  38. 11:06

    שאילתא שמדפיסה 111. יפה מאוד. עכשיו, למה זה חשוב לי היה? למה? בשביל מה? מה אכפת לי מה111 הזה? כי עוד שנייה, במקום 111 הזה, אני אכניס את הפקודות שלי.

  39. 11:21

    פשוט הייתי צריך למצוא דרך לראות את זה במסך חזרה, אוקיי? זה שאני יכול להעביר לו פקודה שתמחק לו איזה את כל הטבלאות זה בסדר זה כאילו שלב ראשון כן יכלתי לכתוב לו פה עד עכשיו יכלתי לסגור לו את הזה להגיד לו פקודה חדשה ולהגיד לו drop table תמחק את כל ה customers אוקיי תסגור את הפקודה ותעשה איזה ואז הוא היה מוחק לי את כל הטבלה אוקיי

  40. 11:55

    אני לא רוצה למחוק את כל הטבלה אני יכול לעשות תוצאות חד כיווניות עד עכשיו אני חיפשתי דרך להתחבר לנתונים שחוזרים חזרה בתשובה.

  41. 12:06

    ואיך אני מצאתי את הדרך הזאת? אני, קודם כל עושים כל מיני ניסיונות באמצעיות, כן? אתם לא יודעים את התשובה.

  42. 12:14

    אז התוצאה, השיטה הכי הכי ידועה זה לעשות בעצם כזה דבר. להגיד לו, אוניון, תתחבר, לא משנה מה יהיה לפניך. לפני כן תביא את מה שהבאת, לא אכפת לי מה הבאת, ותחבר את זה עם 111. יופי.

  43. 12:30

    ואז יש לי 111 על המסך. דרך אגב, יכולתי פה לעשות כל דבר, אני יכולתי לעשות פה גם שתיים ושלוש. פשוט למקרה שיש פה, נניח היה פה מספר, נניח היה פה מחיר, או היה פה משהו אחר, או כסף, או זמן, האחד הזה נורא קל להפוך אותו לכל מיני צורות

  44. 12:48

    אחרות, הרי אני לא יודע מה הקוד של האתר מבצע. יכול להיות שקוד של האתר הופך את העמודה כלשהי למספר.

  45. 12:57

    אז אני מנסה לדחוף לו את מה שהוא כביכול אמור לקבל ולדעת לאכול אותה. יפה מאוד. אז בעצם השאילתה הזאת הצליחה ויש לי דרך להציג מידע למסך.

  46. 13:11

    עכשיו, כשיש לי שיטה להציג מידע למסך, אני יכול לקחת ולהריץ את השאילתה הזאת, להריץ את השאילתה הזאת ולהגיד לו הוא עוניון עם 111 אבל במקום האחד האחרון אני לא רוצה את האחד האחרון.

  47. 13:26

    תכניס לי פה מעין אפשר להגיד אפשר לעשות אפילו תת שאילתא אפשר לעשות יש כל מיני דרכים אפשר לעשות join אתם יכולים לעשות פה מה שאתם רוצים כן זה בואו תראו, אתם יכולים להגיד לו סלקט, רק לדאוג שיהיו שלוש עמודות, תמיד חייבים לדאוג שיהיו שלוש עמודות.

  48. 13:47

    עמודה ראשונה נשאיר אותה אחד, עמודה שנייה נעשה לדוגמה, טוב, אני יכול לכתוב לכם את כל השאילתה עכשיו, אבל זה יכול לסבך אתכם.

  49. 14:03

    טוב, בואו נתחיל, בואו נתחיל, אתם יודעים מה, אני אכתוב לכם את כל השאילתה. את כל השאילתה אני אכתוב לכם. סלקט אחד, סלקט עוד אחד, אוקיי? ובמקום האחרון אני רוצה name עמודה שקוראים לה name from sysobjects כן זאת אומרת אני

לקורס המלא: קורס פריצה לאתרי אינטרנט אונליין

ההרצאה הקודמת: פריצה לשרת SQL מהאינטרנט - חלק 1

ההרצאה הבאה: פריצה לשרת SQL מהאינטרנט - חלק 3

הרצאות קשורות מקורסים אחרים

  • יבוא נתונים לשרת SQL
  • פריצה בכוח לשרת Brute Force FTP עם Hydra
  • הורדת תמונות מהאינטרנט ב-Xcode
  • איך לפרוץ סיסמה לשרת

קורסים נוספים במסלול

  • קורס SOC - מיישם הגנת סייבר
  • קורס סייבר למתחילים - Hacking - בדיקות חוסן תשתיתי ופריצה ל-Windows 10/11 - קורס זה נדרש למבחן ההסמכה היוקרתי OSCP
  • קורס פריצה ומבדקי חדירה לתשתית ארגונית - בדיקות חוסן מתקדמות ל-Active Directory - קורס זה נדרש למבחן ההסמכה היוקרתי OSCP
  • קורס סייבר והאקינג ל-Android - פריצה לטלפונים ואפליקציות אנדרואיד - בודק חוסן - Mobile App Pentesting