
הטקסט המלא של הדקות הראשונות בהרצאה «חולשת DVWA LFI - חלק 1 Local File Inclusion» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
שלום לכולם, היום נלמד על Local File Inclusion. זאת שיטה שבה כתבו אתרי אינטרנט שיהיו דינאמיים, שיהיו מודולריים, שאפשר יהיה להוסיף בקלות עוד עמודים לאתר אינטרנט מוכן, והמתכנתים עשו את זה על ידי זה שהם אומרים לשרת איזה עמוד PHP להריץ, איזה עמוד להפעיל
שנמצא אצלו בשרת. נניח שיהיה לי תפריט ואני אוכל להוסיף עוד אופציות בתפריט, וכל אופציה בתפריט, כל אפשרות בתפריט, יהיה לה קובץ PHP משלה, קובץ בצד שרת, ואנחנו בתפריט נגיד לו תפעיל את העמוד הזה או עמוד אחר.
לרוב זה נראה דבר כזה שאומרים לו Page שווה ואיזה עמוד להפעיל. אם אני רואה ב-URL של האתר שכתוב Include.php או איזשהו עמוד.php, אני רואה אותו כפרמטר שצריך להפעיל, שימו לב, אחרי סימן שאלה הולכים פרמטרים נוספים שאנחנו מעבירים לדף אינטרנט מסוים.
לדוגמה, לדף הזה, לדף שנמצא בכתובת כזאת וכזאת, מעבירים פרמטר מה להפעיל. להפעיל עמוד שנקרא Include PHP. בואו נראה את זה מבפנים, בואו נראה איך כל הסיפור הזה עובד. אני רוצה להראות לכם מה עשה המתכנת, שתבינו מה הוא עשה ואיך אנחנו הולכים לנצל את זה.
אז דבר ראשון, אני רוצה לוודא שהסיקיוריטי שלנו ברמת מדיום, אתר מאובטח ברמה בינונית מדיום זאת רמת האבטחה של כל האתר שלנו אנחנו רואים שזה באמת מדיום יופי בוא נתחבר לאתר ונראה מה קורה שם מאחורי הקלעים נעשה ssh ניכנס לתוך מערכת ההפעלה ונבין
מה עשה שם המתכנת אני עושה ssh לכתובת IP של המכונה איפה שאתר האינטרנט עם יוזר שנקרא msfadmin זה היוזר שאיתו אני מתחבר לשם ונותן לו סיסמה שזה גם msf-admin. יופי, אנחנו בתוך השרת, אנחנו שם בפנים, ועכשיו אנחנו יכולים לעשות לדוגמה ls-l ולראות איזה קבצים יש לו בפנים.
לעשות pwd, לראות באיזה תיקי אנחנו נמצאים. נהדר. עכשיו אני רוצה להראות לכם מה עשה המתכנת בכתובת הזאת, שהוא לוקח את הפרמטר איזה עמוד להפעיל, איך זה נראה, מה קורה מאחורי הקלעים.
אז אני הולך לכתובת שלנו, אינדקס אינדקס זה ברירת המחדל זה כאילו כתוב פה אינדקס נקודה php כאילו כתוב פה אינדקס php זה העמוד שמופעל ברירת מחדל אם לא כותבים כלום ומעבירים לו פרמטרים ערכים נוספים כמו מידע נוסף שמעבירים לעמוד הזה אז זה העמוד שתכלס מופעל אז אנחנו יכולים לכתוב ככה ואנחנו יכולים גם לא לכתוב את השם שלו כי אם אנחנו
לא כותבים את השם שלו וכותבים רק את השם של התיקייה אז הוא לוקח כברירת מחדל עמוד בשם אינדקס. בקיצור, כאן כתוב הקוד. טוב, בואו נראה את זה, נעשה cut על הקובץ הזה.
אני עושה cut כדי להראות לכם מה קורה מאחורי הקלעים, וזאת הפקודה שרציתי להראות לכם, include dollar file. זאת אומרת, המתכנת עשה include על מה שאנחנו מעבירים לו ב-URL למעלה.
זה הסיפור, include ו-dollar file. עכשיו, אנחנו רק נתחכם, ובמקום להעביר לו את העמוד של התפריט שלו אנחנו אומרים לו תקשיב אל תראה לי את ה-include PHP שלך תראה לי עמוד אחר מתוך ה-hard disk שלך כאילו אני מתחכם איתו הוא מנסה להריץ אותו ב-PHP
אבל אם הוא לא מצליח למצוא פקודת PHP הוא סתם מציג לי את זה על המסך ואנחנו עושים פה etc passwd ורואים רשימת היוזרים מתוך ה-hard disk של השרת אתם רואים לדוגמה אני רואה שיש יוזר בשם root וה-ID שלו 0,0,0,0 והוא בנבאש.
זאת אומרת שהמתכנת שם לא חשב על זה שאני אבקש מהאתר להציג לא את העמוד שתכנת המתכנת המקורי ב-PHP עבור תפריט מסוים, אני אבקש קובץ אחר בארדיסק.
וככה אני גונב לו את המידע למעשה מתוך הארדיסק. יפה מאוד. אז תגידו, מה אתה תעשה עם זה? קודם כל, אני יכול לשלוף משם רשימת יוזרים, רשימת סיסמאות, אני יכול לשלוף כל מיני דברים שליוזר יש כניסה, לשלוף מידע, אבל אני לא יכול בשלב
הזה לשלוח לשרת פקודות. מה קורה אם אני רוצה להשתלט עליו? אז זה מה שאנחנו הולכים לעשות, אנחנו רוצים להריץ בתוך השרת פקודות, אבל יש לנו בעיה, אין לנו אפלוד לקובץ.
אם הייתי יכול לעשות אפלוד לקובץ, הייתי מעלה את הקובץ ואומר לשרת תריץ אותו. אבל זה ברור שזה אפשרי, כן? לגרום לשרת להריץ קובץ, כי בעצם הפייג' הזה, הפייל אינקלוז'ן הזה מריץ קבצים שאני אגיד לו בתוך השרת אבל מה קורה אם אין לי אפלואוד?
איך אני יכול לדחוף לשם הקובץ בלי אפלואוד? והתשובה היא דרך קובץ לוג הרי קובץ לוג מתעד את מה שהמשתמש עשה ואני יכול לגרום לו לתעד את מה שאני ארצה לעשות איזושהי פעולה לא נכונה העיקר שהתיעוד ייכנס לקובץ לוג ואז אני אגיד לו להריץ את הלוג ואז כאילו בלי Upload אני גורם לו לכתוב מה שאני רוצה בהארדיסק שלו.
למה? כי אני עושה פעולה לא נכונה, אבל הוא מתעד אותה. הוא מתעד את הפעולה שלי גם אם היא לא נכונה. ואז התיעוד נשאר בהארדיסק של השרת, ואני גורם לו להריץ את זה משם.
בואו תראו דוגמא. לדוגמא יש לי קובץ של כל הלוגים. פתאום נניח מישהו ניסה להיכנס לשרת והמערכת מתעדת את זה. תסתכלו את זה.
אתם רואים? cut, אני עושה cut. בואו נעשה כמה אנטרים שתראו. קאט ל-VAR log authentication log, פה מתועדים כל הכניסות לתוך המערכת. לדוגמה, נכנסנו עם user msfadmin, בבקשה, זה מתועד שנכנסנו עם msfadmin לתוך המערכת.
זאת אומרת, זה קובץ authentication.log שמתעד את הכל, את כל הלוגינים. שימו לב מה אנחנו יכולים לעשות. אנחנו יכולים לבקש את אותו הקובץ דרך אתר אינטרנט, דרך וב.
זאת אומרת, אנחנו יכולים לעשות ככה. בלי שאנחנו יודעים שום נתון על השרת הזה, רק שמנו לב שיש לו פה בפרמטר איזשהו שם של קובץ שמעבירים לו. אנחנו נעביר לו קובץ, var לוגות education log, והוא שולף לי פה על המסך את כל הלוגים של כל מי שניסה להיכנס לשרת הזה.
שימו לב, במה שאני מראה לכם דרך דפדפן, אני עושה את זה כמשתמש מבחוץ שלא יודע שום שם ושום סיסמה. אני סתם זיהיתי url בעייתי ואני חושד שיש פה שיטת פייל אינקלוז'ן ואם אני רואה שיטת פייל אינקלוז'ן אני מנסה לעשות דבר כזה ולגלות האם שרת מוכן להריץ קבצים אחרים שהמתכנת לא התכוון במקור ואני רואה שזה מצליח אני נותן לו להראות לי קובץ לוג
מתוך הארדיסק והוא מראה כאשר מה המתכנת במקור רצה לעשות אני מזכיר לכם פה בפייל אינקלוז'ן בפייל אינקלוז'ן במקור הוא רצה לעשות כל מיני עמודי PHP שהוא תכנת.
לרוב עושים ככה תפריטים שאפשר יהיה לתכנת בקלות. כל אופציה בתפריט עושים קובץ PHP משלה כדי לתכנת אותה בנפרד. אני במקום זה דוחף לו קובץ אחר בהרדיסק שלו והוא מוכן להראות לי אותו.
כי המתכנת לא חשב על זה שיבקשו משהו אחר מתוך ההרדיסק. אוקיי, זה מצוין. מה נשאר לנו?
נשאר לנו לדחוף לקובץ לוג פקודה שאנחנו נרצה שהוא יבצע. הפקודה הזאת צריך לכתוב בשפת PHP כי מה שהוא עושה הוא לא סתם מציג מידע על המסך הוא מנסה להעריץ את כל מה שיש בתוך הקובץ הזה כי זה אמור להיות קובץ PHP שהוא מנסה להעריץ ואם הוא רואה משהו שהוא לא תקני מבחינת שפת PHP הוא סתם מציג את זה על המסך אז איך אנחנו נגרום לפקודת PHP