PracticU

יצירת HTTP Tunnel
ב-Windows עם Chisel

בלי כתוביותעם כתוביות
PracticU › קורס פריצה ומבדקי חדירה לתשתית ארגונית - בדיקות חוסן מתקדמות ל-Active Directory - קורס זה נדרש למבחן ההסמכה היוקרתי OSCP › יצירת HTTP Tunnel ב-Windows עם Chisel
מילון מושגים:
TCP - פרוטוקול תקשורת אמין שמוודא שכל חבילות המידע מגיעות ליעד בשלמות ובסדר הנכון.
LAN - רשת מקומית שמחברת מכשירים בטווח מצומצם, כמו בבית או במשרד.
RDP - פרוטוקול של מיקרוסופט לחיבור לשולחן עבודה מרוחק של מחשב Windows והפעלתו מרחוק.
FTP - פרוטוקול להעברת קבצים בין מחשבים ברשת, בין לקוח לשרת.
קוד פתוח - תוכנה שקוד המקור שלה זמין לציבור לצפייה, לשימוש ולשינוי, לרוב לפי רישיון מתאים.
GitHub - שירות ענן לאחסון מאגרי קוד מבוססי Git, המאפשר שיתוף פעולה, מעקב גרסאות וניהול פרויקטים.
Wireshark - כלי ללכידה ולניתוח של תעבורת רשת, המציג את החבילות העוברות לצורך אבחון ובדיקה.
Git - מערכת מבוזרת לניהול גרסאות של קוד, שעוקבת אחר שינויים ומאפשרת עבודה משותפת בענפים.

יצירת HTTP Tunnel ב-Windows עם Chisel
מציגים טכניקה לעקיפת חומת אש שחוסמת כל פרוטוקול חוץ מ-HTTP: עטיפת תעבורת TCP רגילה בתוך HTTP באמצעות הכלי Chisel, כך שהחומה רואה HTTP תקין ולא בודקת מה באמת עובר בתוכו.
איך זה עובד
1. הבעיה: תוקף שהשיג גישה למחשב ברשת החיצונית רוצה להיכנס ל-LAN הפנימי, אבל ה-firewall מאפשר רק HTTP. Chisel עוטף כל תעבורת TCP (שיתופי קבצים, Remote Desktop, סריקת Nmap, FTP ועוד) בתוך HTTP, כך שבדיקת העומק (Deep Inspection) של ה-firewall רואה HTTP רגיל ומעבירה את החבילה.
2. קוד פתוח מול אקזה מוכן: המרצה מעדיף להוריד את קוד המקור של Chisel מ-GitHub ולקמפל אותו בעצמו עם go build, כי בקובץ אקזה מוכן אפשר להסתיר קוד זדוני שקשה לגלות בשפת מכונה. בקוד פתוח, בשפה עילית נוחה לקריאה, קל לבדוק מה הכלי עושה.
3. קומפילציה: מעדכנים את קאלי, מתקינים את שפת Go ומריצים go build שמייצר קובץ הרצה - קובץ ELF ללינוקס או PE32 לווינדוס, בהתאם לפלטפורמה שמבקשים.
4. העברת הקובץ לקורבן: מריצים שרת פייתון בפורט 80 בתיקייה עם הקובץ, ובמחשב הקורבן מורידים אותו עם Invoke-WebRequest.
5. חיבור הפוך (reverse): מריצים chisel server בפורט 8000 שמחכה לחיבורים, ובקורבן מריצים chisel client http://...:8000 reverse ...:13445. בגלל שה-firewall בצד הקורבן חוסם כניסה, התוקף נשאר השרת שמקבל את החיבור, אך לאחר ההתחברות התוקף הוא שבפועל "יוצא" לרשת הפנימית של הקורבן.
6. אימות ב-Wireshark: תפיסת הפאקטים בפורט 8000 מראה לחיצת יד TCP (SYN/ACK) ואז שדרוג ל-WebSocket - גרסה של HTTP - כך שמבחינת ה-firewall כל התעבורה היא HTTP תקין.
פקודות עיקריות
- git clone - הורדת קוד המקור של Chisel.
- go build - קומפילציה לקובץ הרצה.
- Invoke-WebRequest - הורדת הקובץ במחשב הקורבן.
- chisel server ו-chisel client ... reverse - הקמת החיבור ההפוך.
בסוף ההרצאה ברור איך Chisel מאפשר מעבר של כל תעבורת TCP דרך HTTP כדי לעקוף firewall עם בדיקת עומק.
השיעור הבא בקורס: שרת פרוקסי - Proxy ב-Windows עם Chisel

