
הטקסט המלא של הדקות הראשונות בהרצאה «התקפת Stored XSS רמת אבטחה נמוכה ובינונית ב-DVWA» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
שלום לכולם, בהרצאה הזו נדבר על XSS Stored Stored זה אומר שהוא מאוחסן בתוך דאטאבייס הוא פרסיסטנט, הוא קבוע בתוך הדאטאבייס של האתר וכל מי שנכנס חוטף את ה-XSS שלנו חוטף את הסקריפט הזדוני שנכתוב בואו נתחיל מזה שנעביר את ה-Security Level לרמה נמוכה ל-Low וב-Stored יש לנו מקום כאן אני רק רוצה לבדוק פה שזה באמת Low, זה באמת
Low יש לנו מקום לכתוב פה כל מיני הודעות או להשאיר תגובות מתחת לאתר, כמו ביוטיוב מתחת לסרט אפשר להשאיר תגובה, או באיזשהו אתר אפשר להשאיר כל מיני שאלות או תגובות או ליצור קשר.
אז אני במקום ליצור קשר כותב aaa alert. אוי, אין לי מקום פה לכתוב את הזה, כי הגבילו לי את התווים, אתם רואים מה זה? אין לי מספיק תווים, אני לוחץ כפתור ימני, אקספקט אלמנט לראות את הרכיב הגרפי הזה ואני רואה כאן ברכיב הגרפי שיש לו שדה שנקרא max length שווה 10 זאת אומרת שהם מאשרים לי 10 תווים ברכיב הזה של input text name טוב זה לא ממש מקובל על 10 תווים אני מוחק את זה יופי
אז בואו נכתוב פה עכשיו כמה תווים שאנחנו רוצים אנחנו יכולים לכתוב פה הודעות אנחנו יכולים לעשות אלרט אחד מה שאתם רוצים בואו נעשה אלרט אחד ונעשה גם Alert 2. מה זה Alert 2?
זה בתוך המסג', אני רוצה לראות איפה יש להם חור אבטחה. כאן אני כותב BBB וAlert 2. למה אני כותב AA ו-BBB? כדי שאני אדע למצוא את זה בקלות, כשהתשובה תחזור אליי מהשרד, שאני אדע למצוא את זה בקלות, איפה זה חזר, בדיוק באיזה מיקום זה חזר, ואנחנו עושים Sign Guestbook.
זה נשמר בדאטאבייס וחוזר אליי חזרה. חטפתי את אחד וחטפתי שתיים מה זה אומר ששני השדות האלו פורצים להתקפה עכשיו מה מיוחד בהתקפה הזאת שאת הסקריפט שלי חוטפים כל האנשים שנכנסים לאתר אתם רואים פה בתוך ה-AAA ו-BBB הזה בתוך ההודעות האלו התמימות לכאורה מסתתר פה סקריפט שהם לא רואים והוא מתבצע עכשיו תסתכלו איזה מדהים זה אני עובר עכשיו לאיזשהו תפריט
אחר חוזר חזרה לאותו הלינק ועוד פעם אני חוטף את זה זאת אומרת כל מי שייכנס ללינק הזה של האתר איפה שיש קומנטים יחטוף את הסקריפט שלי ואני אוכל לגנוב לו את הקוקיז ולהזדהות במקומו למעשה הצלחתי לפרוץ לכל הלקוחות של האתר לתוך הדפדפן שלהם
ולכן זה נקרא סטורד כי זה מאוחסן בדאטאבייס של האתר וכל מי שנכנס חוטף אותו בואו נראה איך זה נראה ב-view page source, מה שהגיע לי מהשרת אני עושה ctrl f, עושה aaa והנה אני רואה, תסתכלו ליד השם, שלכאורה מופיע על המסך יש גם סקריפט דפדפן רואה את הסקריפט מבצע
אותו אותו דבר bbb גם סקריפט זאת אומרת ששני השדות גם name וגם message לא מוגנים ואני יכול לפרוץ גם דרך זה וגם דרך זה ולהריץ את הקוד הזדוני שלי כמו גנבת קוקיז או כמו דף לוגין מזויף שדומה אחד לאחד לפייסבוק או לבנק ואז בן אדם נכנס כי הוא חושב שהוא צריך להכניס שם וסיסמה ואני גונב לו את הנתונים שלו אני אראה לכם את כל הדברים האלו בהמשך כרגע
אני צריך להתרכז בלהריץ את הסקריפט הזדוני אצל הלקוח והכי טוב מבחינתי שיישב בדאטאבייס וכולם יחטפו אותו.
נהדר. זה היה שלב ראשון. אנחנו יכולים לנקות את הדאטאבייס כדי שהוא לא יציק לנו. הצלחנו לעשות את זה.
שימו לב באיזה מקרה זה היה מדהים. לדוגמה, אם היינו בפייסבוק בזמן ההרשמה ליד השם כותבים גם סקריפט והם לא היו בודקים את זה, נניח שהוא לא היה מספיק מאובטח.
כל מי שרואה את השם שלי בפייסבוק היה חוטף את הסקריפט והייתי גונב לו את כל הנתונים. זאת אומרת שאנחנו מחפשים לדוגמה דף הרשמה, דף הערות, דברים שייפתחו אצל אנשים אחרים והם יחטפו את הסקריפט והמידע הזה נשמר בדאטאבייס, כמו מידע של ההרשמה, מידע של תגובות באתר.
לעומת זאת ברפלקטיב, אם אתם זוכרים שהיה לנו לפני כן רפלקטיב, שם המידע לא היה נשמר בדאטאבייס. כאן אנחנו מדברים על זה שזה נשמר בדאטאבייס. ברפלקטד הסקריפט הזדוני במקום לשבת בדאטאבייס ישב בתוך הלינק ואז רק מי שלחץ על הלינק חטף את הסקריפט הזדוני.
אבל כאן במקרה הזה אני שם אותו בדאטאבייס ואז את הסקריפט הזדוני שלי חוטפים כל הלקוחות שנכנסים לדף הזה.
ברפלקטד חוטפים רק אלו שעשו קליק על הלינק הזדוני. אז לכן סטורד הוא הרבה יותר חזק. בוא נראה איך אנחנו תכלס גונבים את הקוקיז. נפעיל שרת וב פה, סודו מינוס אס נעבור לרות, נפעיל שרת וב זדוני שמאזין ומחכה שיתחברו אליו קורבנות תמימים, הקורבנות התמימים מגיעים לאתר אינטרנט כזה תמים,
לא משאירים שום הודעות, הם רק מסתכלים על האתר, וברגע שהם מסתכלים הם חוטפים את הסקריפט הזדוני שלי.
בואו נראה, נעשה פה ccc ונעשה פה copy paste. עוד פעם לא נכנס לי? יש לי פה הגבלה של תווים, נעשה אינספקט אלמנט, נראה שבתוך html מישהו הגביל אותי ל-50 תווים מבחינה גרפית, לא מעניין אותי, אני מוחק את ההגבלה שלו, וזהו, ועכשיו אין לי הגבלה של 50 תווים,
ואני עושה קופי פייסט ומעביר את הסקריפט, שמה עושה הסקריפט שלי? הוא אומר לדוודפן לגלוש לאתר זדוני, שזה המכונה של הקאלי שלי, ותוך כדי שהוא גולש לאתר הזדוני הוא מצרף לגלישה document.cookies, את הקוקיז הנוכחיים של האתר הנוכחי.
דוקומנט נקודה קוקיז זה בעצם הקוקיז שכרגע יש באתר. עם מלחץ F12 נוכל לראות בסטורג' של הדפדפן את הקוקיז של האתר. לדוגמה, שיש לו סשן איי-די.
אתם יכולים לראות כאן, יש לי פה קצת בעיה של מקום במסך, אבל אתם יכולים לראות פה סשן איי-די ואיזשהו ערך, עוד איזה קוקי סיקיוריטי לו, יכולים להיות הרבה קוקיז, ואני גונב לו נניח את המזהה של הסשן, נכנס במקומו אז מה אני אומר אני אומר בסקריפט אז דוני לדפדפן דפדפן
חמוד תגלוש לכתובת חדשה ותוך כדי הגלישה תצרב גם את הקוקיז הנוכחיים של האתר למה הוא יכול להגיע אליהם כי הוא מתוך האתר הזה יכול להגיע לקוקיז של האתר כי זה הכל נמצא באותו מקום ואני עושה sign guest וכל מי שנכנס עכשיו אני גונב לו את הקוקיז שלו בוא נראה את זה נניח מגיע לקוח תמים 188, נכנס לאתר, לא חושד בכלום, לא עושה שום פעולה חשודה,
לוחץ פה על תפריט איפה ששתלתי את הקוד הזדוני שלי, איך שהוא נכנס הוא עובר ישירות לאתר הזדוני אוטומט, ותוך כדי שהוא עובר הוא גם מעביר לי את הקוקיז שלו בבקשה, ואני כהאקר מקבל את הקוקיז של אותו הקורבן שרק נכנס לאתר,
ומעכשיו אני יכול להיכנס בשמו לאתר הזה, ואם כן, אתר הוסיף עוד אמצעי אבטחה, כמו לחבר את הכתובת של קוקי עם כתובת איי-פי, לדוגמה, והוא מאשר את הקוקי הזה רק מ-איי-פי מסוים.
האתר יכול גם למנוע ממני להיכנס עם הקוקי של הבן אדם, אם הם מספיק מתוחכמים. על זה נדבר בהמשך, איך מונעים את הדבר הזה. אבל המון המון אתרים מסתמכים על קוקיז בלבד, כמו פייסבוק לדוגמה.
למרות שפייסבוק לדעתי גם מקשר בין איי-פי לקוקי, אבל יש המון אתרים שלו. בקיצור שורה תחתונה כל מי שנכנס לכאן חוטף את הסקריפט שלי או איך אנחנו עכשיו נאפס את הדאטאבייס טוב בואו נעביר סקיוריטי לרמת אימפוסיבל זאת רמה חדשה שיש בגרסה חדשה אימפוסיבל זה אומר בלתי אפשרי הולכים לסטורד וכבר לא חוטפים
את הסקריפט ויש לנו כפתור לנקות את הדאטאבייס דרך אגב למה הסקריפט הזה לא התבצע עכשיו מה השתנה בוא נעשה view page source ונראה פה ב-ccc שלפני מילת סקריפט הסוגריים קודדו, זה נקרא לקודד.
הוא עשה html encoding וקידד את הסימן הזה ולכן javascript מתעלם מזה אבל מנוע תצוגה של html מציג לי את זה בצורה יפה. אתם רואים? זה נראה כאילו הסקריפט הזה רגיל אבל למה הוא לא מתבצע בפועל?
כי מנוע של javascript לא מבין את זה. זה נקרא קידוד html. כך אפשר לכתוב סימנים אסורים על ידי הקידוד שלהם. דיברנו על זה בהרצאות קודמות.
אז זאת הרמה של ה-impossible שהם מקודדים לי את הכל, ואז אני לא יכול להריץ את הסקריפט,