PracticU

הגנה נגד Reflected XSS
רמת אבטחה גבוהה באתר DVWA

בלי כתוביותעם כתוביות
PracticU › קורס פריצה ומבדקי חדירה לאתרי אינטרנט - בדיקות חוסן לאתרים - Web Pentesting - קורס זה נדרש למבחן ההסמכה היוקרתי OSCP › הגנה נגד Reflected XSS רמת אבטחה גבוהה באתר DVWA
מילון מושגים:
XSS - חולשה באתרים שבה תוקף מחדיר סקריפט זדוני לדף שמוצג למשתמשים אחרים ורץ בדפדפן שלהם.
HTML - שפת הסימון שבה בונים את מבנה ותוכן דפי האינטרנט, באמצעות תגיות שמגדירות כותרות, פסקאות, קישורים ועוד.
JavaScript - שפת תכנות שרצה בעיקר בדפדפן ומוסיפה אינטראקטיביות לדפי אינטרנט. רצה גם בצד השרת באמצעות Node.js.
URL - הכתובת שמזהה משאב באינטרנט, למשל דף אתר, וכוללת פרוטוקול, שם מארח ונתיב.
הערה - טקסט בקוד שמסביר אותו לבני אדם ואינו מבוצע על ידי המחשב.
חולשה - פגם או חולשה במערכת או בתוכנה שעלול לאפשר פגיעה באבטחה אם לא יטופל.
HTTP - פרוטוקול להעברת דפי אינטרנט ונתונים בין דפדפן לשרת. הגרסה המאובטחת שלו היא HTTPS.
עוגייה - קובץ קטן שאתר שומר בדפדפן כדי לזכור מידע על המשתמש בין בקשות, למשל מצב התחברות או העדפות.

הגנה נגד Reflected XSS רמת אבטחה גבוהה באתר DVWA
הרמה הגבוהה (High) ב-DVWA מראה איך נראה אתר שמוגן מ-Reflected XSS, ומסבירה למה ההגנה היא בעיקר שאלה של קידוד נכון של כל קלט שמגיע מהמשתמש.
איך בודקים ומה רואים
1. בדיקת השתקפות: מזינים מילה פשוטה כמו test יחד עם סימנים מיוחדים, ובודקים ב-view source (Ctrl+F) איך היא חזרה בקוד.
2. קידוד HTML entities: במקום הסימנים < ו-> הקוד מכיל ישויות כמו less than. מנוע התצוגה מציג אותן כרגיל, אבל מנוע ה-JavaScript מדלג עליהן.
3. ההגנה בצד השרת: המתכנת מפעיל פונקציה בשם htmlspecialchars על הערך לפני שהוא מוחזר למסך.
4. שני סוגי קידוד: קידוד URL (למשל רווח הופך ל-%20 או +) וקידוד HTML. אפשר לייצג את אותו תו גם בצורה עשרונית או הקסדצימלית.
למה המיקום בעמוד קובע
סקריפט לא מתבצע אם הוא נכנס לתוך תיבת טקסט, לתוך כותרת העמוד (title) או לתוך הערה. לכן חשוב להבין לאן הקלט חוזר בדיוק, ואם הוא מקודד. מקום שבו הקלט חוזר בלי קידוד נשאר פגיע.
קישורי חזרה
פרמטר שקובע לאן להחזיר את המשתמש אחרי התחברות הוא נקודת חולשה נוספת, כי השרת משתמש בו בלי בדיקה. ההמלצה: לוודא שהכתובת מתחילה ב-http או שהיא נתיב יחסי, ולא ב-javascript.
עוד אמצעי הגנה
אפשר לקשור את הקוקי ל-IP בטבלה בשרת ולדרוש התאמה. תקרת האורך של URL היא 2048 תווים.
אחרי ההרצאה אפשר להסביר מהי sanitization ולמה עדיף להשתמש בפונקציה מוכנה על כל שדה שמגיע מהמשתמש.
השיעור הבא בקורס: עדכון של DVWA בתוך Metasploitable2

פרקי ההרצאה: הגנה נגד Reflected XSS רמת אבטחה גבוהה באתר DVWA

  1. 00:00

    הגנה ברמת אבטחה גבוהה

  2. 00:41

    בדיקת השתקפות בעמוד

  3. 01:23

    הכרת HTML Entities

  4. 02:19

    פונקציית htmlspecialchars

  5. 02:56

    סוגי קידודים ב-URL ו-HTML

  6. 04:09

    איפה הקוד נכנס בעמוד

  7. 05:22

    סגירת שדה הקלט

  8. 06:20

    טריק ה-Autofocus

