PracticU

פריצה לאתר אינטרנט אמיתי

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

פריצה לאתר אינטרנט אמיתי
ההרצאה מדגימה איך חולשה אחת בדף חדשות של אתר אוניברסיטה חשפה את מסד הנתונים כולו, כולל חשבון המנהל של האתר. המטרה להבין איך הפרצה נוצרת ואיך מונעים אותה.
איך זה התחיל
1. דף עם קלט לא מסונן: דף האירועים לקח פרמטר מהכתובת והעביר אותו לשאילתה כמו שהוא. סימן לכך הוא התנהגות חריגה של הדף כשהקלט משתנה, למשל הודעת שגיאה של מסד הנתונים במקום תוצאה.
2. דף הכניסה היה מוגן: דף הלוגין לא היה פגיע, ולכן התוקף עבר לדף אחר. אתר יכול להיות מאובטח בחלק אחד ופרוץ בחלק אחר.
3. הבנת השאילתה המקורית: התוקף בודק איזה מידע הדף מחזיר למשתמש ואיזה חלק ממנו מוצג על המסך, ובהתאם לכך מתאים את הקלט שלו.
4. קטלוג המסד: מסד הנתונים מתאר את עצמו בטבלאות מערכת, ומהן אפשר לשלוף את רשימת הטבלאות והעמודות.
5. נתוני חשבונות: לאחר שזוהו טבלאות המשתמשים, נשלפו שמות המשתמשים והסיסמאות שלהם. הסיסמאות נשמרו בצורה חלשה, ולכן חלקן נשברו מהר.
איך מתגוננים
הפרצה נובעת מחיבור ישיר בין קלט המשתמש לשאילתה. שאילתות מוכנות, בדיקת קלט ושימוש בחשבון מסד נתונים עם הרשאות מינימליות מונעים את רוב המקרים. הודעות שגיאה של מסד הנתונים לא צריכות להגיע למשתמש, וסיסמאות צריך לשמור בעזרת אלגוריתם חזק עם salt.
הפרצה הזאת לא נובעת מדף אחד שגוי, אלא מקוד שמחבר קלט לא בטוח לשאילתה, ולכן כל דף עם פרמטרים צריך לבדיקה.

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

  1. 00:00

    התקפה אמיתית על אתר אינטרנט

  2. 00:36

    הכרת ה-HackBar בדפדפן

  3. 01:39

    בחירת דף פגיע לתקיפה

  4. 02:21

    זיהוי חולשת SQL Injection

  5. 04:09

    גילוי מספר העמודות עם Order By

  6. 06:30

    שילוב Union לשליפת מידע

  7. 08:46

    הצגת גרסת השרת והמשתמש

  8. 10:16

    עבודה עם Information Schema

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

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

  1. 00:02

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

  2. 00:41

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

  3. 01:05

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

  4. 01:48

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

  5. 02:07

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

  6. 02:37

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

  7. 02:59

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

  8. 03:24

    לוקח את כל מה שאני כותב, למעשה שרת ה-Web לוקח את כל מה שאני כותב ובלי לבדוק שיש שם סימנים אסורים מעביר את זה ל-SQL.

  9. 03:35

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

  10. 03:47

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

  11. 04:14

    אז מזה שלא חזר לי שום דבר למסך, אני מבין שהשארת ה-Web לא מסננת שום דבר. הוא מעביר את זה as is ל-Web. עכשיו, השלב הבא שאנחנו רוצים זה לגלות כמה עמודות יש לנו.

  12. 04:37

    אז אנחנו יכולים לעשות לו order by ונניח עמודה מספר 17. אם יש עמודה מספר 17 באמת, אז הוא יסדר לפי העמודה הזאת.

  13. 04:50

    אם אין עמודה מספר 17, הוא לא יסדר לפי העמודה הזאת. בואו נפתח את ה-Hug Bar הזה, נרשום פה את כל זה ונעשה Enter, Execute. עכשיו אני מחכה לראות אם יהיו לי תוצאות על המסך או לא יהיו לי תוצאות על המסך.

  14. 05:14

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

  15. 05:28

    עכשיו, Order by 17, אני מצפה לראות שיש לי תוצאה על המסך. אם יש לי תוצאה על המסך, זה אומר שהעמודה הזאת קיימת. הנה אנחנו רואים את התוצאות, הוספתי פה רווח aaa כדי שיהיה לי הערה עם רווח.

  16. 05:52

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

  17. 06:16

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

  18. 06:35

    אז מה שאני עושה, אני בעצם עושה Union עם 99 אחרות. זאת אומרת, אני עושה Union במקום ה-Order By הזה, אני עושה Union. זאת אומרת, Union בסלקט, 99 עמודות.

  19. 06:56

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

  20. 07:25

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

  21. 07:56

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

  22. 08:27

    אז זאת אומרת שאם אני ארשום פה aaa יוצג ל-aaa שלי. יפה מאוד. טוב, בואו נציג במקום aaa נעשה concat ונרשום version user database כי זה לא מעניין להציג aaa, אז נעשה פה concat, concat לחבר, יודעים מה?

  23. 08:56

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

  24. 09:33

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

  25. 09:54

    והנה אני מקבל, שזה MariaDB שימו לב user root שזה אומר שאני רץ עם כל ההרשאות בשרת ושם של הדאטה בייס זה שם של הדאטה בייס מצוין עכשיו בואו נקבל את רשימה של עמודות מתוך האינפורמיישן סכמה נקבל את המידע מאינפורמיישן סכמה נעשה דבר כזה נראה כמה שורות יש לנו נעשה פה count כוכבית פה כמה שורות יש בטבלה information חמא.

  26. 10:52

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

  27. 11:11

    where table חמא. table חמא זה שם של הדאטאבייס שווה לדאטאבייס הנוכחי. שם של הדאטאבייס שווה לדאטאבייס הנוכחי שלי.

  28. 11:30

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

  29. 11:42

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

  30. 11:54

    חברים, יש לי פה 3,000 עמודות בטבלה הנוכחית.

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

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

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

  • פריצה בכח לאתר אינטרנט עם Burp Intruder
  • שרת מיילים חינם לאתר אינטרנט
  • פריצה לאתר דרך כתובת URL
  • בניית אתר אינטרנט אמיתי לחנות חיות - Layout

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

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