
go build, כי בקובץ אקזה מוכן אפשר להסתיר קוד זדוני שקשה לגלות בשפת מכונה. בקוד פתוח, בשפה עילית נוחה לקריאה, קל לבדוק מה הכלי עושה.go build שמייצר קובץ הרצה - קובץ ELF ללינוקס או PE32 לווינדוס, בהתאם לפלטפורמה שמבקשים.Invoke-WebRequest.chisel server בפורט 8000 שמחכה לחיבורים, ובקורבן מריצים chisel client http://...:8000 reverse ...:13445. בגלל שה-firewall בצד הקורבן חוסם כניסה, התוקף נשאר השרת שמקבל את החיבור, אך לאחר ההתחברות התוקף הוא שבפועל "יוצא" לרשת הפנימית של הקורבן.git clone - הורדת קוד המקור של Chisel.go build - קומפילציה לקובץ הרצה.Invoke-WebRequest - הורדת הקובץ במחשב הקורבן.chisel server ו-chisel client ... reverse - הקמת החיבור ההפוך.הטקסט המלא של הדקות הראשונות בהרצאה «יצירת HTTP Tunnel ב-Windows עם Chisel» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
שלום לכולם, בהרצאה הזו אנחנו נעשה HTTP טאנל דרך שרת Windows מרשת חיצונית לתוך הלאן הפנימי. זאת אומרת, אנחנו פרצנו לתוך המחשב הזה ורוצים דרכו להיכנס ללאן הפנימי.
אבל הפיירוול בדרך מאפשר לנו רק HTTP. אז אנחנו רוצים HTTP טאנל שיקח אותי מבחוץ פנימה. המטרה שלי להעביר את כל התקשורת של TCP שלי דרך טאנל של HTTP. דרך אגב, מה זה תקשורת של TCP?
זה גם שיתופים, זה גם Remote Desktop, זה גם סריקת פורטים של Nmap, זה גם העברת הקבצים ב-FTP, שליחת מיילים, זה הכל TCP.
למעשה, אני לוקח פאקט רגיל של כל תוכנה ב-TCP ועוטף אותו ב-HTTP כדי כשהfirewall יבדוק את הפאקט בפנים, יעשה Deep Inspection, בדיקת עומק, יראה שזה HTTP רגיל, אז הוא רואה שזה HTTP אבל הוא לא מבין מה יש בפנים והוא נותן לפאקט שלי לעבור, אבל בתוך הפאקט הזה יישב
TCP רגיל מכל אפליקציה שאני ארצה, מכל פרוטוקול שאני ארצה ואנחנו נראה בסוף הסרט שדרך הטאנל הזה אני נכנס בכלל לשיתופים ל-SMB.
בקיצור, צ'יסל יעטוף לי פאקטים רגילים של כל אפליקציה שאני ארצה ב-HTTP ואחרי העטיפה ב-HTTP הוא מעביר את זה לסוכן שלו שנמצא ברשת הפנימית שיקלף את האריזה החיצונית של ה-HTTP וישחרר את הפאקט המקורי לתוך ה-LAN הפנימי של הקורבן.
כך אני מתגבר על Deep Inspection על בדיקת עומק חכמה שעושה Firewall. אנחנו יכולים לראות שהשרת הזה יש לו גם רשת פנימית 192.168 וגם כרטיס רשת חיצוני 10.100 והתוקף שלי נמצא ברשת החיצונית 10.100 IP אדרס מראה לי פה שאני ב-10.100 למה אני מתעקש על הצ'יסל? כי הוא עובר לי את הפיירוול ב-HTTP זאת הגדולה שלו נעשה גיט קלון ושימו לב לפני
הגיט קלון אין לי תיקיה של צ'יסל אחרי הגיט קלון הוא מוריד את הקוד מקור מתוך הגיטאב ואפשר לראות כאן שנוצרה תיקייה שנקראת צ'יסו ויש בתוכה את כל הקוד ואת כל הפקודות שהם רשמו כי זה אופן סורס ואני יכול לבדוק אותם ואז לקמפל לבד לקמפל זה אומר להפוך את שפת התכנות שבה כתבו את הקוד מקור לשפת מכונה שאותה מבין המחשב בשפת המכונה הזאת גם נקראת
אסמבלר ומאוד מאוד קשה להבין אותה ולכן המתכנתים כותבים הכל בשפות נוחות שפות עיליות ואז הקומפיילר הופך את זה משפה נוחה למתכנת לשפת מכונה שברורה למחשב שימו לב תמיד נותנים לנו את הקובץ בשפת מכונה כדי שנוכל להריץ אותו אבל אם יש לי גם את קוד המקור שעשה את שפת המכונה הזאת
אז זה נקרא קוד פתוח ואם יש לי קוד פתוח אני יכול לבדוק את הקוד בצורה נוחה וכיפית לראות מה קורה בתוכנה הזאת ואז לקמפל אותה לבד לשפת מכונה כי בקובץ הסופי בשפת המכונה אפשר להוסיף כל מיני סוסים טרויאניים בלי שאני אעלה על זה כי שפת מכונה הזאת מאוד מסורבלת לקריאה ולהבנה לעומת זאת בשפת תכנות המקורית נניח c-sharp שפת go ג'אווה, זה לא משנה
באיזה שפה, כל השפות החדשות הן ממש נוחות לקריאה ונורא קל לבדוק מה קורה שם. כמובן שצריך לדעת לתכנת. אז להשחיל משהו זדוני באקזה מוכן מאוד פשוט, כי הלקוח לא ישים לב ויריץ את הקובץ, לעומת זאת להשחיל משהו זדוני ומסוכן בקוד פתוח מאוד קשה.
בגלל זה אני מעדיף לקמפל לבד את קוד המקור אחרי שאני בודק אותו, ולא לסמוך על אקזה מוכן, לך תדע מה יש שם. אני עכשיו בלינוקס רוצה להראות לכם מה קורה אם אני לא רוצה להוריד כאן את הרליס המוכן, אלא אני רוצה לקמפל לבד ולא לסמוך על הקמפול שלהם.
יכול להיות שהם הכניסו לי איזה משהו כאן בתוך הקובץ אקזה הזה. הרליס הזה, אני לא יודע מה יש בפנים. אז אני יכול להוריד את קבצי המקור, לבדוק אותם ולקמפל לבד. אני רוצה להראות לכם איך עושים את הבילד הזה, את הקומפילציה הזאת.
אז אני עושה קודם כל update, מעדכן את קאלי שלי, ואז מתקין את שפת go שבה כתבו את הכלי הזה. אז אנחנו מתקינים את השפת go, ואז אנחנו נעשה go build.
go build ייקח את הקובץ makefile ויבצע build וייצור לנו בסוף צ'יסל להרצה. אני מלמד אתכם איך לקמפל לבד קוד מקור. אז כל מה שעשיתי עד עכשיו זה שכפלתי את קוד המקור, עדכנתי את שפת התכנות, ואני עושה go build.
רק שאני מוסיף פה שני דגלים שיתפוס פחות מקום תסתכלו לפני שאני מתחיל כאן יש לי make file אבל אין לי קובץ צ'יסל ברגע שאני אעשה go build תסתכלו שיופיע פה אחרי כל ה-build הזה קובץ חדש צ'יסל שהוא ירוק עם x בפנים זה אומר execute ואם נעשה עליו פייל פקודת פייל אנחנו נראה שהצ'יסל הזה הוא מסוג אלף קובץ הרצה זה קובץ הרצה ללינוקס בלבד אם הייתי
אם אני רוצה לעשות בילד לווינדוס הייתי צריך להריץ פקודה הזאת ועוד פעם בילד ואם נעשה עליו פייל אומר לי שקובץ אקזה הזה הוא PE32 executable זה קובץ לווינדוס אז ELF זה קובץ ללינוקס PE32 זה executable קובץ הרצה לווינדוס נעשה פה שרת ווב בתיקייה הזאת זאת אומרת בתיקייה הנוכחית אני אני מריץ פייתון שלוש שיאזין בפורט שמונים
ובמחשב של הקורבן אני פותח פאוור של ומוריד את הקובץ. אני מריץ invoke web request ואומר לו מאיפה להוריד את הקובץ ובאיזה שם לקרוא לו, chisel.exe כאילו הקורבן עכשיו מוריד מהתוקף את הקובץ ואז בשעה טובה ומוצלחת אפשר יהיה להריץ את הסרבר ואת ה-client רק בוא נראה שהוא באמת ירד נעשה דיר אנחנו רואים פה את הקובץ chisel.
אנחנו הולכים להריץ במחשב של קאלי שיסל סרבר שרת שיחכה לחיבורים וברגע שיתחברו אליו בפורט 8000 סתם לקחתי 8000 הייתי יכול לקחת כל פורט הוא יעשה רוורס מה זה אומר רוורס שבמקום שהקליינט יצא דרך השרת החוצה השרת יצא דרך הקליינט זאת אומרת שאחרי החיבור הראשוני הקליינט יהפוך
להיות שרת שדרכו יוצאים החוצה למה אני צריך את הרוורס הזה כי firewall בקליינט לא נותן לי להיכנס פנימה אז אני חייב שהקורבן שלי יתחבר אליי אז אני חייב להיות הסרבר שמחכה לחיבורים אבל ברגע שהוא מתחבר אליי בפורט 8000 הנה אני ממתין לו פה ברגע שהוא יתחבר אליי אני לא רוצה שהוא יצא דרכי אני רוצה לצאת דרכו אז זה נהיה reverse הוא נהיה השרת
שיוצאים דרכו כי במקור מה אמור להיות שהקליינט מתחבר לסרבר ויוצא דרכו החוצה בקיצור השרת פה התחיל להזין וברגע שהתחבר אליו הקליינט, השרת התחיל לצאת דרך הקליינט לרשת הפנימית.