פתרון לאתגר פריצה hack.me

By | ינואר 11, 2018

במאמר זה נראה כיצד עוברים את אתגר ה- web של hack.me רמת האתגר הינה קלה-בינונית

לינק לאתגר

לפני שאתם ממשיכים לקרוא, מומלץ מאד לנסות ולפתור את האתגר לבד

תוכנות בהם נשתמש :

 

שלב ראשון : מציאת הSALT

החולשות אשר בהם נשתמש על מנת לעבור את השלב הזה הינם LFI, Directory traversal

בקצרה על החולשות :

  1. Directory traversal – הינה חולשה המאפשרת לעבור בין תיקיות,

על בסיס העיקרון שהפקודה ../ מייצגת תיקיה קודמת (לדוגמא עם ב cmd  נרשום cd ../ נגיע לתיקיית האב)

  1. 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 –'

  1. ה ' הראשון נועד לחמוק מתחום הקלט של המשתמש
  2. ה UNION נעזר בפונקציית SQL אשר מאחדת בין שאילתות
  3. select NULL,concat("DB Version:",version(),"DB User:",user()),NULL השאילתה אותה נריץ היא תחזיר מי היוזר ומה גרסאת ה- DB בעמודה השנייה
  4. ‘—נשים את כל השאר בהערה

דירוג

Comments

comments

One thought on “פתרון לאתגר פריצה hack.me

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *