PracticU

התקפת SQL injection

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

התקפת SQL injection
בשיעור זה אנו לומדים את המונח SQL Injection, התקפה שהאקר יכול לבצע ולעשות לנו בלאגן במסד הנתונים. הוא יכול לגנוב מידע, לשנות מידע, למחוק מידע ולבצע השמדות במסד הנתונים שלנו, ולכן חשוב להכיר מה זה וכמובן איך להתגונן מפניו.
נושאי הסיכום המוצגים בשיעור:
1. הנקודה הפגיעה: כתבנו קטע קוד פשוט שמבקש מהמשתמש טקסט לחיפוש מתנה, ואנחנו לוקחים את הטקסט ומשלבים אותו בשאילתה משלנו, בלי קשר ל-Stored Procedure, זה אותו הדבר, או קוראים ל-Stored Procedure ושולחים לה את הטקסט, שזה גם משהו מקובל מאוד. אבל אם יש פה האקר, הוא יכול לעשות לנו בלאגן. הטקסט הזה נשלח ל-Stored Procedure שבעצם משלבת אותו בתוך שאילתה.
2. השאילתה והשרשור: בוחנים את השאילתה שהטקסט משולב בה, מעתיקים אותה אל מסמך טקסטואלי רגיל לגמרי כדי להבין איך תוקף מנצל את שפת SQL כדי לבצע נזקים באתר שלנו. השאילתה בוחרת את כל הרשומות מטבלת המתנות כאשר השם דומה, ויש בה מחרוזת משורשרת עם הטקסט שהמשתמש הכניס, ואז שוב מחרוזת, ואלה תווי כללי שביחד בונים מחרוזת ארוכה אחת. מה שאנחנו שולחים ל-Stored Procedure הוא גרש, מה שהמשתמש הכניס וגרש. אם המשתמש הכניס מילה כלשהי, זה מה שנשלח, וזאת שאילתה חוקית לחלוטין.
3. ההאקר יכול להכניס מה שבא לו: אבל האקר יכול להכניס מה שבא לו, ומה שההאקר מכניס נמצא פה ומשולב עם השאילתה המקורית. עוברים לכובע של ההאקר ומריצים את זה שוב, ורואים בקונסול את השאילתה שמוצגת. ההאקר מכניס אות אחת תמימה, ואם נריץ את השאילתה הזאת זה כאילו שם כתוב אות אחת, ובינתיים אין שום דבר רע בזה.
4. הגרש שסוגר את הגרש: אבל ההאקר יכול לחזור ולרשום גרש, ואז זה אומר ששם יש גרש. עדיין זה לא עושה בלאגן, אבל שימו לב שמבחינת שפת SQL הגרש שנכתב כאן סוגר את הגרש שנכתב שם. בעצם זה חיפוש של אות אחת, ואז הגרש שנשלח לשם בינתיים תקוע בלי שום תכלית.
5. נקודה פסיק ורווח: אבל ההאקר ממשיך ושם נקודה פסיק ורווח. מה זה נקודה פסיק בשפת SQL? זה אומר נא לסיים את השאילתה הנוכחית ויש לנו אפשרות להתחיל שאילתה חדשה. כלומר, ההאקר עכשיו סיים את השאילתה הזאת וגרם למסד הנתונים להתחיל שאילתה איזו שבא לו.
6. הזרקת פקודת השמדה: וההאקר החמוד שלנו ממשיך לרשום פקודת השמדה של טבלת הלקוחות, והוא בטח מניח שקיימת טבלה כזאת. ואז עדיין הוא צריך להיפטר מכל אלה שיגרמו לשגיאה בשאילתה, וההאקר שם שוב נקודה פסיק רווח בשביל לסגור את השאילתה השנייה שהוא הולך להריץ. הוא בעצם הזריק שאילתה שלמה בתוך השאילתה המקורית, או שיזריק חלקים ממנה שמשנים את המשמעות של השאילתה המקורית, ויש כל מיני טכניקות לעשות זאת.
7. היפטרות מהקוד המקורי בעזרת הערה: ועכשיו, מה ההאקר צריך לעשות בשביל להיפטר מהקוד שהיה של השאילתה המקורית? מאוד פשוט, מקף מקף. זה בעצם הערה בשפת SQL. אז אם ההאקר עכשיו כותב לנו את זה בתור מחרוזת חיפוש תמימה לחלוטין של מתנה, אז המערכת תביא לנו את כל המתנות שיש בשם שלהם האות הזאת. יכול להיות שאין, יכול להיות שיש. אבל מאחורי הקלעים היא גם תמחק את טבלת הלקוחות. מאוד בעייתי הדבר הזה.
8. התוצאה בפועל: מריצים את השאילתה, והיא אומרת לנו שהכל בסדר גמור, השאילתה חוקית, והנה היא מציגה את כל המתנות שמתחילות באות הזאת. מעולה. אבל מאחורי הקלעים המערכת גם הריצה את פקודת ההשמדה. חוזרים למסד הנתונים, רואים את טבלת הלקוחות, הולכים לטבלאות ומרעננים אותן, ורואים מה קרה, בלאגן גדול, חבלה רצינית במסד הנתונים. יכול להיות שיש לנו אלפי לקוחות, ובבת אחת נמחקה לנו הטבלה. אז לא תמיד קל למחוק טבלה, כיוון שיכול להיות שהיא מקושרת לטבלאות אחרות, אבל בהחלט אפשר לעשות בעיות רציניות עם מסד הנתונים. אפשר ללכת ולגנוב מידע, אפשר ללכת ולשנות ולהגיד לתת שאילתת עדכון שאומרת כל המחירים מאופסים לאפס, יש המון דברים שההאקר יכול לעשות, וכמובן שאנחנו רוצים לטפל בבעיה. כרגע כל מה שראינו זה מה זה SQL Injection, הזרקה של שאילתת SQL שמשנה את המשמעות של השאילתה המקורית ויכולה לכלול בתוכה חלקים נוספים של שאילתות ולעשות שם בלאגן, חבלות וכדומה, ואנחנו רוצים בסרטון הבא לראות איך להתמודד עם הדבר הזה כך שהאקרים לא יצליחו לבצע SQL Injection למערכות שאנחנו בונים.
סיכמנו את מנגנון התקפת ה-SQL Injection, מהשרשור התמים של קלט המשתמש בתוך שאילתה, דרך סגירת הגרש, סיום השאילתה בנקודה פסיק, הזרקת פקודת השמדה והסתרת ההמשך בעזרת סימני הערה, ועד לראיית התוצאה ההרסנית של מחיקת טבלה שלמה מאחורי תוצאות חיפוש תמימות. בשיעור הבא נעסוק בנושא הגנה מהתקפת SQL injection. זה הכל, תודה רבה.
בשיעור הבא נעסוק בנושא הגנה מהתקפת SQL injection.
SR13289HE

