במאמר זה נראה כיצד עוברים את אתגר ה- web של hack.me רמת האתגר הינה קלה-בינונית
לפני שאתם ממשיכים לקרוא, מומלץ מאד לנסות ולפתור את האתגר לבד
תוכנות בהם נשתמש :
- Burp – ניתן להוריד ולהתקין מכאן : https://portswigger.net/
- Sqlmap ניתן להוריד מכאן http://sqlmap.org/
שלב ראשון : מציאת הSALT
החולשות אשר בהם נשתמש על מנת לעבור את השלב הזה הינם LFI, Directory traversal
בקצרה על החולשות :
- Directory traversal – הינה חולשה המאפשרת לעבור בין תיקיות,
על בסיס העיקרון שהפקודה ../ מייצגת תיקיה קודמת (לדוגמא עם ב cmd נרשום cd ../ נגיע לתיקיית האב)
- LFI – חולשה אשר מאפשרת לתוקף להריץ קוד אשר כבר נמצא בתיקיית השרת
ניצול החולשות:
שלב ראשון זיהוי פרמטר פגיע בלינק /about.php?a=industrialization פרמטר a
נבדוק האם קיים RFI אשר יאפשר לנו להריץ קוד על השרת
בתמונה נראה כי השרת אינו יוצא החוצה אך השגיאה חשפה לנו מידע רב:
]: open_basedir restriction in effect. File(about/https://en.wikipedia.org/wiki/Brewery) is not within the allowed path(s): (C:\inetpub\wwwroot\coliseum\sandboxes\76479-101303\BODY\inner\;C:\inetpub\wwwroot\coliseum\sandboxes\76479-101303\SESSION\SESSIONDIR\;C:\inetpub\wwwroot\coliseum\sandboxes\76479-101303\SESSION\UPLOADTMPDIR\) in
כעת אנו יודעים היכן אנו רצים ננסה לגלוש לתיקיה אחורה
ניתן לראות כי הפרמטר שאנו שולחים נכנס לפונקצית INCLUDE ולכן מתקיים LFI קיבלנו Permission deny כי שלחנו תיקיה נחפש את הקובץ שאנחנו רוצים
ניתן לראות כי קיימת תיקיה בשם config
לעומת תיקיה שלא קיימת נקבל 404
ניגש לקובץ שאנחנו צרכים לחפש
וקיבלנו את המפתח =]
הURL הנדרש: https://hackil.co.il.01303-d8n.croto.hack.me/about.php?a=../config/config.php
שלב שני : מציאת ה HASH של היוזר
החולשה בה השתמשנו הינה SQLLI
בקצרה על החולשה :
בחולשה זו אנו חורגים מהקלט שמוקצה לנו אל תוך שאילתת ה -sql
ניצול החולשה:
נמצא פרמטר הנראה לנו חשוד. פרמטר ה – ID
נבדוק האם אכן הוא פגיע ובהזרקת ' נקבל את הארור הבא
נעזר בSQLMAP נשמור את הבקשה הזאת ונסמן לSQLMAP על הפרמטר הפגיע ב *
נריץ SQLMAP ונראה האם יוכל לנצל את החולשה
לבסוף נראה כי SQLMAP מאשש את הבדיקה שלנו לSQLI אשר ניתן להשתמש בו
SQLMAP מצא דרך להרצת blind sqlmap
נוציא את הנתונים מהמסד
נראה כי מצאנו את הטבלה הנכונה ננסה להוציא אותה
בגלל שאנו משתמשים ב- Blind base לוקח לסקריפט יותר מידי זמן להוציא את המידע ניסינו ליעיל זאת באמצעות threads וחיפוש רק של הנתונים שאנחנו מחפשים אך זה לא הלך
ניסינו לומר במפורש ל SQLMAP כיצד לעבוד ואכן הצלחנו להריץ UNION
קיבלנו את הHASH UzA5T05UWTRkZnNhNzgwZnNkNmI3OGY2YmRzNmFmdDg3NmFzZDY1OGE=
אשר הביא לנו את הניקוד =]
שלב שלישי :הבנת מנגנון ה HASH (או לא HASH בדיוק )
:החולשה SQLI
נשתמש באותה חולשה שמצאנו מקודם
ניצול החולשה :
נריץ את השאילתה הבאה SELECT table_comment FROM information_schema.tables WHERE table_name='users'
ונקבל את הרמז : password = base64(base64(password) + salt)
נבצע את ההוראות על האש (ב- burp נלך ל decoder ונפעיל על ה- hash decode של פעמיים base64 )
נראה כי הסיסמא היא KON568
נבדוק :
סיימנו =]
את ההזרקות אפשר לבצע ידנית ולא באמצעות sqlmap
הזרקה ידנית
http://s76479-101303-z2g.croto.hack.me/beer.php?id=1' UNION select NULL,concat("DB Version:",version(),"DB User:",user()),NULL --'
הסבר על ה PAYLOAD
' UNION select NULL,concat("DB Version:",version(),"DB User:",user()),NULL –'
- ה ' הראשון נועד לחמוק מתחום הקלט של המשתמש
- ה UNION נעזר בפונקציית SQL אשר מאחדת בין שאילתות
- select NULL,concat("DB Version:",version(),"DB User:",user()),NULL השאילתה אותה נריץ היא תחזיר מי היוזר ומה גרסאת ה- DB בעמודה השנייה
- ‘—נשים את כל השאר בהערה
אחלה מאמר