
הטקסט המלא של הדקות הראשונות בהרצאה «פריצה לשרת SQL מהאינטרנט - חלק 2» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
בסרט הזה אנחנו בעצם נדבר על פקודות של SQL Injection שאפשר לעשות מתוך אתר אינטרנט כדי לשלוף את הנתונים הפנימיים, כרטיסי אשראי, נתונים על המשתמשים.
אז בשביל לעשות את כל זה ובעצם לבנות את השאילתא הזאתי אנחנו צריכים להכיר כמה דברים מאחורי הקלעים, מה שקורה מאחורי הקלעים של SQL. זה למעשה System Objects וכל מיני דברים של המערכת.
אז אנחנו עכשיו נדבר קצת על sql עצמו ואיך הוא בנוי ואחרי זה נבנה מתוך זה שאילתה ששולפת לנו את כל הוויפנוכו של sql ונשלוף עמודות ובסוף אני אספר לכם את הסוף של הסרטון הזה אנחנו נשלוף כרטיס אשראי של הלקוחות מתוך הדאטאבייס שבשום פנים ואופן לא היינו צריכים להגיע לזה פשוט נמצא איפה זה נמצא את זה ונשלוף את זה
בסוף אז איך עובד sql כמה דברים מאחורי הקלעים של sql אז יש לנו קודם סיס אובייקטס מה זה סיס אובייקטס זה טבלת מערכת שנקראת סיס אובייקטס יש לנו גם סרטים סרטים יותר מעמיקים בקורס של sql בדיוק על כל הנושא של הסיסטם וכשלומדים sql זה נראה משעמם ולא מעניין כי זה לא כזה רלוונטי
לsql כביכול לתלמידים של sql אבל ברגע שמתחילים להתעסק בהאקינג זה הדבר הכי חשוב אז סיס אובייקט הוא כולל רשימה של כל האובייקטים שיש במערכת אוקיי של כל מה שיש כולל כל הטבלאות ומה שאנחנו רק רוצים יש פה אוקיי כל המפתחות כל הטבלאות כל מה שאתם יכולים לחשוב עליו עכשיו
אנחנו רוצים רק את הטבלאות של היוזר אנחנו לא רוצים אנחנו לא רוצים בעצם את המפתחות ולא רוצים כל מיני דברים אנחנו צריכים פה לחפש עמודה שנקראת טייפ טייפ אתם רואים האם יוזר בנה את זה או מערכת בנתה את זה?
אז בואו נעשה, קודם כל נראה רק את הטייפ שבו הטייפ שווה ל-OTU. אם אתם תריצו את השאילתה הזאת, אתם תראו שיש פה עכשיו רק אובייקטים שבנה המשתמש, שזה למעשה הטבלאות, ככה אני שולף את כל הטבלאות, יפה מאוד.
עכשיו, מה זה עוזר לי? יפה, איך זה עוזר לי? בואו ננצל את זה כדי לרשום את השאילתה הזאת מתוך אתר אינטרנט. אם אנחנו נהיה באתר אינטרנט שחשוף ל-SQL Injection, אנחנו נעריץ לו את השאילתה הזאת, ונשלוף רשימה של כל הטבלאות שיש בדאטאבייס.
ואחרי שאנחנו נדע את כל הטבלאות שיש בדאטאבייס, ועוד דקה אני אעשה את זה בפועל, אני רוצה רק להסביר לכם את החלק ה-SQLי של הסיפור הזה, אחרי שאני אדע לשלוף בעצם את כל הטבלאות, אני אוכל לשלוף את כל העמודות שיש בטבלאות.
לדוגמה, זיהיתי שמאוד מאוד מאוד מאוד מעניינת אותי טבלת קסטמארס, טבלת לקוחות. למה? כי יש שם בפנים עמודה, אולי של פרטים של כרטיס אשראי או אימייל של יוזרים, ואז אני אוכל לשלוח להם ספאם, ויכול להיות שיש שם כרטיסי אשראי, יכול להיות אימייל, יכול להיות טלפון של משתמש,
ואז אפשר לשלוח להם פרסומות וכל מיני שטויות, ויפה מאוד. אז בואו תראו. אני יכול לעשות דבר כזה סלקט כוכבית פרום משהו שנקרא סיס קולומס סיס קולומס זה בעצם גם טבלת מערכת אתם רואים זה נקרא טבלאות מערכת שבטבלה הזאת יש את כל העמודות העמודות העמודות
שהן נמצאות בכל הטבלאות תסתכלו יש פה 769 שורות והעמודות האלו נמצאות בכל הטבלאות עכשיו איך אני יודע לאיזה טבלה זה שייך? לפי איך יודעים שלפי מה זה שייך יש פה מה שנקרא ID אוקיי עמודה של ID אתם רואים מזהה אתם רואים ID זאת אומרת שהעמודות האלו סיסקולום שייכות לטבלה מספר 3 עמודות האלו שייכות לטבלה
5 עמודות האלו שייכות לטבלה 9 אז אנחנו עכשיו נעשה דבר כזה נראה מה ה-ID של ה-Customers בואו נראה מה ה-ID של ה-Customers וזה ונרשום פה where ID שווה למה שאנחנו צריכים, בואו נראה שזה יעבוד לנו.
או, יפה מאוד, תסתכלו מה קרה. אני למעשה שלפתי מתוך columns, טבלה system columns, עמודות רק של טבלת customers, שזה מה שעניין אותי, אוקיי? והנה אני רואה פה עמודה שנקראת כרטיסי אשראי, כן? איפה, איפה כרטיסי אשראי?
הנה, default credit card number. עכשיו שימו לב, מה שקורה פה זה דבר כזה, שעד עכשיו אתם מכירים שאפשר לראות ב-SQL נתונים דרך הממשק היפה הזה.
דרך אגב, הממשק היפה הזה פה בצד, שמראה לנו את כל הנתונים ואת כל הפרטים ואת כל העמודות, הוא עושה בדיוק אותן פקודות מאחורי הקלעים. אבל למה אנחנו צריכים את הפקודות האלו? כי אנחנו הולכים לשלוח אותן מתוך אתר אינטרנט, אוקיי?
זאת אומרת, אנחנו עכשיו מתוך אתר אינטרנט הולכים לשלוח את הפקודות האלו ולשלוף את כל הנתונים. יפה.
כי אין לנו גישה ישירה לדאטאבייס, אנחנו בעצם נכנסים לאתר אינטרנט, בתוך האזור של ה-search שלו, כותבים את השאילתה, ושולפים את הנתונים על נניח פרטי כרטיס אשראי.
אז בואו נעבור לחלק הזה, אחרי שהבנו מה זה Sys Objects, שזה רשימה של כל האובייקטים והטבלאות, Sys Columns, זה רשימה של כל העמודות וה-ID, זה השדה שמחבר ביניהם.
אנחנו עכשיו נפעיל את האתר שלנו, וננסה לעשות עם זה משהו. אז קודם כל אמרנו דבר כזה, קודם כל אנחנו סוגרים גרש.
אחרי שאנחנו סוגרים גרש אנחנו עושים פקודה חדשה. מריצים wait for delay 005 כדי לדעת האם זה עובד או לא. delay for 5 שניות ושני מקפים כדי להתעלם מכל מה שיש אחרי זה.
כל מה שיש בהמשך אפשר להתעלם ממנו. יפה מאוד. בגלל שזה ללא פרמטרים זה מצליח והנה אתם רואים פה delay של 5 שניות.
יפה. עכשיו אני רוצה לכתוב את הפקודות שהכנתי, הפקודות הרעות שהכנתי אני רוצה להכניס לפה. הבעיה זה איפה אני אראה אותם למסך, הרי איך זה יחזור אליי.
אני רוצה להכניס אותם לפה לטבלה. הרי מה שקורה זה שהתוצאה של שאילתה חוזרת לפה לטבלה הזאת. אז אני צריך לדאוג לדעת איך אני מכניס לפה נתונים.
אז איך אני אכניס לפה נתונים? יפה מאוד. אז אני אעשה דבר כזה, אני אעשה דבר כזה. אני, בואו נעשה קודם כל כזה דבר. אם אני אסגור פה את השאילתה הזאת אצלם, נסגור אותה.
עוזרים לי בעצם. אופס, אופס, אתם רואים? נפל האתר. עכשיו באמצעיות האתר ייפול, אתם תקבלו כזה פשוט דף וזהו. בואו נסגור גרש זה נקודה פסיק ולהתעלם מהכל.
אוקיי, נעשה כזה דבר. נסגור לו בעצם את השאילתה, נסגור לו את השאילתה בגרש ונגיד לו תתעלם מהכל. יופי, זה עבד.
סגרנו את השאילתה ואמרנו לו להתעלם מהכל. אז כשאנחנו סוגרים את השאילתה סתם ככה, הוא למעשה מביא לנו את כל מה שיש לנו בטבלה. יפה מאוד. עכשיו אני עושה דבר כזה, אני לא רוצה, אני רוצה לעשות לו אוניון.
אוניון זה למעשה לחבר תוצאות של שאילתה קודמת עם השאילתה הזאת. אוניון, ואני עושה לו סלקט 111. בואו תבינו מה זה אומר.
אוניון זה אומר תחבר תוצאות של שאילתה קודמת, שזה זה, זה מה שאתם רואים על המסך, עם עוד שאילתה נוספת. לחבר את התוצאות האלו עם עוד משהו.
סלקט 111 ייתן לי טבלה שרשום שם 1111. שימו לב מה יקרה עכשיו. אופס, באמצעיות אתם לא תראו את הקוד מקור של התוכנה, אתם תראו פשוט שהאתר נפל. בואו ננסה עוד פעם.
כנראה שכחתי להגיד לו להתעלם ממה שיש אחרי זה בסוף. הנה, אתם רואים? ומה שאני צריך להגיד לו, שזה משהו ששכחתי להגיד לו, כל מה שיש אחריי תתעלם ממנו.
הקוד המקורי של המתכנת תתעלם ממנו. הרי אתם זוכרים מה הקוד המקורי, כן? זה בעצם search רגיל. יפה, תסתכלו מה קרה. הוא חיבר בין שאילתה הזאת לתוצאות של שאילתה קודמת.
אתם רואים? זה מאוד מאוד יפה. הוא חיבר בין התוצאות האלו לתוצאות האם. אם אנחנו רוצים לראות בדיוק איזה קוד הוא מעריץ, יש לנו פרופיילר.
בואו ננסה לנקות את המסך, נעשה play על פרופיילר, ונגיד לו תריץ עוד פעם את ה-search. הוא הריץ את הסיוט שיביא לנו 111. נעצור את הפרופיילר שלו יאסוף עוד נתונים ונראה מה הוא עשה.
הוא הריץ פקודה Select Name 3 עמודות From Products מטבלת המוצרים. איפה שה-Name Like אחוז עד עכשיו זה היה הקוד המקורי של התוכנה.
ועכשיו אמור להיות המידע שצריך לחפש אותו. אני במקום המידע סגרתי לו את הגרש. ברגע שסגרתי לו את הגרש אז הוא מביא את כל השמות לא משנה מה כתוב בפנים. כי name like אחוז זה אומר כל השמות, הוא עושה, ולתוצאה הזאתי, שזה במקרה שלוש עמודות name, description וקיוורד, הוא מחבר אוניון עוד
שאילתא שמדפיסה 111. יפה מאוד. עכשיו, למה זה חשוב לי היה? למה? בשביל מה? מה אכפת לי מה111 הזה? כי עוד שנייה, במקום 111 הזה, אני אכניס את הפקודות שלי.
פשוט הייתי צריך למצוא דרך לראות את זה במסך חזרה, אוקיי? זה שאני יכול להעביר לו פקודה שתמחק לו איזה את כל הטבלאות זה בסדר זה כאילו שלב ראשון כן יכלתי לכתוב לו פה עד עכשיו יכלתי לסגור לו את הזה להגיד לו פקודה חדשה ולהגיד לו drop table תמחק את כל ה customers אוקיי תסגור את הפקודה ותעשה איזה ואז הוא היה מוחק לי את כל הטבלה אוקיי
אני לא רוצה למחוק את כל הטבלה אני יכול לעשות תוצאות חד כיווניות עד עכשיו אני חיפשתי דרך להתחבר לנתונים שחוזרים חזרה בתשובה.
ואיך אני מצאתי את הדרך הזאת? אני, קודם כל עושים כל מיני ניסיונות באמצעיות, כן? אתם לא יודעים את התשובה.
אז התוצאה, השיטה הכי הכי ידועה זה לעשות בעצם כזה דבר. להגיד לו, אוניון, תתחבר, לא משנה מה יהיה לפניך. לפני כן תביא את מה שהבאת, לא אכפת לי מה הבאת, ותחבר את זה עם 111. יופי.
ואז יש לי 111 על המסך. דרך אגב, יכולתי פה לעשות כל דבר, אני יכולתי לעשות פה גם שתיים ושלוש. פשוט למקרה שיש פה, נניח היה פה מספר, נניח היה פה מחיר, או היה פה משהו אחר, או כסף, או זמן, האחד הזה נורא קל להפוך אותו לכל מיני צורות
אחרות, הרי אני לא יודע מה הקוד של האתר מבצע. יכול להיות שקוד של האתר הופך את העמודה כלשהי למספר.
אז אני מנסה לדחוף לו את מה שהוא כביכול אמור לקבל ולדעת לאכול אותה. יפה מאוד. אז בעצם השאילתה הזאת הצליחה ויש לי דרך להציג מידע למסך.
עכשיו, כשיש לי שיטה להציג מידע למסך, אני יכול לקחת ולהריץ את השאילתה הזאת, להריץ את השאילתה הזאת ולהגיד לו הוא עוניון עם 111 אבל במקום האחד האחרון אני לא רוצה את האחד האחרון.
תכניס לי פה מעין אפשר להגיד אפשר לעשות אפילו תת שאילתא אפשר לעשות יש כל מיני דרכים אפשר לעשות join אתם יכולים לעשות פה מה שאתם רוצים כן זה בואו תראו, אתם יכולים להגיד לו סלקט, רק לדאוג שיהיו שלוש עמודות, תמיד חייבים לדאוג שיהיו שלוש עמודות.
עמודה ראשונה נשאיר אותה אחד, עמודה שנייה נעשה לדוגמה, טוב, אני יכול לכתוב לכם את כל השאילתה עכשיו, אבל זה יכול לסבך אתכם.
טוב, בואו נתחיל, בואו נתחיל, אתם יודעים מה, אני אכתוב לכם את כל השאילתה. את כל השאילתה אני אכתוב לכם. סלקט אחד, סלקט עוד אחד, אוקיי? ובמקום האחרון אני רוצה name עמודה שקוראים לה name from sysobjects כן זאת אומרת אני