פרקי ההרצאה: יצירת HTTP Tunnel ב-Windows עם Chisel

  1. 00:00

    מנהרת HTTP דרך החומת אש

  2. 00:57

    עטיפת TCP בתוך HTTP

  3. 01:35

    פעולת הסוכן בצד הפנימי

  4. 02:12

    הורדת קוד המקור מ-GitHub

  5. 02:50

    למה להעדיף קוד פתוח

  6. 04:19

    התקנת Go והידור הכלי

  7. 05:35

    קבצי ELF מול PE32

  8. 06:33

    הרצת שרת Chisel במצב רוורס

תמלול ההרצאה: יצירת HTTP Tunnel ב-Windows עם Chisel

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

  1. 00:02

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

  2. 00:17

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

  3. 00:35

    זה גם שיתופים, זה גם Remote Desktop, זה גם סריקת פורטים של Nmap, זה גם העברת הקבצים ב-FTP, שליחת מיילים, זה הכל TCP.

  4. 00:47

    למעשה, אני לוקח פאקט רגיל של כל תוכנה ב-TCP ועוטף אותו ב-HTTP כדי כשהfirewall יבדוק את הפאקט בפנים, יעשה Deep Inspection, בדיקת עומק, יראה שזה HTTP רגיל, אז הוא רואה שזה HTTP אבל הוא לא מבין מה יש בפנים והוא נותן לפאקט שלי לעבור, אבל בתוך הפאקט הזה יישב

  5. 01:11

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

  6. 01:22

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

  7. 01:45

    כך אני מתגבר על Deep Inspection על בדיקת עומק חכמה שעושה Firewall. אנחנו יכולים לראות שהשרת הזה יש לו גם רשת פנימית 192.168 וגם כרטיס רשת חיצוני 10.100 והתוקף שלי נמצא ברשת החיצונית 10.100 IP אדרס מראה לי פה שאני ב-10.100 למה אני מתעקש על הצ'יסל? כי הוא עובר לי את הפיירוול ב-HTTP זאת הגדולה שלו נעשה גיט קלון ושימו לב לפני

  8. 02:16

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

  9. 02:20

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

  10. 03:13

    אז זה נקרא קוד פתוח ואם יש לי קוד פתוח אני יכול לבדוק את הקוד בצורה נוחה וכיפית לראות מה קורה בתוכנה הזאת ואז לקמפל אותה לבד לשפת מכונה כי בקובץ הסופי בשפת המכונה אפשר להוסיף כל מיני סוסים טרויאניים בלי שאני אעלה על זה כי שפת מכונה הזאת מאוד מסורבלת לקריאה ולהבנה לעומת זאת בשפת תכנות המקורית נניח c-sharp שפת go ג'אווה, זה לא משנה

  11. 03:44

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

  12. 04:05

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

  13. 04:23

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

  14. 04:38

    אז אני עושה קודם כל update, מעדכן את קאלי שלי, ואז מתקין את שפת go שבה כתבו את הכלי הזה. אז אנחנו מתקינים את השפת go, ואז אנחנו נעשה go build.

  15. 04:51

    go build ייקח את הקובץ makefile ויבצע build וייצור לנו בסוף צ'יסל להרצה. אני מלמד אתכם איך לקמפל לבד קוד מקור. אז כל מה שעשיתי עד עכשיו זה שכפלתי את קוד המקור, עדכנתי את שפת התכנות, ואני עושה go build.

  16. 05:08

    רק שאני מוסיף פה שני דגלים שיתפוס פחות מקום תסתכלו לפני שאני מתחיל כאן יש לי make file אבל אין לי קובץ צ'יסל ברגע שאני אעשה go build תסתכלו שיופיע פה אחרי כל ה-build הזה קובץ חדש צ'יסל שהוא ירוק עם x בפנים זה אומר execute ואם נעשה עליו פייל פקודת פייל אנחנו נראה שהצ'יסל הזה הוא מסוג אלף קובץ הרצה זה קובץ הרצה ללינוקס בלבד אם הייתי

  17. 05:36

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

  18. 06:08

    ובמחשב של הקורבן אני פותח פאוור של ומוריד את הקובץ. אני מריץ invoke web request ואומר לו מאיפה להוריד את הקובץ ובאיזה שם לקרוא לו, chisel.exe כאילו הקורבן עכשיו מוריד מהתוקף את הקובץ ואז בשעה טובה ומוצלחת אפשר יהיה להריץ את הסרבר ואת ה-client רק בוא נראה שהוא באמת ירד נעשה דיר אנחנו רואים פה את הקובץ chisel.

  19. 06:35

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

  20. 06:58

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

  21. 07:24

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

לקורס המלא: מבדקי חדירה ל‑Active Directory

ההרצאה הקודמת: יצירת Tunnel - בוונדוס עם NETSH

ההרצאה הבאה: שרת פרוקסי - Proxy - ב-Windows עם Chisel

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

  • יצירת Service ב-Windows
  • פרוטוקול HTTP
  • הגדרת VPN Tunnel
  • יצירת משתמשים בוונדוס Windows 10

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

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