פרקי ההרצאה: התקפת SQL injection

  1. 00:00

    מהי התקפת SQL Injection

  2. 00:36

    קליטת קלט משתמש לשאילתה

  3. 01:12

    השאילתה שמשלבת את הקלט

  4. 01:50

    שילוב קלט זדוני בשאילתה

  5. 02:30

    סגירת מחרוזת עם גרש

  6. 03:10

    פתיחת שאילתה חדשה בבסיס הנתונים

  7. 03:48

    ניצול לנזק בטבלאות

תמלול ההרצאה: התקפת SQL injection

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

  1. 00:02

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

  2. 00:20

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

  3. 00:47

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

  4. 01:07

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

  5. 01:17

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

  6. 01:30

    אז מהי השאילתא? Select all from gifts where name like, ויש לנו פה את המחרוזת הזאת, משורשרת עם טקסט כזה שהמשתמש הכניס, ואז עוד פעם מחרוזת, אלה wild card שביחד בונים מחרוזת אחת ארוכה.

  7. 01:47

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

  8. 02:03

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

  9. 02:19

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

  10. 02:54

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

  11. 03:17

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

  12. 03:44

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

לקורס המלא: קורס Entity Framework Core

ההרצאה הקודמת: שימוש ב-Stored Procedure - Entity Framework Core

ההרצאה הבאה: הגנה מהתקפת SQL injection

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

  • הגנה מהתקפות SQL Injection
  • התקפת Javascript Injection בעזרת Bettercap
  • פריצה לאתר אינטרנט - SQL injection - חלק 1
  • הסבר על Dependency Injection

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

  • קורס דוט-נט - NET Core. - עם Rest API
  • קורס ASP.NET
  • קורס MVC
  • קורס Git ו-GitHub עם Visual Studio