אתגר 2 מתחיל בקובץ pcap.
נוריד את הקובץ ונפתח אותו באמצעות 7zip.
את הקובץ אפשר לפתוח עם wireshark ולהתחיל לנתח אותו, אך מצד שני יש דרך קלה יותר לנתח קבצי pcap פשוטים והיא להשתמש בתוכנה CapLoader 1.6:
![צילום תעבורת רשת, התעבורה מכילה שם משתמש וסיסמא ל-FTP]
בפלט של התוכנה ניתן לראות שמדובר בפרוטוקול FTP על פורט 2121 אשר שם המשתמש עבור ההתחברות הינו user והסיסמא הינה 12345.
נבצע התחברות פשוטה באמצעות תוכנת FTP ממכונת לינוקס כלשהי ונראה שהשרת לא מאשר את ההתחברות שלנו מסיבה כלשהי:
![חיבור לשירות FTP, החיבור נכשל] נחזור לתוכנת הCapLoader ונסתכל שאר החבילות:
![תעבורת רשת על פורט 2121] ניתן לראות שלפני שהclient פנה לשירות הftp הוא פנה לשירות אחר על פורט 5555 מה שנראה כמו שיטת port knocking כלשהי.
נסתכל על החבילות בשני הפניות הראשונות וננסה להבין מה שיטת הPort knocking שהשתמשו בה.
![תעבורת רשת על פורט 5555] חבילה ראשונה:
נתחיל לנתח את החבילה הראשונה בכך שננסה להתחבר לצד השרת על פורט 5555:
![תקשורת מול השרת על פורט 5555 וקבלת אתגר] ניתן לראות שהשרת החזיר לנו hash כלשהו באורך 32 תווים בדיוק כמו הhashים שראינו בקובץ הpcap:
![אורך התווים הינו 32] Hash באורך 32 תווים בדרך כלל מסמן md5, ניקח את אחד הhashים שאנחנו כבר יודעים מה התשובה המתבקשת עבורו ונזרוק אותו לאתר:
“ https://hashkiller.co.uk/md5-decrypter.aspx`
ונקבל:
![פינוח ה-hash נותן לנו 33794 ו-37478] אם נסתכל על כמות התווים בתשובות שנשלחו לצד השרת בחבילות ניתן לראות שאורך התשובה הינה 128 תווים שזה מסמן sha512.
אם ניקח את המספרים שקיבלנו ונעשה עליהם sha512 נראה שאנחנו מקבלים תוצאה שונה לחלוטין מהתוצאה שהיינו אמורים לקבל בקובץ הpcap.
לכן החלטנוי לנסות לעשות bruteforce , באמצעות הקוד python הבא:
![קוד פייתון שמבצע bruteforce] הקוד ביצע בדיוק ריצה אחת ועצר, מכאן ניתן להסיק שעלינו לבנות קטע קוד פשוט שיבצע את הפעולות הבאות:
כדי לבצע זאת כתבנו את הקוד הבא:
![התוצאה של הקוד היא 84912] כעת נתחבר לשירות הFTP:
![תיקיות לינוקס בסיסיות] ונמשוך את כל הקבצים למחשב שלנו כדי שיהיה לנו נוח יותר לחפש בהם:
![תיקיית גיבוי בשם backup] השלב הבא באתגר הוא לאתר קבצים מעניינים בתוך מערכת הקבצים שהורדנו, על מנת לעשות כך כתבנו קוד קצר שמדפיס לנו רשימה של כל הקבצים הקיימים בתייקה כדי שיהיה קל יותר לעבור אליהם:
![גיבוי קבצי הגדרות של סיסקו] בתוך התיקייה של המשתמש backup ניתן למצוא 3 קבצים מעניינים:
hint – שמכיל את הסיסמא.
“ s3cr3t`
id_rsa – מפתח פרטי לגישה לשרת.
ועוד קובץ floppyfw.conf.enc שכרגע אין לנו מושג מה תפקידו, אבל בגלל הסיומת שלו ניתן להסיק שהוא מוצפן כנראה.
ננסה לגשת לשרת עם שם המשתמש backup מכיוון שאנו נמצאים בתיקיית הבית שלו והסיסמא למפתח s3cr3t ונקבל:
![התחברות לנתב סיסקו] ניתן לראות שכן הצלחנו להתחבר לשרת אבל בגלל שאין לנו terminal שמוגדר נזרקנו החוצה, ננסה להתחבר באמצעות שירות אחר כגון sftp ונקבל:
![שימוש בקובץ הגיבוי בשביל לקבל את הסיסמא] נמשוך את קובץ הpython אלינו ונפתח אותו באמצעות תוכנה נקראת:
“ EasyPythonDecompiler`
מה שנראה כך:
![פינוח קובץ הפייתון] כעת נסתכל על קובץ הpython שקיבלנו ונבחן כיצד הוא אמור לעזור לנו לפענח את הקובץ floppyfw.conf.enc.
תוכן הקובץ conf_enc הוא בסה”כ שימוש מאוד בסיסי באלגוריתם AES בpython:
![פינעוח קוד ה-AES ב-פייתון] נהפוך את פונקציית הencrypt לdecrypt וננסה לפענח את הקובץ, את ההיפוך נבצע מהסוף להתחלה כך:
תחילה נהפוך את השורה:
return base64.b64encode(iv + cipher.encrypt(raw))` ניתן לראות בשורה הזאת שהIV מתווסף למידע המוצפן ועליו מבצעים base64 כך שהפענוח שלנו חייב להתחיל בפתיחת הbase64 ואז החלוקה של המידע והIV כך:
raw = base64.b64decode(raw)
iv = raw[:16]
data = raw[16:]
`
אורך הIV ניתן לראות שהגדירו באמצעות AES.block_size שהינו 16.
לאחר מכן עלינו להפוך את הפקודה:
cipher.encrypt(raw)` לפקודה:
Chpher.decrypt(raw) וכל שנשאר עלינו לעשות הוא לבצע unpad ולהחזיר את המידע הזה, כך שהפונקציה שלנו תראה כך: ![פונקציית פיענוח aes בסיסית] ננסה לפענח את הקובץ floppyfw.conf.enc ונקבל את הקובץ הבא: ![חוקי iptables] בקובץ מצאנו הגדרות iptables של הfirewall שמאפשרות גישה לכתובת האייפי 10.128.0.3 לפורטים 8080 ו3389 כרגע אנחנו עדיין לא סגורים למה זה משמש , ולכן החלטנו לחפש עוד קבצים שמכילים את הסיומת .enc כדי לפענח אותם ולראות מה נקבל: ![רשימת קבצי גיבוי מוצפנים שאנו יודעים לפענח] מצאנו את הקבצים cisco.conf.enc והחלטנו לפענח את העדכני ביותר. ![פיענוח קובץ גיבוי של סיסקו] ניתן לראות שזהו גיבוי של קובץ ה running-config רגיל של ציוד cisco, בקובץ ניתן לראות שיש לנו את שם המשתמש fwadmin והסיסמא המוצפנת בהצפנה type 7 שקל מאוד לפענח באמצעות האתר: `` http://packetlife.net/toolbox/type7/
![פיענוח סיסמאת סיסקו מוצפנת בקוד 7] נסכם את מה שהשגנו עד כאן:
“ USE_IPTABLES=y
RULE_1=iptables -I INPUT -i eth0 -p tcp -m tcp –dport 22 -j ACCEPT
RULE_2=iptables -P INPUT -j DROP
RULE_3=iptables -I OUTPUT -i eth1 -p tcp -m tcp –dport 3389 -d 10.128.0.3 -j ACCEPT
RULE_4=iptables -I OUTPUT -i eth1 -p tcp -m tcp –dport 8080 -d 10.128.0.3 -j ACCEPT
RULE_5=iptables -P OUTPUT -j DROP
RULE_6=iptables -P FORWARD -j ACCEPT
`
![חוקי access list של סיסקו] על סמך הנתונים בקבצים האלו נתחיל ליצור את המסלול שלנו לשרת הקבצים הפנימי:
- נבצע tunnel אל השרת הפנימי כך:
“ ssh -i id_rsa -L -N 1337:10.164.0.3:22 backup@35.204.90.89`
הדגלים שהשתמשנו בהם:
- -N לא לבצע פקודות על שיחת הssh מכיוון שאנו משתמשים בשיחה לצורך tunnel
- -L מקבל את הפורט כניסה ויציאה לצורך הtunnel אנחנו הגדרנו כניסה על 1337 ויציאה על 22.
כך בעצם דרך השרת 35.204.90.89 הגענו לשרת 10.164.0.3 ויש לנו פורט בהאזנה:
![פורט 1337 פתוח ומאזין] 2. נבצע tunnel שני דרך הפורט שלנו 1337 לתוך שרת הקבצים באמצעות הפקודה הבאה:
“ ssh fwadmin@localhost -p 1337 -N -L 1234:10.128.0.3:8080 -g`
הדגלים שהשתמשנו בהם:
- -p מציין פורט להתחברות הריי אנחנו מתחברים דרך השרת הtunnel שיצרנו בפורט 1337
- -N הסברנו בפקודה הקודמת, משתמשים כדי לא לשלוח פקודות על הtunnel
- -L הסברנו בפקודה הקודמת, תפקידה לפתוח פורט אצלנו הפעם 1234 שיוביל ל
- -g מציין שהאזנה תיהיה גלובלית על כתובת 0.0.0.0 כדי שאנחנו נצליח להתחבר באמצעות מחשב הwindows שלנו דרך מכונת הלינוקס לתוך שרת הקבצים
התוצאה תראה כך:
![פורט 1234 פתוח ומאזין] 3. נפתח דפדפן ונפנה למכונת הלינוקס לפורט 1234 שיוביל אותנו ישירות דרך הtunnel לשרת הקבצים הפנימי:
![תיקייה בשם stolen files] ניכנס לתיקייה ונראה שעברנו לשלב השלישי:
![פתרון האתגר] המשך האתגר בחלק השלישי