
הטקסט המלא של הדקות הראשונות בהרצאה «פריצה לאתר אינטרנט - SQL injection - חלק 2» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
בהרצאה הקודמת אנחנו דיברנו על מה זה sql injection ואנחנו עכשיו ממשיכים ואנחנו רוצים לפרוץ דרך דף תמים כזה שבו אנחנו בוחרים איזשהו משתמש ורואים את ההערות שלו שימו לב אין לנו מקום לכתוב שום דבר אנחנו רק רואים מידע מתוך דאטאבייס דף תמים כזה דרכו אנחנו רוצים לפרוץ לגנוב את כל השמות והסיסמאות של הדאטאבייס
ולהיכנס דרך לוגין הרגיל אז איך דרך הדף הזה אנחנו יכולים בעצם לפרוץ פנימה? התחלנו לעשות את זה בהרצאה קודמת, מי שלא היה אני מזכיר לו, לוחצים Alt Edit Preferences Advanced ומגדירים פה ב-Network פרוקסי, שיהיה מ-2701.
אחרי שיש לנו שרת פרוקסי אנחנו הולכים ל-Berp, שזה בעצם תוכנת פרוקסי, מפעילים אותו שיתפוס את הפאקטים, Intercept is on, מתחיל לתפוס פאקטים ובוחרים פה נניח משהו באתר לוחצים לשלוח מידע לשרת והוא במצב המתנה אתם יכולים לראות פה שהוא ממתין לתשובה אבל למעשה זה לא השרת שמעכב אותו
זה הפרוקסי שלי מעכב אותו ואנחנו יכולים לראות שבאמת הבקשה הגיעה לשרת פרוקסי ואנחנו רוצים דרך הפרמטר הזה להתחיל לשלוח מידע לנקודות sql ולשלוף מידע סודי מתוך הדאטאבייס אז נעביר את זה ל-repeater, נשחרר את הפרוקסי שימשיך לשלוח בקשות ותשובות, ופה אנחנו יכולים לראות את הבקשות שהוא שולח ואת התשובות שלהם.
זה request וזה ה-response. יש לנו פה את כל ההיסטוריה. ואנחנו הולכים ל-repeater והולכים לשחק עם הבקשה והתשובה. אנחנו יכולים לעשות פה צ'ופצ'יק ולכתוב or 1 שווה 1, כך הוא יראה לי את כל השורות, ולשים שני קווים ורווח שאומרים לו כל מה שיש אחרי שני קווים ברווח תתעלם ממנו.
זה אומר שזה הערה, comment, הערה. ואז אם העמוד הוא חשוף ל-sql injection הוא יראה לי במקום שניים את הכל. רק את הסימנים המיוחדים כמו רווח וסימן שווה צריך לקודד כדי ששרת web לא יחשוב שזה בשבילו.
ככה שרת web מבין שמה שמקודד זה לא בשבילו, זה כדי להעביר את הסימנים המיוחדים האלו למישהו שהוא הבא אחריו. מי זה הבא אחריו?
שרת sql אז אני מקודד אותם ובמקום סימן שווה אני מקבל את הדבר הזה אחוז 3d עושה go עשיתי go ועכשיו במקום שתי כתבות של ג'ון אני רואה 12 שורות זה אומר שבאמת sql injection עובד איך אני בכלל מגלה האם העמוד חשוף לsql injection או לא איך אני בכלל מגלה את זה נניח שיש לי עמוד רגיל ואני רוצה לגלות האם הוא חשוף לsql injection זה משהו שאולי שכחתי להסביר לכם ואתם יכולים לראות פה
שבמצב רגיל יש לי שתי כתבות אבל אם העמוד חשוף ל-SQL Injection ברגע שאני אשים פה צ'ופצ'יק קטן כזה זה בעצם יהרוס את המבנה של שאילתת SQL זה אומר שאם שרת ה-Web אם שרת Web שאליו נשלחת בקשה לא בודק את הפרמטר הזה ולא מנקה אותו מסימנים אסורים והוא מעביר את זה as is כמו שהוא לשרת SQL אז מה שיקרה ששרת SQL יקבל שאילתא לא נכונה בגלל הצ'ופצ'יק
הזה ויחזיר הודעת שגיאה. אז אם בלי צ'ופצ'יק זה עובד ואם צ'ופצ'יק זה לא עובד, זה אומר ששרת ווב לא יודע לסנן סימנים האסורים.
ואז אם אני מקבל פה ארור, שימו לב אני קיבלתי ארור, זה אומר ששרת SQL לא מסנן סימנים אסורים וזה אומר שהוא חשוף להתקפות SQL Injection. אז אני שם את הצ'ופצ'יק הזה ורואה האם הוא חשוף להתקפות sql injection או שהוא לא חשוף אז אני עושה פה צ'ופצ'יק מוריד אותו עושה גו ורואה שיש שניים יופי אז עכשיו גילינו
שהוא כן חשוף להתקפות sql injection אתם רואים הוא כן חשוף error message עכשיו השאלה זה מה עושים עם זה השלב הבא שאני צריך זה בעצם לשלוף מידע לא על הבלוגים האלו אני רוצה להיכנס לטבלה אחרת אני רוצה ללכת למידע הסודי מתוך טבלאות אחרות אז אני יכול להדביק טבלה לתוך טבלה על ידי אוניון אבל אני לא יודע כמה עמודות צריך אז הדבר הראשון אני
צריך לגלות כמה עמודות יש איך אני מגלה כמה עמודות יש אני אגיד לו את כל התוצאות אני יכול להגיד לו לעשות order by לסדר אותם לפי עמודה מספר 2 אם זה עובד זה אומר שבאמת עמודה מספר 2 קיימת אם אני עושה לו עמודה מספר 9 וזה לא עובד זה אומר שעמודה לא קיימת וככה אני מוצא כמה עמודות יש אפשר להשתמש בorder by ואפשר להשתמש בגרופביי.
גרופביי זה לכווץ לקבוצות לפי עמודה מספר נניח 9. בואו נעשה עמודה מספר 2 ונראה את התוצאה. אני עושה מקודד את זה לפי החוקים של URL Encoding, ועכשיו אני אשלח פה ונראה מה אנחנו מקבלים.
אנחנו מקבלים תוצאה נורמלית. שימו לב, קיבלנו תוצאה נורמלית, אין עוד שגיאה, זה אומר שעמודה מספר 2 אכן עובדת. יפה מאוד.
אם אני אעשה פה עמודה מספר 3, אני מקבל גם תשובה נורמלית. אתם רואים? מקבל תשובה נורמלית, לא הודעות שגיאה. אם אני אעשה פה 33, אני מקבל error message.
למה? כי אין עמודה מספר 33. אז אני יכול ככה למצוא כמה עמודות יש. נניח ננסה 4, אנחנו רואים ש-4 מחזיר לי תשובה נכונה ו-5 מחזיר לי שגיאה.
זה אומר שאם ה-4 מחזיר תשובה נכונה ו-5 שגיאה, זה אומר שיש 4 עמודות. מה זה אומר ארבע עמודות? זה אומר ששרת ווב לוקח את הפרמטר שלי, מרכיב מזה שאילתה ואת השאילתה שולח לשרת, בשאילתה הזאת יש ארבע עמודות.
עכשיו, מה זה אכפת לי כמה עמודות יש? זה הדבר הכי מעניין. מה אני עושה עם העמודות האלו? אז גיליתי כמה עמודות יש, מה זה עוזר לי? עכשיו אני אראה לכם מה זה עוזר. אני הולך פה ל-SQL להראות לכם מה זה עוזר.
אז כרגע אני נמצא בלוג סטייבל, שזה בעצם הבלוג שלנו, שזה כל הכתבות האלו שראינו ואנחנו רואים שבתוך הבלוג סטייבל יש לנו בעצם את השם של הבן אדם ואת הקומנט שלו תאריך ואיזשהו מספר סידורי יופי מפה אנחנו שולפים נתונים לעמוד הספציפי שנכנסנו במקרה נכנסנו לעמוד של הבלוג הזה אנחנו רוצים לשלוף מידע מתוך טבלת אקאונטס שזה הטבלה הסודית עם יוזרניים ופסוורדס
מפה אנחנו רוצים בעצם לשלוף את המידע הסודי שלנו אז איך אנחנו דרך שאילתה שמגיעה לכאן וזה מגיע לכאן שולפים נתונים מטבלה אחרת שימו לב אני כרגע נמצא בעמוד שמעביר לפה את השאילתות בצורה כזאת ככה אני מדמיין את זה שעמוד נראה דבר כזה בלוג ניים שווה ג'ון אוקיי ככה אני מדמיין שהדבר הזה נראה ג'ון ואחרי שאני מריץ את השאילתה הזאת חוזרות לי
שתי שורות עכשיו אם אני מדמיין את זה ככה אני יכול לנצל פקודת אוניון ולהוסיף אליה מלמטה אני מדביק מלמטה עוד תוצאות עוד תוצאות שיש לי ארבע עמודות אני מוסיף לזה אחד שתיים שלוש ארבע אוניון יוניון יוניון יוניון מוסיף מלמטה עוד תוצאות יוניון מוסיף מלמטה עוד תוצאות בואו תראו מה קרה פה אתם יכולים לראות פה
שמתחת לטבלה פתאום התווספו עוד תוצאות שימו לב התוצאה פה לא נכונה אני ביקשתי ארבע והוא הוסיף לי שלושים וארבע בגלל סוג נתונים וזה גם שיבש את כל העמודה הזאת. כדי שהיוניון הזה יעבוד, ואני עכשיו אנצל את היוניון הזה כדי לשלוח סלקט מטבלה אחרת, אז איך אני אעשה את זה?
חוקים הם כאלו, קודם כל ביוניון חייב להיות מספר עמודות זהה, והסוג גם חייב להיות זהה. בגלל זה, במקום לשלוח 1, 2, 3, 4, אני אשלח נעלים.
נעל זה כלום, ובגלל שהוא כלום, אז הוא לא פוגע בסוג נתונים שיש בטבלה. אז אני מתחיל מזה שאני אשלח נעלים במקום 1, 2, 3, 4, אתם רואים נהיה פה נל נל נל נל נל והסוג נתונים הוא תקין סוג נתונים תקין אם אני אשלח מספר עמודות לא נכון Union לא יעבוד שימו לב אני עושה
Go ואתם יכולים לראות פה ש-Different number of columns ה-Union עובד רק אם מספר עמודות הוא זהה אני עכשיו במקום לעשות Select נל נל נל אני עושה From Accounts ושם פה נניח Username ו-Password בואו נראה ושימו לב מה קרה יש לי פה שתי רשומות המקוריות של ג'ון, ומתחת לזה הדבקתי עוד שמות וסיסמאות מטבלה אחרת.
ודרך הדף ששולף לי בלוג של ג'ון, פתאום אני שולף מידע סודי מטבלה אחרת. וזה הטריק של אוניון, יוניון, לאחד. ואז אני לוקח את כל זה, את כל זה, ובודק, זה כל זה עשיתי בראש שלי, זה בדמיון שלי.
ועכשיו אני הולך בעצם לפרוקסי, לוקח את הבקשה שלי, ככה אני גיליתי דרך אגב דרך הגרופביי כמה עמודות יש בשביל זה הייתי צריך את הגרופביי כדי לגלות כמה עמודות יש שם קונטרול V, רווח, מינוס מינוס רווח, ג'ון, אוניון, נעל, יוזרנם,
פסוורד, נעל, פרום אקאונטס למה אני צריך פה נעל ופה נעל? כדי שמספר העמודות יהיה זהה למה שיש בשאילתה המקורית כי את השאילתה שיש לפני הג'ון אני לא יכול לגעת בה אז בשאילתה שלפני הג'ון כנראה יש 4 עמודות אז אני חייב להדביק מלמטה עוד ארבע עמודות, ואם יש שם זנב אני מעיף אותו.
עושה right-click convert encode characters, הנה כל הפלוסים במקום הרווחים, יופי, ועושה go. ועכשיו בעמוד ה-Web אני מקבל, שימו לב, מתחת לג'ון, את ה-username ואת הפספורט של כל היוזרים בדאטאבייס.
איזה יופי. אז הצלחנו לשלוף את המידע הסודי מתוך הדאטאבייס, וזה מדהים. עכשיו השאלה, איך ידעתי בעצם, הטבלה נקראת אקאונטס, איך ידעתי שזה יוזרניים ופאסוורד, איך אני אמור לנחש את זה?
מאיפה יודעים בכלל שזה נקרא אקאונטס? אז איך אני יכול לדעת מידע על דאטאבייס? זאת שאלה מאוד מעניינת. לפני שאני עושה את זה, ככה, בואו נחזיר את זה חזרה.
די קוד, אני מחזיר חזרה, ובמקום פאסוורד אני שם פה נעל. נניח שאני לא יודע מה זה פרום אקאונטס, אני לא יודע שזה אקאונטס, אין לי מושג, אין לי מידע מגדיל.
אז פה אני שם פונקציה שנקראת ורז'ן. פונקציה שנקראת ורז'ן מחזירה לי איזה דאטאבייס אני עובד איתו. תסתכלו, פה מתחת לשתי הרשומות של ג'ון, אני רואה שאני עובד עם ורז'ן של שרת שנקרא אובונטו 12, דאטאבייס בגרסה של 514, שזה MySQL 514,
שרץ על אובונטו. עכשיו הלאה, מה אני יכול לגלות? אני יכול לגלות באיזה דאטאבייס אני נמצא, באיזה סכמה אני נמצא זוכרים שהיה הרבה דאטאבייסים בשרת באיזה דאטאבייס no wasp אני יכול גם לגלות באיזה יוזר אני מתחבר לשרת וזה היוזר שאיתו web server מתחבר לsql ואני רואה שאני מתחבר עם יוזר שנקרא מוטילידיי אבל כל זה לא מספיק לי אני רוצה לדעת איזה טבלאות יש
אחרות איך מגלים את זה הפונקציות האלו הן מאוד טובות בשביל לדעת בכלל עם מי יש לי עסק מי עומד מולי כדי לדעת מה הפונקציות שיש מאחורי הקלעים איזה טבלאות אחרות יש אני מנצל אינפורמיישן סכמה מה זה אינפורמיישן סכמה זה דאטאבייס וירטואלי שמכיל מידע על כל הדאטאבייסים האחרים בעצם הוא מכיל מידע על כל העמודות על כל השורות וזה מדהים בואו נראה את זה ניכנס לדאטאבייס הווירטואלי זה
שזה חלק מהתקן יש אותו גם במייקרוסופט יש אותו גם במייסקיואל בדאטאבייס הזה יש את הרשימת של כל הטבלאות אבל אני לא מחפש את הרשימת טבלאות אני מחפש טבלה שנקראת קולומס, עמודות.
טבלה שנקראת קולומס. יש פה המון המון המון מידע על כל מסדי נתונים אחרים, זה בעצם מטא-דאטה, מידע על מסד נתונים, ובטבלת קולומס אנחנו רואים שיש לנו שם של טבלה ושם של עמודה.
אתם רואים שמות של דאטאבייסים? טייבל סכמה זה בעצם שם של דאטאבייס, שזה זה בעצם, שם של דאטאבייס, שם של טבלה בדאטאבייס ושם של עמודה.
אז בואו נראה מה יש לנו, אנחנו יודעים באיזה טבלה אנחנו נמצאים אז בואו נעשה edit ונעשה פה where table schema שווה וגילינו לפני כן שזה נקרא no wasp ועשינו את השאילתה הזאת ואנחנו מגלים בעצם שבדאטאבס שנקרא no wasp יש טבלה שנקראת accounts ויש בתוכה עמודות כאלו כאלו וכאלו כל מה שאני צריך לעשות כדי לגלות את השמות של הטבלאות ואת השמות של העמודות
לעשות שאילתה נורא פשוטה סלקט כוכבית from, אני עושה סלקט from information schema נקודה columns where table name שווה לשם שגיליתי.