סריקה ותקיפה עם Nmap, חלק ב'

מדריך זה הוא מדריך המשך למדריך סריקה ותקיפה עם nmap – חלק א', כך שאם טרם קראתם את החלק הראשון, מומלץ לעצור ולאחר קריאתו לחזור לכאן, לחלק השני. בחלק זה נעסוק בטכניקות נוספות, מתקדמות ושימושיות יותר, להערמה על חומת האש ומערכות האיתור והזיהוי בעת ביצוע סריקות nmap. כמו-כן, נציג שורה ארוכה של סקריפטים שימושיים מאד של nmap לעבודה ביום יום (גם כלפי שרתי web) ונדבר גם על שימוש בNmap לסריקת מארחים המשתמשים בIpv6, פרוטוקול שבמהלך העשור הקרוב יהפוך בהדרגה לפרוטוקול הנפוץ והשימושי גם בישראל (כן כן, למרות ההטמעה האיטית שלו כאן).

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

התמודדות מול חומת האש ומערכות האיתור

אחד האתגרים המשמעותיים ביותר של האקרים אתיים בעת ביצוע מבדק חדירה תשתיתי הוא הערמה על מערכות ההגנה של הארגון, הן בכל הנוגע לעצם הזיהוי של IPS/IDS שעלולים להתריע על ניסיון החדירה ולסכל אותו (במקרים בהם בעת ביצוע מבדק החוסן מתבקש הבודק לבצע את המשימה מבלי להתגלות ע"י צוות הsoc של הארגון) והן בכל הנוגע לקבלת מידע אמין על המערכת וביצוע מתקפות שונות כלפיה, מתקפות שעלולות להיחסם ע"י חומת האש.

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

האפשרות הראשונה שנכיר הוא שימוש בדגל f-. בעזרת ציון דגל זה בכל סריקת TCP אותה נבצע (בנוגע לפרוטוקול UDP נדבר לאחר מכן), נגרום לפיצול חבילת הTCP למספר מנות זעירות, כך שבעוד מערכות האיתור של הארגון הנתקף הוגדרו לזהות חבילות TCP ע"פ המבנה הסטנדרטי שלהן, בעת שימוש בדגל f- יתבצע פיצול של החבילה למספר חבילות קטנות שיקשו על מערכת האיתור לזהות שמדובר בבקשת TCP. לדוגמא, אם החבילה בגודל 20 בתים (מינימום הבתים האפשרי בחבילת TCP, השדות הקבועים) היא תפוצל לשלוש חבילות נפרדות, שתי חבילות של שמונה בתים עוד אחת של ארבעה. גם אם החבילה שנשלח תכיל אורך גדול יותר של מידע (והיא תכיל, שכן ה20 בתים הן שדות קבועים, אך יש עוד כ40 בתים לשדות אופציונליים), nmap יבצע פיצול של חבילות המידע לחבילות נפרדות, כל אחת באורך של שמונה בתים לפחות.

אם נרצה שכל חבילה תהיה באורך של 16 בתים או 24 בתים (הפיצול חייב להיות במכפלות של 8) לא נשתמש בדגל f- אלא בדגל mtu– לאחריו נציין את מספר הבתים שתכיל כל חבילה. עניין נוסף שכדאי לציין הוא שאומנם טכניקת פיצול החבילות רלוונטית הן לסריקת יציאות TCP, הן לסריקות יציאות UDP (שם גודל החבילה המינימלי הוא בלאו הכי 8 בתים, כך שהפעולה פחות יעילה) והן לסריקות מארחים בעזרת ICMP, אך אם אנו משתמשים בדגל sV- (כזכור, דגל שתפקידו לזהות את גרסאות המערכת הנתקפת) אין להשתמש בטכניקה זו.

כמו-כן, אם הפיצול שאנו רוצים לבצע הוא של 16 בתים ולא יותר, נוכל לכתוב f- פעמיים במקום לציין mtu 16–.

דוגמא לשימוש בדגל f-:

sudo nmap -sS -f 192.168.150.20

דוגמא לשימוש בדגל mtu–:

sudo nmap -sS --mtu 16 192.168.150.20

פיצול המנות בעת שימוש בדגל f- כפי שמשתקף בwireshark:

האפשרות הבאה שנכיר היא שימוש בדגל D-. אפשרות זו היא אפשרות יעילה ושימושית מאד ומטרתה העיקרית הוא למנוע מהיעד לזהות בוודאות מהו כתובת הIP של מכשיר הנתקף. בעזרת שימוש בדגל זה, תערים nmap על מכשיר היעד בכל הנוגע למקור חבילת המידע ותציג אותה כאילו היא נשלחה ממספר כתובות IP בו זמנית (כתובות מזויפות שנציין לאחר הדגל D-) מלבד הכתובת שלנו, כך שיהיה ליעד קשה מאד לזהות מי הוא התוקף האמיתי (ויותר מכך, הוא עלול לחשוב שהוא תחת מתקפה מרוכזת וכתוצאה מכך לבצע פעולות לא מחויבות המציאות שרק יזיקו לו).

דוגמא לשימוש בדגל D- (הכתובת האחרונה היא כתובת היעד. הכתובות שקודמים לה הן הכתובות המזויפות אותן אנו מפרידים בעזרת שימוש בפסיק (,) בין כתובת לכתובת וללא רווח, כאשר לפני כתובת היעד אנו לא מציינים פסיק, אלא רווח):

sudo nmap -sn -D 192.168.150.10,192.168.150.19,192.168.150.30 192.168.150.20

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

sudo nmap -sn -D 192.168.150.10,192.168.150.19,192.168.150.30,ME 192.168.150.20

נוכל גם להשתמש באפשרות RND שתגרום לNMAP לייצר בעצמה כתובות רנדומליות ולשלוח מטעמן את החבילה או באפשרות RND:number (כגון RND:10) בשביל לציין מספר ספציפי של כתובות מזויפות שNMAP תייצר.

דוגמא לשימוש בדגל RND:

sudo nmap -sn -D RND 192.168.150.20

דוגמא לשימוש בRND:number:

sudo nmap -sn -D RND:10 192.168.150.20

שימו לב: אומנם האפשרות D- היא אפשרות שימושית ויעילה מאד כנגד זיהוי חומות האש, אך חשוב להשתמש בה בחכמה שכן, א'. אם נציין כתובות שאינן מהרשת שלנו, בסבירות גבוהה חומת האש תזהה זו ותחסום אותנו. ב'. ציון של מספר גדול מדי של כתובות עלול להאט בצורה משמעותית את הסריקה שלנו. כמו-כן, גם במקרה הזה, סריקה זו לא רלוונטית במקרה של סריקת גרסאות פורטים עם הדגל sV- או שימוש בsockets לסריקה בעזרת הדגל sT- (פעולה שכזכור נבצע בדרך כלל רק כאשר המערכת הנתקפת משתמשת בפרוטוקול IPv6).

הדגל הבא שנכיר, אך יש לציין שהוא פחות יעיל כנגד חומות האש שלרוב ימנעו את השימוש בו, הוא הדגל S-. דגל זה מאפשר לזייף לחלוטין את כתובת הip שלנו (בשונה מהדגל D- בעזרתו הערמנו על היעד כאילו מקור החבילה הוא מכמה כתובות ip בו זמנית, אך בניהן היה גם כתובת הip שלנו).

דוגמא לשימוש בדגל S- (הכתובת שלאחר הדגל S- היא הכתובת המזויפת שתוצג ליעד כמקור ההודעה):

sudo nmap -sn -S 192.168.150.29 192.168.150.20

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

אסביר יותר בהרחבה: בחלק א' של מדריך הNmap הוסבר בהרחבה תהליך לחיצת היד המשולשת, בואו נעשה לו תזכורת קצרה: מכשיר א' שרוצה לתקשר עם מכשיר ב' שולח לו הודעת Syn (בקשה ליצור תקשורת), אם מכשיר הב' מעוניין בתקשורת הוא משיב בהודעת Syn/Ack (שמשמעותה – אני מעוניין ליצור תקשורת, נא שלח לי את הID של ההודעה ממנה נתחיל את התקשורת) ובתגובה מכשיר הא' מחזיר לו את הדגל Ack ובו הid הראשון. כך נוצרת תקשורת. מה שלא הוסבר לחלק א' ומאד רלוונטי עבור הבנת הסריקה sI- הוא שלכל חבילת תקשורת שנשלחת יש מזהה שנקרא IPID שבחלק מהמכשירים עולה בצורה צפויה בכל חבילה שמגיעה. אם כן: ברגע שמכשיר היעד יחזיר למכשיר הzomby את הדגל RST שכן הפורט שסרקנו סגור, מכשיר הZomby לא ישלח לו שום דגל בתגובה וערך הIPID שלו יעמוד על 1 בלבד (שייצג רק חבילת הRST שהוא קיבל). לעומת-זאת, ברגע שנבצע סריקה על פורט שכן פתוח, מכשיר היעד יחזיר למכשיר הzomby את הדגל Syn/Ack עבור המשך התקשורת. מכשיר הZomby לא ממש יבין מה פשר הדגל שהגיע אליו, הרי הוא לא יצר שום בקשה לתקשורת, יחזיר את הדגל RST למכשיר היעד וערך הIPID שלו יעלה ב2 (גם החבילה שקיבל וגם החבילה ששלח). ממילא, לאחר הסריקה יפנה המכשיר שלנו למכשיר הZomby ויבדוק ע"פ ערך הIPID של התגובה שהוא מקבל – אם הוא רואה 3, משמע נשלחה חבילה למכשיר היעד ממכשיר הZomby (הדגל RST בתגובה לדגל Syn/Ack) וממילא הפורט היה פתוח והדגל מכיל ערך של 3 שכן עברו כאן שלוש חבילות (הדגל Syn/ack מהמכשיר הנתקף, הדגל RST ממכשיר הZomby למכשיר הנתקף והדגל Syn/Ack ממכשיר הZomby למכשיר הסורק). אם הוא רואה 2 – משמע הפורט היה סגור (שכן המכשיר הנסרק שלח את הדגל RST למכשיר הZomby וממילא מכשיר הZomby לא ראה צורך להשיב לו וממילא ערך הIPID עלה רק ב1).

שלושה דברים שחשוב לציין: א'. כיום מרבית מכשירי התקשורת המודרניים מעלים את ערך הIPID בצורה רנדומלית וממילא אינם רלוונטים לשימוש במכשיר Zomby, אך עם-זאת עדיין ניתן למצוא נתבים ומכשירי תקשורת ישנים שמעלים את ערך הIPID בערך קבוע. ב'. למכשיר הנתקף כן תהיה את כתובת מכשיר הZomby ולמכשיר הZomby תהיה את הכתובת שלנו, כך שבסופו של דבר המכשיר הנתקף יכול להגיע לבעל המכשיר הZomby ולדרוש ממנו את הפרטים שלנו, כך שיש להשתמש רק בZomby אמין ולא כזה שברשת שלנו. ג'. מכשיר הZomby חייב להיות כזה שאין מולו תעבורה משמעותית, אחרת – אנו עלולים לקבל ערך IPID גדול מ2 לא בגלל שהפורט היה פתוח והמכשיר הנתקף החזיר syn/ack, אלא בגלל שמישהו אחר תקשר תוך כדי עם מכשיר הZomby.

דוגמא לשימוש בדגל sI-:

sudo nmap -sS -sI 128.150.31.1 192.168.150.20

דגל נוסף ושימושי מאד שחשוב להכיר הוא הדגל g- (שמוכר גם כsource-port–). בעזרת דגל זה אנו יכולים להערים על חומת האש בנוגע לפורט המקור שמתקשר עמם ולציין, לצורך הדוגמא, את הפורט 53 (פורט הDNS) או את הפורט 443 (פורט תעבורת אינטרנט תחת פרוטוקול HTTP בצורה מאובטחת) כפורט המקור. פורטים אלו בדרך כלל יוחרגו בהגדרות חומת האש של הארגון, שכן אחרת, היכולת לתקשר עם שרת הDNS או להשתמש באינטרנט תהיה בעייתית מאד. אם צוות ההגנה של הארגון הגדיר החרגה של הפורטים רק ע"פ מספרם ולא ע"פ התכונות הספציפיות של הפרוטוקולים, הרי שבעזרת הפרמטר source-port– או הדגל g- נוכל להערים עליו כביכול כל הסריקות שאנו מבצעים נשלחים מפרוטוקולים אלו.

דוגמא לשימוש בפרמטר source-port:

sudo nmap -sS --source-port 53 192.168.150.20

הפרמטר הבא שנכיר הוא הפרמטר data-length–. בעזרת פרמטר זה אנו מוסיפים נתוני זבל לחבילות הTCP, הUDP והICMP שnmap שולחת במהלך הסריקה, חבילות שכברירת מחדל נשלחות עם מינימום הבתים האפשרי (headers בלבד) ע"מ לזרז את הסריקה. שימוש בdata-length– יוסיף 'בתי זבל' נוספים לחבילות המידע ובכך אומנם יאריך מעט את משך הסריקה, אך גם עלול להטעות את הfirewall שלא ממש יבין את פשר החבילות שמגיעות אליו (לחילופין, ניתן להשתמש בפרמטר data-string– ולהכניס string מותאם אישים שיישלח כנתוני הזבל או בפרמטר data-hex-string– ולשלוח נתוני זבל בספרות הקס-דצימליות).

דוגמא לשימוש בפרמטר זה (תומך בסריקת כל הפרוטוקולים, מלבד בסריקת מערכת הפעלה עם O-:

sudo nmap -sS --data-length 30 192.168.150.20

אפשרות נוספת שנכיר היא שימוש בפרמטר randomize-hosts– והיא רלוונטית בעיקר בסריקות כלפי רשתות מclass B לכל הפחות (בעלות 65,534 כתובות ip זמינות לשימוש מכשירי תקשורת). בעזרת פרמטר זה אנו מגדירים לNmap ל'ערבב' כל 16,384 כתובות לפני ביצוע הסריקה כלפיהן, כך שהסריקה תתבצע בצורה אקראית ולא ע"פ סדר. סריקה כזו תקשה על מערכת הניטור של הרשת להבין 'מה בדיוק קורה' ומומלץ מאד לשלב אותה עם אחד מדגלי התזמון המאטים את הסריקה.

דוגמא לשימוש בפרמטר randomize-hosts–:

sudo nmap -sn --randomize-hosts 192.168.150.20

עוד פרמטר שימושי ויעיל מאד הוא הפרמטר spoof-mac– שמאפשר לתוקף לזייף את כתובת הMAC שלו בעת הסריקה, כך שלמכשיר היעד תופיע כתובת MAC רנדומלית כלשהי ככתובת המקור של הסריקה. כערכים לאפשרות זו נוכל להכניס כתובת MAC מותאמת אישית (שימו לב שיש לבנות אותה בהתאם למבנה כתובות הMAC – שש זוגות של 2 ספרות הקס-דצימליות) או להשתמש בערך 0 שיצור כתובת MAC רנדומלית אותה יציג ככתובת המקור.

דוגמא לשימוש בפרמטר spoof-mac– עם הארגומנט 0:

sudo nmap -sS --spoof-mac 0 192.168.150.20

אפשרות נוספת היא לציין שם של ספק תקשורת כלשהו לאחר הפרמטר spoof-mac– וnmap יצור בצורה אוטומטית כתובת MAC רנדומלית, אך כזו שתכיל את המזהה של אותה חברת התקשורת בשלושת האוקטטות הראשונות של הכתובת (כתובת MAC בצורה משש זוגות של ספרות הקס-דצימליות, כאשר שלושת הזוגות הראשונות מייצגות את חברת התקשורת שייצרה את המכשיר). לדוגמא:

sudo nmap -sS --spoof-mac Dell 192.168.150.20

האפשרות האחרונה שנכיר בפרק העוסק בהתחמקות ממערכות האיתור וחומות האש, היא הפרמטר proxy–. בעזרת שימוש בפרמטר זה נוכל להעביר את התקשורת ביננו לבין מכונת היעד דרך Proxy, כך שמכונת היעד לא תוכל לזהות את מקור התקיפה (אם אינכם יודעים מהו Proxy, עצרו כאן וקראו על כך באינטרנט. זהו מונח בסיסי שלא ראיתי צורך להסביר כאן). 2 פרוטוקולי הPorxy היחידים שNmap תומך בהם בסריקת הProxy הם SOCKS בגרסה 4 של הפרוטוקול (SOCKS4) וHTTP CONNECT (שיטה המאפשרת תקשרת דו כיוונית בפרוטוקול HTTP, כך שאנו נוכל לתקשר עם שרת הProxy והוא גם יוכל להעביר לנו מידע [בעוד בפרוטוקול HTTP סטנדרטי התקשורת היא חד כיוונית]). כמו-כן, יש לציין שאפשרות זו רלוונטית אך ורק עבור סריקת פורטים בפרוטוקול TCP או סריקת מארחים ללא שימוש בPing (פרוטוקול ICMP).

מבנה הארגומנט של פרמטר הProxy הוא פרוטוקול הProxy, כתובת הIP והפורט. ניתן לראות רשימה של שרתי Proxy חינמיים ולא בהכרח אמינים המשתמשים בפרוטוקול SOCKS4 בעזרת חיפוש פשוט בgoogle (לדוגמא: socks4 proxy list).

דוגמא לשימוש בפרמטר proxy–:

sudo nmap -sS --proxy SOCKS4://103.246.1.218:4145 192.168.150.20

דגל הסריקהפעולה
f-פיצול חבילות למספר חלקים ע"מ להטעות את חומת האש ומערכות האיתור
mtu–ציון מספר הבתים לו תתחלק כל חבילה, בכפולות של 8 בתים
D-הערמה על היעד שהחבילה נשלחה ממספר כתובות IP, כך שלא יוכל לזהות אותנו בוודאות
S-הערמה על היעד שמקור החבילה הוא כתובת IP אחרת
sI-ביצוע הסריקה בעזרת מכשיר Zomby שיוצג כמקור הסריקה למכשיר היעד
source-portשינוי פורט היעד כלפיו נבצע את הסריקה לפורטים שלרוב יהיו פתוחים
data-lengthהוספת נתוני זבל לחבילות המידע שאנו שולחים ליעד ע"מ לבלבל את מערכות האיתור
data-hex-string–מבצע פעולה זהה לdata-length–, אלא שהנתונים שיתווספו יהיו ספרות בבסיס הקס-דצימלי
data-string–מבצע פעולה זהה לdata-length–, אלא שמאפשר להכניס string זבל בעצמנו
randomize-hosts–ערבוב רשימת כתובות הIP כלפיהן תבוצע הסריקה, רלוונטי בעיקר מclass B והלאה
spoof-macזיוף כתובות הMAC של מכשיר התוקף ע"מ להערים על היעד
proxy–שימושי בProxy שיעביר את התקשורת ביננו לבין מכונת היעד

סקריפטים בNmap

אחד הכלים המשמעותיים והחשובים ביותר שNmap מציע ורבים לא מכירים את יכולותיו המשמעותיות, הוא NSE (ר"ת של Nmap Scripting Engine). לNmap תיקיית סקריפטים עם עשרות סקריפטים, שימושיים ויעילים מאד, שיוכלו לעזור לנו הן בביצוע מבדק חדירה תשתיתי והן בביצוע מבדקי חדירה כלפי מערכות web. בשורות הבאות אציג שורה ארוכה של סקריפטים, את השימושיים והיעילים ביותר מתוך עשרות הסקריפטים שNmap מציע כעזר לאנשי הpenetration testing.

ראשית-כל, נכיר את הנתיב בלינוקס לתיקיית הסקריפטים ואת התחביר הבסיסי של הפעלת הסקריפטים עם nmap. את הסקריפטים תוכלו למצוא בלינוקס בנתיב הבא: usr/share/nmap/scripts/ וע"מ להפעיל אותן תצטרכו להשתמש בתחביר הבא: "nmap –script "script_name. בשורות הבאות נציג מספר דוגמאות והדברים יובנו לחלוטין.

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

חיפוש קבצי גיבוי: מפתחי אתרים רבים ישמרו בתיקיית הבית של האתר את קבצי הגיבוי של האתר תחת הסיומת המקובלת לקבצי גיבוי (סיומת bak.). בעזרת שימוש בסקריפט http-backup-finder, יבצע nmap חיפוש של כל קבצי הגיבוי במערכת בשיטת הbrute-force (לדוגמא במקום הקובץ index.php יתבצע חיפוש של הקובץ index.bat, קבצים שיכולים לתת לנו מידע רב שייתכן ונמצא בהם ולא נמצא בקבצים המקוריים). דוגמא לשימוש: sudo nmap -p 443 --script http-backup-finder www.cyber-eliya.com.

דוגמא לסריקה (במקרה הזה nmap לא זהה RFI או LFI ועל כן החזיר פלט ללא שום מידע חדש):

בדיקה האם המערכת הנתקפת משתמשת בwaf (ר"ת של web application firewall): כשאנו מבצעים בדיקת חוסן כלפי מערכת web, תמיד ננסה לצמצם ולמקד את המתקפות האפשריות כלפי המערכת. לדוגמא, אם המערכת משתמשת בwaf נדע שכנראה לא נוכל לממש מתקפות כמו xss (למעט DOM XSS) או sql injection (בטכניקות הבסיסיות). ע"מ לבדוק האם המערכת הנתקפת משתמשת בwaf נוכל להשתמש בסקריפט http-waf-detect. דוגמא לשימוש: sudo nmap --script http-waf-detect www.cyber-eliya.com. אם נקבל פלט כזה, הרי שהמערכת לא משתמשת בwaf:

לעומת-זאת, אם נקבל פלט כזה, הרי שהמערכת משתמשת בfirewall:

אם אנו מגלים שהמערכת משתמשת בwaf, נוכל לקבל מידע יותר ספציפי על סוג הfirewall בעזרת הסקריפט http-waf-fingerprint. דוגמא למימוש הסקריפט: sudo nmap -p 443--script http-waf-fingerprint cyebr-eliya.com. במקרה הזה, לצורך הדוגמא, אנו רואים שנעשה שימוש בcloudflare.

איתור LFI/RFI: אומנם זו פעולה שמרבית הסורקים האוטומטיים יבצעו עבורנו, אך נוכל לבצע אותה גם בעזרת הסקריפט http-rfi-spider. סקריפט זה יוסיף פרמטרים נפוצים של LFI וRFI בדפים השונים באתר וינסה לזהות פגיעות של LFI או RFI. דוגמא לשימוש בסקריפט: sudo nmap -p 443 --script http-rfi-spider www.cyber-eliya.com.

העלאת קובץ לשרת מרוחק, בעזרת מתודת PUT: המתודה PUT היא אחת משורת המתודות בהם פרוטוקול HTTP משתמשת (כמו POST, GET, HEAD וכו'). בעזרת פרוטוקול זה ניתן לבצע העלאה של משאב לשרת האינטרנט המשתמש בפרוטוקול. אם אנו רואים שהמערכת שאנו סורקים תומכת במתודת PUT, ננסה לבצע העלאה של קובץ זדוני בעזרת המתודה. ישנם מספר דרכים בעזרתן נוכל לבצע את הפעולה, אחת מהן היא שימוש בסקריפט http-put שיבצע את הפעולה.

לפני שנציג דוגמא למימוש של הסקריפט, נסביר עוד נקודה חשובה בכל הנוגע למימוש הסקריפטים שNmap מציעה: מלבד הפרמטר script לאחריו נכתוב את שם הסקריפט, קיים גם הפרמטר script-args שמאפשר לבצע פעולות ספציפיות בסקריפט, להוסיף ערכים, לשנות ערכים וכו' (בהתאם לכל סקריפט וסקריפט).

לסקריפט http-put נצטרך להוסיף את הפרמטר http-put.url לתוכו נכניס את הנתיב אליו נרצה לבצע העלאה של המשאב (הקובץ) בעזרת put ואת הפרמטר http-put.file לתוכו נכניס את הנתיב לקובץ במכונת הלינוקס שלנו, אותו אני רוצים להעלאות. לדוגמא (כמובן שבמקרה הזה הפלט מחזיר כישלון, שכן הבלוג לא פגיע כמובן): sudo nmap -p 443 --script http-put --script-args http-put.url='/upload/reverse_shell.php', http-put.file='/tmp/reverse_shell.php' www.cyber-eliya.com

סריקת wordpress עם nmap: אחד הסקריפטים השימושיים והיעילים מאד של nmap עליו כבר דיברנו במדריך לסריקת אתרי wordpress שלנו הוא http-enum-wordpress שיספק לנו מידע על התוספים המותקנים במערכת, שמות משתמש ונתיבים מסוימים. הוא נחשב ליעיל יותר מהסריקה הבסיסית של wpscan ועל-כן מומלץ מאד, אם זמנכם קצר. דוגמא לשימוש בסקריפט זה: sudo nmap -p 443 --script http-wordpress-enum www.cyber-eliya.com

סקירת מערכות web עם nmap: סקריפט נוסף, שימושי מאד, שnmap מציעה הוא http-enum, הוא מבצע למעשה פעולה זהה לnikto ומחפש קבצים מעניינים במערכת הנסרקת, אך נחשב למתקדם ויעיל יותר. דוגמא לשימוש בסקריפט: sudo nmap -p 443 --script http-enum www.cyber-eliya.com

זיהוי סאב-דומיינים פעילים: פעמים רבות, כשנבוא לתקוף מערכת web, בעיקר כשמדובר במערכת web של חברה גדולה, נחפש פעמים רבות את הפגיעיות דווקא בסאב-דומיינים של החברה, שלרוב יהיו פחות מוקשחים אבטחתית מהמערכת הראשית. בעזרת הסקריפט dns-brute יבצע nmap מתקפת brute-force מסוג dictionary attack על רשימת הסאב-דומיינים הנפוצים וינסה לזהות האם המערכת הנתקפת משתמשת בהם. דוגמא לשימוש בסקריפט זה: sudo nmap -p 443 --script dns-brute cyber-eliya.com. נוכל גם להכניס קובץ עם רשימה של subdomains אפשריים בעצמנו, בעזרת מימוש הארגומנט dns-brute.hostliist (שוב, כפי שלמדנו בסקריפט http-put, לכל סקריפט וסקריפט ניתן להוסיף פרמטרים שימקדו את התקיפה ויוסיפו לנו יכולות). לדוגמא: sudo nmap -p 80 --script dns-brute --script-args dns-brute.hostlist="/home/eliya/brute-force/brute-force-subdomains.txt" vulnweb.com

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

דוגמא לסריקה עם הפרמטר script-args–:

איתור פגיעות csrf: עוד סקריפט מצויין שnmap מציע בכל הנוגע לסריקת אתרי אינטרנט, הוא איתור פגיעות CSRF (ר"ת של cross site recuest forgery). על הפגיעות כזו כבר דיברנו במדריך הwordpress, אך בקצרה: מדובר בפגיעות המאפשרת שליחת טפסים בשם משתמשים בצורה אוטומטית, רק בעקבות כניסה של המשתמש לדף שיכיל את הקוד שמבצע את הפגיעות. בעזרת הסקריפט http-csrf, תתבצע ע"י nmap סריקה של כל פרמטרי שליחת הטפסים באתר ובדיקה האם הן מכילות גם פרמטר עם csrf token / האם נעשה שימוש בheader csrf או בsemsite.

פלט לדוגמא כאשר האתר לא פגיע (כזכור, ממשק התגובות של wordpress פגיע כברירת מחדל לcsrf ועליכם לבצע הקשחה של המערכת ע"מ למנוע זאת. תוכלו לקרוא על כך בהרחבה במדריך הwordpress המפורט בבלוג):

פלט לדוגמא כאשר האתר פגיע:

חיפוש דפי שגיאות במערכת הנתקפת: סקריפט שימושי נוסף הוא http-errors שינסה לאתר את כל הדפים במערכת הנתקפת המחזירים שגיאה (החל משגיאות ה400 שפחות יעניינו אותנו ועד לשגיאות ה500 שמאד יעניינו אותנו). דוגמא לשימוש בסקריפט זה: sudo nmap -p 443 --script http-errors www.cyber-eliya.com.

איתור דפים הפגיעים לopen-redirect: בעזרת הסקריפט http-open-redirect יבצע nmap סריקה של הדפים השונים במערכת הנתקפת, במטרה למצוא דפים בעלי סטטוס 302 המכילים פרמטרים המבצעים הפנייה לדף אחר ובכך חושפים את האתר לפגיעות של open-redirect המאפשרת לתוקף לשלוח לינק "כביכול" לאתר לגולש תמים, בעוד ברגע שהגולש ייכנס לאתר, מיד תתבצע הפנייה לאתר הזדוני של התוקף. דוגמא לשימוש בסקריפט: sudo nmap -p 443 --script http-open-redirect www.cyber-eliya/com.

אם-כן, רגע לפני סיכום החלק שנוגע לסריקת יישומי אינטרנט, חשוב לי לחזור ולהדגיש את העובדה שאנו יכולים למקד ולהרחיב את הסריקה בעזרת הפרמטר script-args–. בתיעוד הרחב של כל סקריפט וסקריפט באתר Nmap נוכל לראות את הערכים האפשריים של הארגומנט הזה באותו סקריפט ונקפיד תמיד להכניס אותן לאחר סימן השווה ובתוך מרכאות, כך: 'script-args='value–. תמיד, אם אנו נתקלים בשגיאה, נוכל להשתמש בפרמטר d- שיציג לנו את תהליך הפעולה של Nmap מאחורי הקלעים וממילא, מה הן השגיאות שהוא נתקל בהן במהלך ההרצה.

לNmap עוד סקריפטים רבים הנוגעים ליישומי web, כגון איתור פגיעויות xss, איתור פגיעויות sql injection, ביצוע מתקפת slowloris dos, סריקת מערכות joomla וdrupal ועוד ועוד ועוד, אך מכיון שאנו במדריך אינטרנטי ולא בספר נסתפק בדוגמאות שהצגתי ואת שאר הסקריפטים תוכלו להכיר ולממש באופן עצמאי, כאן, בתיקיית הסקריפטים של nmap. בכל זאת, אסכם בטבלה הבאה את הסקריפטים שהצגתי כאן ועוד קצת נוספים:

שם הסקריפטתיאור פעילות
http-backup-finderחיפוש קבצי גיבוי הגלויים בדפדפן
http-waf-detectבדיקה מקדימה, האם המערכת הנתקפת משתמשת בחומת אש
http-waf-fingerprintזיהוי ממוקד וספציפי של סוג הfirewall בו משתמש האתר
http-rfi-spiderאיתור דפים הפגיעים לLFI/RFI
http-putניסיון לבצע העלאה של קובץ זדוני לשרת בעזרת המתודה PUT, אם היא זמינה
http-enumסריקה כללית של מערכות web, בדגש על איתור דפים מעניינים
http-wordpress-enumסריקה ספציפית של מערכות wordpress, יעיל מאד למציאת תוספים
http-wordpress-bruteביצוע מתקפת brute-force בניסיון לאתר את פרטי ההתחברות בwordpress
dns-bruteאיתור סאב-דומיינים פעילים
http-csrfאיתור טפסים הפגיעים לCSRF במערכת הנסרקת
http-errorsאיתור דפים המכילים שגיאות (סטטוס +400)
http-open-redirectאיתור דפים בעלי קוד סטטוס 302 המבצעים הפנייה בעזרת פרמטרים
http-exif-spiderהוצאת המטא-דאטה של התמונות באתר
http-cookie-flagsאיתור עוגיות שלא משתמשות בHttponly וממילא חשופות לxss
http-auth-finderאיתור טפסים הדורשים אימות בדפי האינטרנט
http-grepחיפוש כתובות מייל וכתובות IP שנמצאו בדפי האתר הנסרק, ניתן להרחיב החיפוש

כעת, בשלב השני, נציג מספר סקריפטים שרלוונטים בעיקר בנוגע לביצוע מבדקי חדירה תשתיתיים:

ביצוע brute-force כלפי יציאות SSH פתוחות: בעזרת הסקריפט ssh-brute נוכל לבצע מתקפת brute-force מסוג dictionary attack כלפי שם המשתמש והסיסמא בחיבור הSSH במכונת הנתקפת שלנו, אם פורט הSSH (פורט מספר 22 בדרך כלל). ברמת העיקרון, נוכל להשתמש בסקריפט ללא פרמטרים כלל והסקריפט יטען קובץ עם שמות המשתמש והסיסמאות הנפוצים. לדוגמא: sudo nmap --script ssh-brute 192.168.150.10. נוכל גם להטעין קובץ עם שמות משתמש וסיסמא בעצמנו, בעזרת הארגומנטים userdb וpassdb.

התחברות לmysql ללא סיסמא: אם אנו רואים שmysql במערכת הנתקפת פתוח (פורט 3306 בדרך כלל), בעזרת הסקריפט mysql-empty-password נוכל לנסות ולהיכנס למערכת עם שם משתמש ברירת המחדל: root ולא סיסמא (פעמים רבות לא תהיה סיסמא לmysql). לדוגמא: sudo nmap --script mysql-empty-password 192.168.150.10.

ביצוע brute-force על פורט שליפת הדואר: בעזרת הסקריפט pop3-brute נוכל לבצע brute-force (שוב – מסוג dictionary attack) על שמות המשתמש והסיסמא לגישה לפרוטוקול, ששולף הודעות דואר אלקטרוני. גם כאן נוכל להשתמש בפרמטרים להוספת קובץ עם שמות משתמש וסיסמא או להריץ ללא פרמטרים ולהשתמש בקבצי הברירת מחדל, לדוגמא: sudo nmap --script pop3-brute 192.168.150.10.

זיהוי פרוטוקולי ההצפנה בהם משתמש הRDP: בעזרת הסקריפט rdp-enum-encryption נוכל לזהות את פרוטוקולי ההצפנה והאבטחה בהם משתמש פורט RDP (התחברות למחשב מרחוק, בדרך כלל 3389) אם הוא פתוח במכשיר היעד ובהתאם לכך, במקרה של שימוש בפרוטוקולים ישנים ופשוטים, לנסות לשבור את ההצפנה. דוגמא לשימוש: sudo nmap -9 3389 --dvcript rdp-enum-encryption 192.168.150.12.

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

ssh-bruteביצוע brute-force על שירות הSSH
mysql-empty-passwordניסיון להתחברות למסד הנתונים ללא סיסמא ועם המשתמש הדיפולטיבי root
pop3-bruteביצוע brute-force על פרטי יציאת שליפת הדואר POP3
rdp-enum-encryptionזיהוי פרוטוקולי ההצפנה בהם משתמש פורט הRDP
sniffer-detectבדיקה האם כרטיס הרשת של היעד נמצא במצב sniffer-mode (האזנה כללית)
smb-os-discovryקבלת מידע על המחשב הנסרק (סוג מערכת ההפעלה, שם משתמש וכו')
smb-lsאיתור הקבצים המשותפים והתיקיות המשותפות ברשת (במסגרת הSMB)
smtp-bruteביצוע brute-focre כלפי פרטי ההתחברות של שרת הSMTP
rsync-list-modulesמפרט מודולים זמינים לסנכרון קבצים מרחוק
bitcoin-infoקבלת מידע על שרתי ביטקוין (גרסאות וצמתים)

ipv6 וסיכום

רגע לפני סיכום, נדבר קצת על IPv6. בשנים הקרובות, המגמה שבשונה מהעולם, בישראל מתקדמת באיטיות יותר, תתעצם בישראל ועוד ועוד מכשירי תקשורת ואתרים יעברו לעבוד בפרוטוקול IPv6 בלבד. כמעט כל סריקות nmap תומכות בIPv6 (סריקות ICMP רק בTCP וכל האפשרויות של סריקת הפורטים וזיהוי מערכת ההפעלה).

ע"מ שנוכל לסרוק את כתובת הIPv6 של היעד, אנו צריכים להוסיף את הדגל 6- לסריקה וכמובן, להכניס את הכתובת בפורמט IPv6. לדוגמא: sudo nmap -sS -6 2001:db8::ff00:42:8329.

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

שימו לב: תמיד זכרו שיש לנו אפשרויות למקד ולהרחיב את יכולות הסקריפט, בעזרת הפרמטר script-args–.

Related Post

One Reply to “סריקה ותקיפה עם Nmap, חלק ב'”

  1. תודה על המדריך, בדיוק עובר ל WIFI מקווה שאתה מכין לנו עוד !
    רק דבר קטן..
    smb-os-discovry שהבאת ברשימת הסקריפטים בסוף צריך להכתב עם האות e , ככה :
    smb-os-discovery
    שוב תודה ! אשמח לתכנים נוספים במייל !

כתיבת תגובה

האימייל לא יוצג באתר.