PracticU

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

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

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

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

  1. 00:00

    חזרה להרצאה הקודמת ולדף ההערות

  2. 01:32

    עורך Repeater: שליחה ובדיקה חוזרת של בקשות

  3. 02:07

    קידוד תווים מיוחדים בכתובת URL

  4. 02:46

    איך מזהים עמוד החשוף ל-SQL Injection

  5. 04:24

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

  6. 13:02

    סכמת המידע: טבלאות ועמודות במסד

  7. 13:54

    איתור טבלה ועמודות לפי שם הסכמה

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

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

  1. 00:02

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

  2. 00:28

    ולהיכנס דרך לוגין הרגיל אז איך דרך הדף הזה אנחנו יכולים בעצם לפרוץ פנימה? התחלנו לעשות את זה בהרצאה קודמת, מי שלא היה אני מזכיר לו, לוחצים Alt Edit Preferences Advanced ומגדירים פה ב-Network פרוקסי, שיהיה מ-2701.

  3. 00:49

    אחרי שיש לנו שרת פרוקסי אנחנו הולכים ל-Berp, שזה בעצם תוכנת פרוקסי, מפעילים אותו שיתפוס את הפאקטים, Intercept is on, מתחיל לתפוס פאקטים ובוחרים פה נניח משהו באתר לוחצים לשלוח מידע לשרת והוא במצב המתנה אתם יכולים לראות פה שהוא ממתין לתשובה אבל למעשה זה לא השרת שמעכב אותו

  4. 01:13

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

  5. 01:39

    זה request וזה ה-response. יש לנו פה את כל ההיסטוריה. ואנחנו הולכים ל-repeater והולכים לשחק עם הבקשה והתשובה. אנחנו יכולים לעשות פה צ'ופצ'יק ולכתוב or 1 שווה 1, כך הוא יראה לי את כל השורות, ולשים שני קווים ורווח שאומרים לו כל מה שיש אחרי שני קווים ברווח תתעלם ממנו.

  6. 02:03

    זה אומר שזה הערה, comment, הערה. ואז אם העמוד הוא חשוף ל-sql injection הוא יראה לי במקום שניים את הכל. רק את הסימנים המיוחדים כמו רווח וסימן שווה צריך לקודד כדי ששרת web לא יחשוב שזה בשבילו.

  7. 02:22

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

  8. 02:32

    שרת sql אז אני מקודד אותם ובמקום סימן שווה אני מקבל את הדבר הזה אחוז 3d עושה go עשיתי go ועכשיו במקום שתי כתבות של ג'ון אני רואה 12 שורות זה אומר שבאמת sql injection עובד איך אני בכלל מגלה האם העמוד חשוף לsql injection או לא איך אני בכלל מגלה את זה נניח שיש לי עמוד רגיל ואני רוצה לגלות האם הוא חשוף לsql injection זה משהו שאולי שכחתי להסביר לכם ואתם יכולים לראות פה

  9. 03:03

    שבמצב רגיל יש לי שתי כתבות אבל אם העמוד חשוף ל-SQL Injection ברגע שאני אשים פה צ'ופצ'יק קטן כזה זה בעצם יהרוס את המבנה של שאילתת SQL זה אומר שאם שרת ה-Web אם שרת Web שאליו נשלחת בקשה לא בודק את הפרמטר הזה ולא מנקה אותו מסימנים אסורים והוא מעביר את זה as is כמו שהוא לשרת SQL אז מה שיקרה ששרת SQL יקבל שאילתא לא נכונה בגלל הצ'ופצ'יק

  10. 03:38

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

  11. 03:50

    ואז אם אני מקבל פה ארור, שימו לב אני קיבלתי ארור, זה אומר ששרת SQL לא מסנן סימנים אסורים וזה אומר שהוא חשוף להתקפות SQL Injection. אז אני שם את הצ'ופצ'יק הזה ורואה האם הוא חשוף להתקפות sql injection או שהוא לא חשוף אז אני עושה פה צ'ופצ'יק מוריד אותו עושה גו ורואה שיש שניים יופי אז עכשיו גילינו

  12. 04:14

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

  13. 04:43

    צריך לגלות כמה עמודות יש איך אני מגלה כמה עמודות יש אני אגיד לו את כל התוצאות אני יכול להגיד לו לעשות order by לסדר אותם לפי עמודה מספר 2 אם זה עובד זה אומר שבאמת עמודה מספר 2 קיימת אם אני עושה לו עמודה מספר 9 וזה לא עובד זה אומר שעמודה לא קיימת וככה אני מוצא כמה עמודות יש אפשר להשתמש בorder by ואפשר להשתמש בגרופביי.

  14. 05:12

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

  15. 05:33

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

  16. 05:42

    אם אני אעשה פה עמודה מספר 3, אני מקבל גם תשובה נורמלית. אתם רואים? מקבל תשובה נורמלית, לא הודעות שגיאה. אם אני אעשה פה 33, אני מקבל error message.

  17. 05:55

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

  18. 06:13

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

  19. 06:32

    עכשיו, מה זה אכפת לי כמה עמודות יש? זה הדבר הכי מעניין. מה אני עושה עם העמודות האלו? אז גיליתי כמה עמודות יש, מה זה עוזר לי? עכשיו אני אראה לכם מה זה עוזר. אני הולך פה ל-SQL להראות לכם מה זה עוזר.

  20. 06:46

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

  21. 07:15

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

  22. 07:44

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

  23. 08:17

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

  24. 08:39

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

  25. 08:49

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

  26. 09:09

    Go ואתם יכולים לראות פה ש-Different number of columns ה-Union עובד רק אם מספר עמודות הוא זהה אני עכשיו במקום לעשות Select נל נל נל אני עושה From Accounts ושם פה נניח Username ו-Password בואו נראה ושימו לב מה קרה יש לי פה שתי רשומות המקוריות של ג'ון, ומתחת לזה הדבקתי עוד שמות וסיסמאות מטבלה אחרת.

  27. 09:40

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

  28. 10:01

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

  29. 10:25

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

  30. 10:47

    עושה right-click convert encode characters, הנה כל הפלוסים במקום הרווחים, יופי, ועושה go. ועכשיו בעמוד ה-Web אני מקבל, שימו לב, מתחת לג'ון, את ה-username ואת הפספורט של כל היוזרים בדאטאבייס.

  31. 11:10

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

  32. 11:24

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

  33. 11:34

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

  34. 11:49

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

  35. 12:09

    שרץ על אובונטו. עכשיו הלאה, מה אני יכול לגלות? אני יכול לגלות באיזה דאטאבייס אני נמצא, באיזה סכמה אני נמצא זוכרים שהיה הרבה דאטאבייסים בשרת באיזה דאטאבייס no wasp אני יכול גם לגלות באיזה יוזר אני מתחבר לשרת וזה היוזר שאיתו web server מתחבר לsql ואני רואה שאני מתחבר עם יוזר שנקרא מוטילידיי אבל כל זה לא מספיק לי אני רוצה לדעת איזה טבלאות יש

  36. 12:39

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

  37. 13:11

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

  38. 13:26

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

  39. 13:40

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

  40. 13:52

    אז בואו נראה מה יש לנו, אנחנו יודעים באיזה טבלה אנחנו נמצאים אז בואו נעשה edit ונעשה פה where table schema שווה וגילינו לפני כן שזה נקרא no wasp ועשינו את השאילתה הזאת ואנחנו מגלים בעצם שבדאטאבס שנקרא no wasp יש טבלה שנקראת accounts ויש בתוכה עמודות כאלו כאלו וכאלו כל מה שאני צריך לעשות כדי לגלות את השמות של הטבלאות ואת השמות של העמודות

  41. 14:17

    לעשות שאילתה נורא פשוטה סלקט כוכבית from, אני עושה סלקט from information schema נקודה columns where table name שווה לשם שגיליתי.

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

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

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

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

  • פריצה בכח לאתר אינטרנט עם Burp Intruder
  • התקפת SQL injection
  • הגנה מהתקפות SQL Injection
  • שרת מיילים חינם לאתר אינטרנט

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

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