תמלול ההרצאה: הגנה נגד Reflected XSS רמת אבטחה גבוהה באתר DVWA

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

  1. 00:02

    שלום לכולם, היום נראה איך אפשר להגן נגד התקפות XSS ואנחנו ברמת High, ברמה הכי גבוהה שיש שהכל מוגן, ואנחנו ב-XSS Reflected ואיך מגינים, אז קודם כל בואו נראה גם איך מחפשים ואיך מגינים איך מתחילים לחפש, האם יש חולשה בכלל אני כותב נניח מילה טסט, שיהיה לי קל לאתר אותה אחרי זה בתוצאות טסט, ונותן את כל הסימנים הכי חשובים לי

  2. 00:32

    שאיתם אני אנסה לפרוץ ואני רואה שכאן זה השתקף זה נראה כאילו זה חשוף אבל איך בודקים אם זה באמת חשוף אני עושה רייט קליק view page source ועושה ctrl f ומחפש את המילה test יכלתי לכתוב כל מילה שרציתי ואני רואה פה הלו טסט ושימו לב במקום סימן גדול יש לי זה נקרא html entities קידוד של html או less than זה זה עכשיו מה זה אומר זה אומר

  3. 01:08

    למנוע של javascript לדלג על הסימנים האלו אבל למנוע תצוגה כן להציג אותם הרי יש מנוע קודם כל של javascript שעובר על הכל ואחרי זה מנוע של תצוגה של html שמציג את הכל אז המנוע של התצוגה מציג את זה כמו שצריך אתם רואים הוא הוא יודע את הכידוד הזה, שזה ה-Great than, Little than, שימו לב, את זה הוא לא כידד לי,

  4. 01:34

    ואת הסימן הזה של גרשיים כפולים הוא כידד לי ל-Quotas. אז ה-Sort זה בעצם לכודד את מה שהיוזר הכניס לכם, אבל לא את הכל, רק את הסימנים המיוחדים, ולכודד אותם בצורה כזאת שהמנוע של התצוגה יבין אותם, אבל המנוע של הביצוע של JavaScript ידלג עליהם.

  5. 01:54

    איך עושים דבר כזה? אנחנו יכולים פה ב-view source לראות מה הם עשו, הם עשו דבר נורא פשוט, הגיע להם מתכנת יותר טוב שלפני שהוא משחרר לי את ה-name מתוך ה-url, לפני שהוא מעביר לי אותו חזרה למסך, השרת, מה הוא עושה?

  6. 02:11

    מפעיל פונקציה שנקראת html special cars, כאילו תווים מיוחדים, הוא מקודד אותם ואז נותן לי את הפלט הזה שראינו שהוא מקודד.

  7. 02:22

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

  8. 02:35

    יש קידוד ל-URL'ים. URL'ים זה מה שלמעלה פה. אתם רואים פה URL'ים. דרך אגב, שמתם לב שה-URL איך הוא מקודד? כשיש רווח הוא מחליף אותו בפלוס או ב-120%.

  9. 02:50

    זה נקרא URL Encoding, לקודד את ה-URL למעלה. ויש קידוד של HTML, שזה מה שראינו, ה-Great than, Little than וכו'.

  10. 03:00

    אז HTML Entities ככה זה נראה, Less than ו-Greater than, ו-URL Encoding זה אחוזים. לדוגמה, רווח זה אחוז 20 או פלוס. בואו נראה איזשהו אתר שמקודד לנו ככה שתראו איך מקודדים דברים.

  11. 03:17

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

  12. 03:26

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

  13. 03:55

    זה וגם את זה ואני יכול להגיד לו לקודד הכל ואז הוא יקודד לי את כל האותיות, ופה הוא יקודד רק את הסימנים המיוחדים. איך הוא מקודד אותם? לפי דעתי זה UTF-8.

  14. 04:07

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

  15. 04:21

    ב-view source אנחנו רואים greater than, אוקיי עכשיו מה קרה לנו פה מאוד מאוד מעניין שנכנסנו באמצע התגיד של pre אתם רואים pre כאן וpre כאן בגלל שהטקסט שלנו האינפוט שלנו נכנס בתוך התגיד pre לא הייתה לו בעיה לבצע את זה אם זה לא היה מקודד אבל מה היה קורה אם לא היינו נכנסים בתגיד pre אם האינפוט שלנו היה נופל נניח על תגיד האינפוט של הטקסט בוקס מה זאת אומרת זאת

  16. 04:52

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

  17. 05:16

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

  18. 05:31

    למה? כי מה שבתוך הטקסט בוקס סתם לא התבצע. אז מה הייתי צריך לכתוב כאן במקום ה-X? הייתי צריך לסגור את הגרש ואז כביכול הייתי סוגר את ה-HTML ואז פותח סקריפט חדש.

  19. 05:47

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

  20. 06:18

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

  21. 06:29

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

  22. 06:39

    חייבים קודם כל לסגור תיבת טקסט, ורק אחרי זה הוא יבצע את הסקריפט. אפשר לא לסגור תיבת טקסט, אפשר לסגור רק את ה-string של ה-value, value זה מה שנכנס בתוך התיבה, ולהגיד לו auto focus, שתתפוס focus על ה-input הזה, זה הכחול הזה, שימו לב, focus, זה כשהוא נהיה כחול

  23. 06:59

    וכשהיא תתפוס פוקוס תפעיל

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

ההרצאה הקודמת: התקפת Reflected XSS - רמת אבטחה בינונית באתר DVWA

ההרצאה הבאה: עדכון של DVWA בתוך Metasploitable2

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

  • הגנה מהתקפות XSS
  • הגנה נגד התקפה MITM
  • רשומת SPF - הגנה נגד פישינג - DNS
  • אבטחה עם VM Templates

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

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