
הטקסט המלא של הדקות הראשונות בהרצאה «פריצה לאתר אינטרנט אמיתי» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
שלום לכולם בהרצאה הזאת אנחנו נראה התקפה אמיתית על אתר אינטרנט וחדירה אמיתית מאלף עד תף איך הכל מתבצע קודם כל מצאתי אתר נניח בהונג קונג שיש לו מלא מלא דפים פה ובדף הזה של אירועים שמתוכננים יש חולשה עכשיו אני כבר עדכנתי את האדון שנקרא האג בר.
מה זה האג בר? זה האדון הזה שעוזר לי לכתוב שאילתות. בעצם למעשה כותב לי url בצורה יותר נוחה. זה נקרא האג בר, עשיתי פה ככה customize וגררתי את האג בר, אפשר לגרור אותו מכאן לכאן גררתי אותו, אוקיי?
יפה מאוד ועשיתי exit customize ועכשיו יש לי את האג בר הזה, שעוזר לי יופי אז יש לנו פה את ההונג קונג את האוניברסיטה הזאת ויש לה דף כניסה עכשיו אם אנחנו נבדוק אנחנו נראה שהדף כניסה הזה הוא לא חשוף להתקפות דווקא את הדף של האדמין הם עשו בצורה טובה ואנחנו נצטרך לתקוף דרך עמודים אחרים כדי למצוא את השם והסיסמה לאדמין הזה אתם רואים יש פה את הלוגין
ואיידי אני כבר בדקתי שהוא לא חשוף להתקפה זאת אומרת שאם אני אעשה כזה דבר זה לא יעזור לי, הוא יכתוב לי ששם הסיסמה לא תקין. אז בגלל שההתקפה הזאת ככה לא עובדת ישירות אני אלך דרך דף אחר.
ובדף הזה של החדשות יש פה פירוט של איבנטים של האירועים והדף הזה של האירועים חשוף ל-SQL Injection. כתב אותו מתכנת שהוא לא הכי טוב בעולם ולא מודע לסקיוריטי ואני דרך הדף הזה אוציא את כל המידע.
זה זז לאט. בוא נתחיל לעבור על הפקודות. דבר ראשון, איך אני בודק? איך אני בודק האם הוא חשוף או לא? אם אני אוסיף פה צ'ופצ'יק, אם הדף הזה לא חשוף להתקפת SQL Injection, הוא לא חשוף, אז מבחינתו הוא צריך להציג לי את האבנט כמו שזה.
אם הוא חשוף, אז הצ'ופצ'יק הזה אמור לעשות טעות ב-SQL. זה שיש טעות ב-SQL והתוצאות לא חוזרות לי למסך, תסתכלו, זה שיש טעות ב-SQL והתוצאות לא חוזרות לי למסך זה אומר ששרת ה-Web, אתם רואים יש לי טעות, שרת ה-Web לא סינן את הצ'ופצ'יק והצ'ופצ'יק הזה למעשה השרת SQL
לוקח את כל מה שאני כותב, למעשה שרת ה-Web לוקח את כל מה שאני כותב ובלי לבדוק שיש שם סימנים אסורים מעביר את זה ל-SQL.
איך אני מבין את זה? אם הוא היה מסנן את הצ'ופצ'יק אז הוא היה צריך להחזיר לי את האבנט, אם הוא היה מסנן לי את הצ'ופצ'יק הוא היה צריך, להחזיר לי את האירוע, את כל הפרטים שלו.
לא טבלה ריקה. אתם רואים, הוא היה צריך להחזיר לי את כל האירוע הזה. עכשיו, אז אם הוא לא מסנן את זה, אם הוא לא מסנן את זה, זה אומר שהוא לוקח את הפרמטר הזה, כמו שהוא מעביר אותו ל-SQL, SQL קוראת לו שגיאה, כי ה-chube שכזה מייצר לו שגיאה, ואז שום תוצאה לא חוזרת לי חזרה למסך.
אז מזה שלא חזר לי שום דבר למסך, אני מבין שהשארת ה-Web לא מסננת שום דבר. הוא מעביר את זה as is ל-Web. עכשיו, השלב הבא שאנחנו רוצים זה לגלות כמה עמודות יש לנו.
אז אנחנו יכולים לעשות לו order by ונניח עמודה מספר 17. אם יש עמודה מספר 17 באמת, אז הוא יסדר לפי העמודה הזאת.
אם אין עמודה מספר 17, הוא לא יסדר לפי העמודה הזאת. בואו נפתח את ה-Hug Bar הזה, נרשום פה את כל זה ונעשה Enter, Execute. עכשיו אני מחכה לראות אם יהיו לי תוצאות על המסך או לא יהיו לי תוצאות על המסך.
וסליחה, אני צריך גם לעשות פה הארה כדי להעיף את כל מה שיש אחריי, כל הזנב. אתם רואים, זה אומר שיש לי עוד שגיאה ב-SQL.
עכשיו, Order by 17, אני מצפה לראות שיש לי תוצאה על המסך. אם יש לי תוצאה על המסך, זה אומר שהעמודה הזאת קיימת. הנה אנחנו רואים את התוצאות, הוספתי פה רווח aaa כדי שיהיה לי הערה עם רווח.
יפה מאוד, אני מבין שיש עמודה מספר 17. האם יש עמודה מספר 100? עכשיו, אם אין עמודה מספר 100, אני מקבל פה ריק. למה ריק? כי הייתה שגיאה בsql, sql לא יחזיר כלום לשרת הווב ולשרת הווב אין לי מה להציג.
אבל אם יש לי עמודה מספר 99, הוא כן יציג לי. ואז ככה אני בעצם מבין שיש 99 עמודות. הבנתי שיש 99 עמודות באתר. עכשיו אני רוצה להוציא מידע מטבלאות אחרות, לא מתוך האירוע.
אז מה שאני עושה, אני בעצם עושה Union עם 99 אחרות. זאת אומרת, אני עושה Union במקום ה-Order By הזה, אני עושה Union. זאת אומרת, Union בסלקט, 99 עמודות.
אני מתברג לו מלמטה, אבל זה שאני מתברג לו מלמטה לא יעזור. למה הוא לא יעזור? כי הוא לא יציג לי את המידע שלי, כי הוא מציג רק את השורה הראשונה מהתשובות שמגיעות משרת SQL. משרת SQL חוזרת השאילתה המקורית פלוס השאילתה שלי והוא מציג את השורה הראשונה.
זאת אומרת חוזרות משרת SQL לשרת ה-Web שתי שאילתות מודבקות מלמטה אחד מתחת לשני והוא מציג רק את הרשומה הראשונה. אז אני רוצה להגיד לו תקשיב תציג לי את שלי אז אני חייב להעיף לו את מה שהוא עשה אז אני כותב לו סתם זדים העיקר שהשאילתה הראשונה תהיה ריקה ואז הוא מאחד את זה עם השאילתה שלי ואז השאילתה שלי תהיה בעצם הרשומה הראשונה
הרשומה הראשונה תהיה שלי כי פה דף html הזה מציג רק את השורה הראשונה מתוך מה שsql מחזיר לו כי ככה בנוי הדף הזה שהוא יציג לי רק רשומה אחת ואז אני רואה שבאמת הרשומה שלי נהייתה ראשונה והיא מוצגת על המסך ואני כבר מגלה שבעמודה של קוד זה עמודה מספר 3, זאת העמודה.
אז זאת אומרת שאם אני ארשום פה aaa יוצג ל-aaa שלי. יפה מאוד. טוב, בואו נציג במקום aaa נעשה concat ונרשום version user database כי זה לא מעניין להציג aaa, אז נעשה פה concat, concat לחבר, יודעים מה?
עם ספרטור. ומה יהיה הספרטור שלי? מה יהיה הספרטור שלי? נעשה את זה ככה. הספרטור שלי יהיה סימן נקודה נניח, ואני רוצה שיהיה ורז'ן ויהיה יוזר הנוכחי ויהיה דאטאבייס הנוכחי.
יפה מאוד, כל זה. עכשיו אם אני מפחד על הסימנים המיוחדים, אני יכול לקודד אותם. טוב, בואו ננסה ככה. ואני מצפה פה בעמודה 3 לקבל בעצם את כל הנתונים האלו.
והנה אני מקבל, שזה MariaDB שימו לב user root שזה אומר שאני רץ עם כל ההרשאות בשרת ושם של הדאטה בייס זה שם של הדאטה בייס מצוין עכשיו בואו נקבל את רשימה של עמודות מתוך האינפורמיישן סכמה נקבל את המידע מאינפורמיישן סכמה נעשה דבר כזה נראה כמה שורות יש לנו נעשה פה count כוכבית פה כמה שורות יש בטבלה information חמא.
אני רוצה לראות בדאטאבייס הנוכחי כמה שורות יש לי. נקודה טייבלס או קולומס, זה לא משנה. נניח נעשה קולומס. קולומס.
where table חמא. table חמא זה שם של הדאטאבייס שווה לדאטאבייס הנוכחי. שם של הדאטאבייס שווה לדאטאבייס הנוכחי שלי.
ואני רוצה לדעת כמה כמה יש לי סך הכל עמודות פה להציג, על איזה מספר מדובר. אם זה מספר לא גדול, אני אציג באמצעות גרופ קונקאט.
אם זה מספר גדול, אני אצטרך להתחכם עם הקונקאט של המשתנה, לתוך המשתנה. ואני רואה שיש לי פה 3,000 עמודות.
חברים, יש לי פה 3,000 עמודות בטבלה הנוכחית.