PracticU

התקפת Buffer Overflow
שלב 3 - זיהוי תווים פסולים

בלי כתוביותעם כתוביות
PracticU › קורס סייבר למתחילים - Hacking - בדיקות חוסן תשתיתי ופריצה ל-Windows 10/11 - קורס זה נדרש למבחן ההסמכה היוקרתי OSCP › התקפת Buffer Overflow שלב 3 - זיהוי תווים פסולים
מילון מושגים:
זיכרון - רכיב מהיר ונדיף שבו המחשב שומר נתונים ותוכניות בזמן ריצתם. תוכנו נמחק עם כיבוי המחשב.
סקריפט - קובץ המכיל רצף פקודות שמבוצעות על ידי מפרש, לרוב כדי להפוך משימות לאוטומטיות.
מערך - מבנה נתונים שמאחסן אוסף ערכים מאותו סוג ברצף, שאפשר לגשת אליהם לפי מספר מיקום (אינדקס).
תיקייה - מכל במערכת הקבצים שמשמש לארגון קבצים ותיקיות אחרות בתוך מבנה היררכי.
בינארי - ייצוג מידע בבסיס 2 בעזרת הספרות 0 ו-1. גם קובץ הכולל קוד מכונה ולא טקסט קריא.
אופרטור - סימן בקוד שמבצע פעולה על ערכים, כמו חיבור, השוואה או פעולה לוגית.
VPN - רשת פרטית וירטואלית שיוצרת חיבור מוצפן דרך האינטרנט, כאילו המכשיר מחובר ישירות לרשת מרוחקת.
מעבד - יחידת העיבוד המרכזית של המחשב, שמבצעת את הפקודות של התוכניות ומנהלת את החישובים.

