
הטקסט המלא של הדקות הראשונות בהרצאה «יצירת Reverse Shell על ידי Powershell - חלק 1» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
שלום לכולם, בהרצאה הזו אנחנו רוצים ליצור רוורס של בלי להעתיק שום תוכנה לקליינט, בלי להעתיק לו נטקאט ובלי להעתיק לו שום תוכנה לווינדוס 10. אנחנו נשתמש בפאוורשל המובנה, יש לנו את הכלי המדהים של פאוורשל, ואנחנו ננצל את שורת הפקודה המחודשת הזאת בשביל ליצור רוורס של אלינו בחזרה לתוך קאלי, אנחנו לא נתקין שום דבר על הקליינט,
אנחנו לא נעתיק אליו שום קובץ, רק נריץ פקודה אחת שתעשה לנו רוורסשל. בואו נראה קודם כל שהפאוארשל בקליינט הזה הוא ברירת מחדל, לא שיניתי שום אבטחה ושום דבר.
לדוגמה, גט אקזיקיושן פוליסי נמצא במצב רסטריקטד, מוגבל, זה אומר שאסור להריץ סקריפטים. ואני לא הולך להריץ סקריפטים, אני הולך להריץ פקודה אחת שתעשה לי רוורסשל.
וזה הולך להיות מדהים. תחשבו שאני מתחבר לקורבן שלי, או גורם לו להריץ פקודה אחת, או מנצל איזושהי חולשה, מריץ פקודה אחת, בלי להעתיק קובץ, בלי שהאנטיווירוס יעלה עליי, כי לא העתקתי שום דבר להארד דיסק.
אני מריץ פקודה אחת ואני משתלט עליו דרך רוורס של. אז בואו נראה איך כל זה קורה. קודם כל אנחנו צריכים בקאלי לפתוח ליסנר שיאזין לחיבור, שיחכה שהקורבן יתחבר.
אנחנו באופן רגיל נפתח נטקאט במצב ליסנר בפורט 443. שימו לב שזה פורט מתחת ל-1000 ולכן חייבים סודו וחייבים לרשום את הסיסמה של רות של אדמיניסטרטור והנה הוא ליסינג הוא ממתין בפורט 443. עכשיו הקורבן יתחבר לכאן ואנחנו נשתלט עליו ונרשום איזה פקודה שבא לנו פה פה יהיה ה-CMD של הקורבן
בואו נראה איך זה קורה איך אפשר בלי להעתיק לשם שום קליינט והכל בזכות פאורשל, עכשיו אני הולך להראות לכם סקריפט ולעבור שורה שורה, זה לא נוח בחלון הזה, אז יש חלון של אותו פאורשל, טיפה יותר יפה, סביבת פיתוח יותר יפה של פאורשל, שנקראת פאורשל ISE, עכשיו זה רק לצורך לימוד, אחרי זה אני
אראה לכם את הפקודה, איך אפשר להפעיל אותה דרך CMD רגיל, אבל כדי שנבין מה הולכת לעשות פקודה אחת הזאת, אנחנו נראה סקריפט, הסקריפט הזה, אנחנו נהפוך אותו אחרי זה לשורה אחת כל הפקודות יהיו בשורה אחת ונפעיל את זה מ-CMD אבל לפני שאנחנו נעשה את זה אני רוצה לעבור ולהסביר
לכם מה זה עושה יש לנו פה את קאלי בואו נבדוק את ה-IP שלה נעשה פייל ניו טאב טאב חדש יש לנו פה טאב חדש ifconfig מראה לנו שה-IP זה 122-153 יפה מאוד לכאן הוא צריך להתחבר יופי ואנחנו מחכים לחיבור שלו אז הדבר הראשון שקורה בסקריפט שלנו זה פותחים סוקט פותחים קונקט חיבור ל-IP של קאלי בפורט 443. שימו לב, אני פותח פה חיבור על ידי TCP Client.
אז מה עושה הפקודה הראשונה? הפקודה הראשונה יוצרת אובייקט חדש בזיכרון שמתחבר ל-IP של קאלי ומכניסה את כל האובייקט החדש הזה לתוך משתנה Dollar Client. בואו נריץ רק את הפקודה הזאת.
הרצנו רק את הפקודה הזאת ועכשיו Dollar Client שלנו זה משתנה שמכיל ומצביע לחיבור אתם רואים דולר קליינט מצביע על חיבור הוא במצב קונקטד והוא יכול לקבל 65 אלף בתים של מידע ויש לנו פה חיבור מוכן שמחכה בוא נראה מה קרה בקאלי אחרי שהרצנו פקודה אחת קונקטד הנה מישהו התחבר מישהו מחובר
והחיבור הצליח הפקודה הבאה מה היא תעשה הדולר סטרים יצביע לפונקציה שנקראת גט סטרים בתוך הקליינט עוד פעם בתוך החיבור הזה יש כל מיני מאפיינים אתם רואים כל מיני מאפיינים בואו אני אראה לכם בדולר קליינט הזה במשתנה דולר קליינט נשים נקודה אנחנו רואים כל מיני מאפיינים לדוגמה למי אנחנו מחוברים האם אנחנו מחוברים
ויש גם כל מיני פונקציות לאובייקט הזה של הדולר קליינט שזה הקונקשן החיבור ואחת הפונקציות שלו נקראת get stream עכשיו במקום לכתוב כל פעם דולר קליינט גט סטרים אנחנו יכולים להגיד שבדיוק לפונקציה הזאת יצביע משתנה חדש משתנה שנקרא דולר סטרים אז דולר סטרים זה כמו
שורט קאט כמו קיצור דרך לפונקציית גט סטרים אנחנו מריצים את זה ועכשיו יש לנו את הדולר סטרים הזה דולר סטרים הזה יש לו גם כל מיני מאפיינים כמו אורך וטיים אאוט ולהתחיל לקרוא ולסגור קונקשן יש לו את כל המאפיינים שלו ושימו לב זה בדיוק אותם מאפיינים כמו שהייתי כותב דולר קליין גט סטרים נקודה זאת אומרת זה בדיוק אותו דבר הוא פשוט מצביע לשם כמו
קיצור דרך שיהיה לנו טקסט יותר קריא ויותר ברור אז אם אני אעשה פה נקודה אז הוא לא עוזר לי זה היה אותו דבר זה למעשה אביפנוכו שמה פשוט הוא לא מספיק חכם בשביל להראות לי את זה לצערי הרב כן אני רואה שהוא לא מספיק חכם גט סטרים טוב אם זה היה ויזואל סטודיו אמיתי הוא היה מספיק חכם זאת סביבת פיתוח לא מספיק חכמה אז כרגע פתחנו קונקשן ועשינו לנו איזשהו שורטקאט יפה מאוד מגיעים
לפקודה הבאה הפקודה הזאת מה היא עושה אל תפחדו אני יודע שזה נראה מפחיד אז קודם כל אנחנו מתחילים מסימן שווה ימינה ללכת תמיד הולכים מסימן שווה ימינה מבינים מה הולך בצד ימין ואז את כל מה שקרה בצד ימין מכניסים למשתנה בצד שמאל בצד שמאל יש לנו משתנה בייץ ולשם נכניס עכשיו משהו בוא נבין מה אנחנו הולכים להכניס לשם, יש לנו 0 ו-2 נקודות, אם אני ארשום פה 0 ו-2 נקודות
נניח 5, יצא לנו מספרים 0 עד 5, נעשה 0 עד 7, יצא לנו 7 מספרים. עכשיו אנחנו לוקחים את המספרים האלו ומשרשרים אותם לפקודה אחרת, אני יכול לשרשר אותם לאיזה פקודה שבא לי, לדוגמה לפקודת 4Each, תיקח כל אחד שיגיע ותחבר אותו בעצמו, אתם רואים מה קרה פה?
הוא לקח כל אחד מהמספרים 0 עד 7 וחיבר אותו פעמיים. אני יכול לעשות לו גם כפול פה ואז יצא לי כמו חזקה 2.
אתם רואים? זה כל מספר 1 עד 7 כפול עצמו. עכשיו במקום לכתוב מילת for each אני יכול לכתוב פה אחוז. אחוז ייתן אותה תוצאה.
אחוז ו-for each זה אותו דבר. זה כמו קיצור רק בואו נעשה את זה מספרים עד 3 שיהיה לנו יותר קל. שתראו שזה בדיוק אותו דבר for each ואחוז. יפה מאוד.
ודבר אחרון, אנחנו יכולים לכתוב פה פשוט אפס. מה זה יעשה? כלום. פשוט ידפיס לי אפס שלוש פעמים.
נכון, אפס עד שלוש זה ארבע פעמים. עכשיו תשאלו אותי, מה עשית בזה? תם. עשיתי שישים וחמש אלף פעמים, עבור כל מספר, מאפס עד שישים וחמש אלף פעמים, עבור כל מספר כתבתי אפס.
למעשה הוא יוצר מערך בגודל שישים וחמש אלף בתים עם מספר אפס בפנים. זהו. פשוט מאוד יהיה מלא אפסים. בואו ננקה את המסך פה, ננקה את המסך שיהיה לנו מסך נקי.
נריץ רק את החלק הזה. מה שקרה זה שיש לנו 65,000 פעמים אפס, אני עוצר את הריצה שלו פה בכפתור האדום, עולה הכי למעלה, בגלל שננקיתי מסך אז זה הכי למעלה, ואני רואה שיש לי פה 65,000 פעמים מספר אפס.
למה? בשביל ליצור מערך שקוראים לו בייטס, מערך ריק בגודל אפס, לאפס את הביפנוכו של המערך. בסופו של דבר יצא לנו פה משתנה בשם בייץ. המשתנה הזה בשם בייץ יכיל בפנים 65,000 אפסים.
סתם מאפסים מערך. מערך זה הרבה מאוד תאים של אפס. למה? כדי להכין אותו לקליטת נתונים. ניקינו אותו. ועכשיו מגיע החלק הכי חשוב.
אחרי כל ההכנות שלנו אנחנו עושים stream read. אנחנו קוראים את מה שהגיע לנו מהרשת. זוכרים המשתנה stream הזה? הוא מצביע על משתנה דולר קליינט גט סטרים ודולר קליינט מצביע לנו בעצם לחיבור לסוקט מול השרת שלנו אז חיבור מול השרת מצביע עליו דולר קליינט
בתוכו יש פונקציה גט סטרים שמצביע עליה דולר סטרים ועכשיו אנחנו מגיעים בתוך הדולר סטרים ועושים read קוראים לאן אנחנו נקרא את המידע בסוגריים אנחנו מעבירים לו לאן לקרוא את זה ואנחנו קוראים את זה לתוך הבייטס הזה לתוך ה-65,000 אפסים שהכנו מראש.
הפקודה הזאת, בואו נראה אותה, בואו נעתיק אותה ונעשה אותה פה בצד. הפקודה הזאת תפעיל רידר שיקרא לתוך ה-bytes הזה, לתוך המערך הריק הזה עם האפסים, את המידע מתוך הרשת.
הוא יתחיל לקרוא ממיקום 0 ויקרא את כל ה-65,000 בתים שנכניס לו, ואחרי שהוא יסיים לקרוא הוא יכניס את המספר תכלס שהוא קיבל, מספר האותיות תכלס שהוא קיבל לדולר איי.
דולר איי הולך להיות משתנה שמציין כמה אותיות נקלטו. בואו נריץ רק את הפקודה הזאת, אני מריץ אותה בנפרד.
אני עושה who am I enter, כשעשיתי enter הוא היה צריך להיקלט כאן. בואו נראה שהוא נקלט, דולר איי, לא נקלט כלום. בואו ננסה עוד פעם, נריץ רק את הפקודה הזאת.
who am I enter, אה הנה קלט. אתם רואים 7, למה 7? 7 כי יש פה 6 אותיות ו-enter. שש אותיות ואנטר אז הוא קלט הוא אמ-איי כנראה שהשתיים הזה זה היה האנטרים שהכנסנו לפני כן זוכרים שהכנסנו אנטרים הנה זה הפעמיים