התקפת Buffer Overflow שלב 3 - זיהוי תווים פסולים
בשיעור זה אנו מגלים אילו תווים אסור לשלוח על הקו במתקפת גלישת החוצץ, כי תווים מסוימים גורמים למקבל לחשוב שהתקשורת הסתיימה או משבשים את העברת הנתונים. אנו מייצרים את כל הבתים האפשריים בעזרת כלי המונה, שולחים אותם בתוך החוצץ, ומשווים בין מה שנשלח לבין מה שהגיע לזיכרון עד לגילוי רשימת התווים האסורים המדויקת.
נושאי הסיכום המוצגים בשיעור:
1. המטרה של השלב: לגלות מה הם התווים הפסולים, התווים שאסור לשלוח על הקו, כי אם נעביר אותם הוא יחשוב שהתקשורת נגמרה והסתיימה. לקורבן שלנו יש שירות שפועל ומחכה, ואנחנו רוצים לנסות את כל הצירופים האפשריים מאפס אפס, אפס אחד, אפס שתיים וכן הלאה, את כל הזוגות האפשריים מאפס עד F, כדי לראות מה אינו נכנס לזיכרון.
2. השיטה שהאתר מציע מול השיטה שלנו: האתר מציע להריץ סקריפט שייצר את כל הזוגות האפשריים בין 1 ל-256, את כל הבתים האפשריים. אבל יש שיטה נוחה יותר: להשתמש בכלי המונה ולבקש ממנו לבנות מערך בתים, כלומר את כל האפשרויות בלי אפס אפס. אפס אפס אסור בוודאות, כי הוא מסמן את סוף מחרוזת.
3. למה תווים אסורים מזיקים: אנו מזכירים שיש לנו את הפיילואד שאנו רוצים לשלוח לקורבן, הפצצה. לדוגמה, תו אפס אפס אם יהיה באמצע כל המחרוזת הזאת יעצור אותה, כי הוא יחשוב שזה סוף המחרוזת. כל המשתנים מתאספים בסוף למחרוזת אחת שנקראת חוצץ, ואת החוצץ שולחים על הקו. כדי שהחוצץ לא ייעצר באמצע אסור לשים בו אפס אפס, כי קיים תקן שאומר שסוף של מחרוזת הוא אפס אפס.
4. מדוע זה חשוב לשלב הבא: בשלב הבא אנו עומדים לייצר את הפיילואד הזדוני, את הקוד הזדוני, ולכן צריך לגלות מראש באילו תווים אסור להשתמש, כדי שהפיילואד שייבנה יעבור על הקו בשלמותו.
5. ייצור מערך הבתים בעזרת המונה: במקום לייצר את כל האפשרויות בסקריפט ואז לשלוח אותן, מייצרים אותן בעזרת פקודת מערך הבתים של המונה, טריק שהאתר לא חשב עליו אבל הוא עדיף. קודם מגדירים את תיקיית העבודה של המונה, שעדיין לא קיימת, ואז מריצים את הפקודה. המונה הוא סקריפט עזר בתוך הדיבאגר, והוא מייצר את כל האפשרויות: אפס אחד, אפס שתיים עד אפס F כי זו כתיבה הקסדצימלית, ואז אחת אפס, אחת אחת וכך הלאה עד F F. סך הכל 256 אפשרויות, אבל ביקשנו בלי האפס, ולכן עד 255 אפשרויות.
6. קובץ הבתים שנוצר: הכלי משים את התוצאה בקובץ טקסט בתיקייה שנוצרה לו, יחד עם ההפעלה שלנו. בתוך התיקייה יש את ההפעלה שלנו, את הבינארי ואת קובץ הטקסט, וזה בדיוק התווים שרוצים לשלוח ולבדוק מי מהם לא עבר ולא הצליח לעבור.
7. הכנסת התווים לסקריפט: ההוראות אומרות לייצר את התווים האלה, ואחרי שמייצרים אותם מכניסים אותם לתוך משתנה של פיילואד, שולחים ואז מריצים את המונה כדי שתעשה השוואה. בסקריפט, במקום האותיות C הזדונות, מכניסים את כל התווים. לא בטוחים אם צריך אופרטור הוספה או לא, אז עושים אותו למקרה חירום, כי אופרטור הוספה מחבר את השורות יחד ומוסיף למשתנה הפיילואד עוד שורה. בקיצור, הפיילואד מכיל את כל התווים האפשריים עד F F בסוף, וכך נבדוק את כל הבתים ונראה מה לא יעבור. צריך גם לשנות בסקריפט את כתובת ה-IP כי היא התחלפה, ודרך אגב אם ממתינים יום, למחרת צריך להתחבר ל-VPN מחדש ולהפעיל את הקורבן מחדש.
8. הרצה והקריסה: חוזרים לחלון המעבד של הדיבאגר ומריצים את הסקריפט עם פייתון 3. הסקריפט כולל כעת את כל התווים האסורים. מתקבלת קריסה, אבל הקריסה פחות מעניינת אותנו. קודם כל מסתכלים שהאות B עדיין נכנסה אל מצביע הפקודה הבאה לביצוע, וזה מצוין. השאלה היא מה קרה אחריה, כי הכנסנו את האות A 1978 פעמים, אחר כך את האות B אל האוגר, ועכשיו בודקים את הפיילואד שאחריו, מה מותר להכניס אליו, ואילו תווים לא נכנסו לשם.
9. בדיקה ראשונית בעין: בתצוגה למעלה רואים שהכל היה אות A, אחר כך אות B ועכשיו התווים: אפס אחד, אפס שתיים, אפס שלוש, אפס ארבע, אפס חמש, אפס שש, ופתאום מבחינים שאין אפס שבע. אפשר לראות את התווים גם בחלונות הזיכרון: לוחצים על אוגר מצביע המחסנית, שמצביע בדיוק על הכתובת שבה המחסנית נמצאת בזיכרון, וכך המעבד יודע איפה המחסנית. אנחנו דרסנו את המחסנית הזאת, ומבקשים מהדיבאגר להציג את אותה כתובת בחלון הדאמפ, שמציג את התוכן משמאל לימין בצורה נוחה יותר מהתצוגה של המחסנית עצמה.
10. השוואה אוטומטית בעזרת המונה: במקום לעבור ידנית ולחפש מה עוד חסר חוץ מהתו שמצאנו, עוזרים בסקריפט ההשוואה של המונה, שמשווה ביחס לקובץ הבתים שיצרנו קודם. צריך רק להגיד לו איפה מתחילה ההשוואה, וההוראות אומרות לרשום את הכתובת של אוגר מצביע המחסנית, שהוא ראש המחסנית. מעתיקים את הכתובת, מזינים אותה למונה, ואומרים לו להתחיל להשוות את כל התווים שהיו בקובץ ביחס לזיכרון החל מכתובת מסוימת, והוא יציין מה חסר.
11. קריאת תוצאות ההשוואה הראשונה: המונה מציין שחסרים אפס אפס, אפס שבע שגילינו, וגם אפס שמונה. אפס שבע ואפס שמונה צמודים, וכשתווים צמודים זה בטח שהראשון פגע בשני. כך גם שתיים E ושתיים F צמודים ולוקחים רק את הראשון, וכך A אפס ואחד צמודים ולוקחים רק את הראשון. מה שלמדנו מזה שצריך עוד בדיקה, והפעם לא רק להוציא את אפס אפס מחוץ למשחק אלא גם את אפס שבע, את שתיים E ואת A אפס. מייצרים קובץ חדש, ואחרי תקלה קטנה בהזנה הכלי מייצר אותו. בקובץ יש עכשיו את הקובץ הישן שהועבר כגיבוי ואת הקובץ החדש, שבנוי כפי שביקשנו, בלי התווים המסוימים שהוצאנו.
12. הרצה חוזרת ואימות: לוקחים את כל הרשימה החדשה, מכניסים אותה לסקריפט במקום השורות הקודמות, שומרים, מריצים את התוכנה מחדש בעזרת כפתור האיפוס או בפתיחה מחדש, ומריצים את הניצול. מתקבלת קריסה, האות B נכנסת אל האוגר, ובזיכרון רואים את האותיות A ואז B ואז את כל התווים החדשים. נכנסים אל אוגר מצביע המחסנית, מציגים את הכתובת בחלון הנוח, ורואים שהאפס שבע חסר אבל האפס שמונה כבר לא חסר. עושים השוואה נוספת עם אותה פקודה, רק שמחליפים לה את כתובת המחסנית הנוכחית, ומבקשים להשוות את הקובץ החדש, ללא התווים האסורים, מול הכתובת הזאת בזיכרון.
13. התוצאה הסופית: ההשוואה מציגה ללא שינוי, כלומר הכל היה זהה, ומשמעות הדבר שאלה בדיוק התווים האסורים: אפס אפס, אפס שבע, שתיים E ו-A אפס. רושמים אותם בצד לנוחות, כי אלה התווים האסורים ונצטרך אותם בהמשך.
14. הצעד הבא: עכשיו כשגילינו מהם התווים האסורים אפשר לייצר את הפיילואד, את הפצצה שלנו, ולהכניס אותה לשם. פשוט צריך להגיד לכלי ייצור הפיילואדים שייצור לנו את הפיילואד בלי התווים האסורים. כלומר, במקום האותיות C הוא יכניס את הפיילואד, ואז נשלח את האותיות A, את האות B, ונגיד לאות B להפעיל את האות C. זו הייתה המטרה, ועכשיו נייצר את הפיילואד הזדוני ללא התווים האסורים והכל אמור לעבוד. יש עוד כמה דברים בדרך, ועליהם נדבר בסרטון הבא.
בשיעור הבא נעסוק בנושא התקפת Buffer Overflow שלב 4 - כתובת קפיצה + יצירת Payload.
בסוף השיעור ייצרנו את כל 256 הבתים האפשריים, שלחנו אותם בתוך החוצץ, השווינו בעזרת כלי המונה בין מה שנשלח לבין מה שהגיע לזיכרון, וגילנו את רשימת התווים האסורים המדויקת שהפיילואד שלנו ייבנה בלעדיהם.
SR12614HE

פרקי ההרצאה: התקפת Buffer Overflow שלב 3 - זיהוי תווים פסולים

  1. 00:00

    הכרת תווים פסולים

  2. 00:56

    חזרה על רעיון ה-Payload

  3. 01:35

    הבעיה עם הבית האפס

  4. 02:32

    יצירת רשימת בתים עם Mona

  5. 03:51

    שילוב הרשימה בסקריפט

  6. 04:49

    הכנת הסקריפט לבדיקה

  7. 05:30

    הרצת הבדיקה על הקורבן

  8. 06:05

    השוואת הזיכרון לאחר הקריסה

תמלול ההרצאה: התקפת Buffer Overflow שלב 3 - זיהוי תווים פסולים

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

  1. 00:02

    שלום לכולם, בהרצאה הזו אנחנו רוצים לגלות מה הם התווים שאסור לשלוח על הקו מה הם התווים הפסולים כי אם נעביר אותם על הקו הוא יחשוב שהתקשורת נגמרה, הסתיימה אז יש לנו פה את הקורבן שלנו ולקורבן יש פה סרוויס שפועל ומחכה ואנחנו רוצים לנסות לעשות את כל הקומבינציות האפשריות 0, 0, 0, 1, 0, 2, 0, 3

  2. 00:27

    ככה את כל הזוגות האפשריים של 0 עד F ככה כמו פה אתם רואים לראות מה לא ייכנס לזיכרון מה אי אפשר הם מציעים לנו להריץ פה סקריפט שייצר לנו את כל הזוגות האפשריות בין 1 ל-256 את כל הבתים האפשריים אבל יש לי שיטה יותר נוחה אני משתמש במונה ואומר לה לבנות לי ביט אריי ביט אריי זה אומר בייט אריי זה אומר כל האופציות בלי 0.0

  3. 00:59

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

  4. 01:33

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

  5. 01:52

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

  6. 02:08

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

  7. 02:21

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

  8. 02:39

    אתם רואים, הוא עושה 0, 1, 0, 2, 0, 3, 0, 4, 0, 9, 0, A, נכון? כי זה אקסה, עד 0, F. אחרי 0, F, 1, 0, 1, 1, 2, 1, 3. שוב, אחרי זה 2, 3, 4, את כל מה שרק אפשר לחשוב עליו.

  9. 02:57

    סך הכל יש 256 אפשרויות, מ-0 עד F, F. אבל אמרנו לו בלי אפס, אז עד 255 אפשרויות, עד FF. איפה הוא שם אותם? הוא שם אותם בקובץ ביתרי TXT בתוך C, מונה או ACP.

  10. 03:14

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

  11. 03:32

    אוקיי, אנחנו עושים את זה כתוב לנו פה לייצר את התווים האלו ואחרי שאנחנו מייצרים אותם אנחנו מכניסים אותם לתוך variable payload לתוך איזשהו משתנה payload שולחים ואז מריצים את מונה שתעשה compare שתעשה השוואה בוא נעשה את זה אז אנחנו באים פה לסקריפט במקום הccc הזה

  12. 03:55

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

  13. 04:21

    למשתנה פיילאוד עוד שורה אני לא בטוח שחייבים את זה אבל שיהיה אוקיי אז בקיצור הפיילאוד שלי מכיל את כל התווים האפשריים מ-0 1 0 2 0 3 21222345 וככה עד שמגיעים בסוף בסוף ל-FF זה אומר אני בודק את כל הבתים בודק מה לא יעבור לי אוקיי יופי מה בסקריפט עוד אני צריך פה לשנות את כתובת ה-IP כי

  14. 04:49

    היא גם השתלטה לי יופי דרך אגב אם אתם מחכים יום אז יום למחרת צריך להתחבר ל-VPN מחדש ולהפעיל את הקורבן מחדש אוקיי אז יש לנו פה את הסקריפט תקין מה אנחנו עושים? אנחנו רוצים להריץ אותו, זה אני סוגר, חוזר חזרה ל-CPU וכותב פייתון 3.exploit py שאני מזכיר לכם exploit py זה עכשיו כולל את כל התווים האסורים כן אז יש לנו פה exploit py אני מריץ אותו הנה יש לנו קריסה

  15. 05:26

    אבל הקריסה פחות מעניינת אותי קודם כל מה אני רואה ש-BBB עדיין נכנס לתוך EIP שזה מצוין השאלה זה מה קרה אחריו, הרי מה עשינו, הכנסנו אות A 1978 פעמים, אחרי זה הכנסנו את B ל-EIP ועכשיו אנחנו בודקים את ה-payload שאחריו, מה מותר להכניס אליו

  16. 05:49

    ואנחנו צריכים לבדוק איזה תווים לא נכנסו לכאן, תסתכלו פה למעלה, אתם רואים הכל היה A, אחרי זה B ועכשיו התווים, אתם רואים 0, 1, 0, 2, 0, 3, 0, 4, 0, 5, 0, 6, הופה, אני רואה שאין פה 0, 7, אתם רואים פה?

  17. 06:06

    נכנסו התווים לזיכרון, אני דרך אגב יכול גם פה לראות אותם, בואו נראה. אני לוחץ על ESP, ש-ESP, העוגר של ESP,

לקורס המלא: קורס סייבר למתחילים אונליין

ההרצאה הקודמת: התקפת Buffer Overflow - שלב 2 - שליטה על EIP

ההרצאה הבאה: התקפת Buffer Overflow - שלב 4 - כתובת קפיצה + יצירת Payload

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

  • בניית שלב - חלק 1
  • תווים - Chars (שפת #C)
  • התקפת CSRF
  • בדיקת תוכן ג'ייסון - תווים מיוחדים

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

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