אינטרנט ישראל
  • ראשי
  • אודות רן בר-זיק ואינטרנט ישראל
  • ערוץ טלגרם
  • מסטודון
  • התחברו אלי בטוויטר
  • התחברו אלי בלינקדאין
  • ספר ג'אווהסקריפט
  • ראשי
  • אודות רן בר-זיק ואינטרנט ישראל
  • ערוץ טלגרם
  • מסטודון
  • התחברו אלי בטוויטר
  • התחברו אלי בלינקדאין
  • ספר ג'אווהסקריפט
ראשי » חדשות אינטרנט » לקחת את ה-SQL Injection למקומות רחוקים

לקחת את ה-SQL Injection למקומות רחוקים

רן בר-זיק אוגוסט 18, 2019 7:07 am 9 תגובות

המקרה המדהים של SQL Injection בשעת לילה מאוחרת

כדאי תמיד להשאר מעודכנים! אם יש לכם טלגרם, בדקו את ערוץ הטלגרם של האתר שבו אני מעדכן על פוסטים חדשים 🙂 אם אתם רוצים ללמוד תכנות באופן מקיף ומסודר, הצטרפו לאלפי הלומדים בפרויקט "ללמוד ג'אווהסקריפט בעברית" שמלמד לתכנת בג'אווהסקריפט, ב-Node.js ובריאקט וגם מלמד על תרומה לקוד פתוח. גם ספרים דיגיטליים וגם ספרים מודפסים. בשיתוף הקריה האקדמית אונו ובתמיכת חברות מובילות כגון Wix, Outbrain, Elementor, Iron Source, Chegg, Really Good ועוד.

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

בגדול, פירצת SQL מאפשרת לנו להזריק פקודת SQL. הדוגמה הפשוטה ביותר היא ב-Node.js. שימו לב לקוד הזה למשל:

const username = req.body['username'];
const password = req.body['password'];
const query = `SELECT * FROM users WHERE username = "${username}" AND password = "${password}";`

זה קוד שלא צריך להכיר Node.js או Express כדי להבין אותו. בגדול, המשתמש שולח בטופס username ו-password ואנו שמים אותם בשאילתת MySQL כדי לבדוק אותם. אם למשל המשתמש שולח שם משתמש admin וסיסמה 123456 השאילתה שתרוץ היא:

SELECT * FROM users WHERE username = "admin" AND password = "123456"

אם יש שם משתמש וסיסמה כאלו, אז התוצאה היא TRUE ואז הקוד יודע שמדובר במשתמש ולידי ויכול להציב אצלו עוגית סשן או להציג לו את העמוד המתאים. אבל יש חולשה משמעותית בקוד הזה, כי משתמש יכול לשלוח שם משתמש admin וסיסמה שהיא:

" OR "1" = "1

ואז השאילתה תרוץ כך:

SELECT * FROM users WHERE username = "admin" AND password = "" OR "1" = "1"

וכיוון שהכנסנו את התנאי של ״1״=״1״ בעורמה, התוצאה תמיד תהיה TRUE. זה SQL Injection בסיסי. המשתמש יכול להכניס איזו שאילתה שבא לו בקוד הזה, כמו DROP או SELECT אחר שמביא לו את כל מסד הנתונים בכיף.

זו הסיבה שמתכנתים מפלטרים כל קלט וקלט שמגיע מהמשתמשים – כי לך תדע מה יכניסו. יש המון שיטות ומנגנונים נגד SQL Injection בכל מיני רמות. יש גם מנגנונים שמונעים הכנסה מראש של משתנים באופן הזה לקוד, כמו PHPCS למשל או כלי ניתוח אחרים. בנוסף לאבטחה אפליקטיבית, יש גם הגנות אחרות כמו למשל WAF – פיירוול שינסה לראות אם יש פרמטרים חשודים. למשל אם הוא יראה שהמשתמש שולח OR ומרכאות הוא יקח את הבקשה מהמשתמש וידווח עליה ויעיף אותה כמו אייל גולן מכנס אתיקה ומוסר.

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

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

-1 union select top 1 null, lead(pass, 0) over (order by pass) from users;

התשובה היא לא. צילום המסך הזה יראה לכם:

הזרקת קוד באתר פרטנר

מתכנתי האתר, מסיבות שבאמת נפלאות מבינתי – לקחו את ה SQL Injection שלב אחד קדימה. למה להקשות על תוקפים פוטנציאליים ולהכריח אותם לשנות את הקלט כאשר אפשר לבנות ממשק מיוחד שמאפשר להכניס ישירות כל שאילתה שהיא למסד הנתונים ולקבל את התוצאה בשופי ובנחת. כל מה שהתוקף היה צריך לעשות זה להכניס איזו שאילתה שבא לו. למשל:

SELECT * FROM ALL_CATALOG

שמביא לכם את כל הישויות שיש במסד הנתונים ואז אפשר להקליד איזה SELECT שבא לנו. כמו בדוגמה למשל:

SELECT * FROM all_users

ואת הממשק הזה הם שמו ברשת באופן גלוי לכל אחד.

ללא מילים.

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

כדאי תמיד להשאר מעודכנים! אם יש לכם טלגרם, בדקו את ערוץ הטלגרם של האתר שבו אני מעדכן על פוסטים חדשים 🙂 אם אתם רוצים ללמוד תכנות באופן מקיף ומסודר, הצטרפו לאלפי הלומדים בפרויקט "ללמוד ג'אווהסקריפט בעברית" שמלמד לתכנת בג'אווהסקריפט, ב-Node.js ובריאקט וגם מלמד על תרומה לקוד פתוח. גם ספרים דיגיטליים וגם ספרים מודפסים. בשיתוף הקריה האקדמית אונו ובתמיכת חברות מובילות כגון Wix, Outbrain, Elementor, Iron Source, Chegg, Really Good ועוד.
אבטחת מידע

9 תגובות

  1. משתמש אנונימי (לא מזוהה) הגב אוגוסט 18, 2019 בשעה 12:24 pm

    בהחלט התקדמות באבטחת מידע 🙂
    מדהים!

    • משתמש אנונימי (לא מזוהה) הגב אוגוסט 18, 2019 בשעה 9:49 pm

      הם לקחו את graphQl צעד אחד קדימה

  2. אני הגב אוגוסט 19, 2019 בשעה 1:54 am

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

    • אורן הגב אוגוסט 19, 2019 בשעה 11:43 am

      לאני, ואו. כדאי להבהיר זאת לפרטנר!!! אם כל הפרסומות שלהם וכזה דבר חשוב לא מעיר אותם משנתם!!!! אוי.

  3. שחר הגב אוגוסט 19, 2019 בשעה 6:17 am

    מצאתי את מקור ההשראה שלהן לתכנון:

    https://thedailywtf.com/articles/injection-by-design

  4. משתמש אנונימי (לא מזוהה) הגב אוגוסט 19, 2019 בשעה 1:10 pm

    או לעבוד עם ORM ,

    • דוד הגב אוגוסט 22, 2019 בשעה 12:55 pm

      או שהם משתמשים עם insert ignore שלא קיים בorm (עם DAL)..

  5. יאיר טנדלר הגב ספטמבר 1, 2019 בשעה 10:20 am

    קודם כל פשוט ויפה.
    אבל באמת אחרי כל כך הרבה שנים של פריצות דרך SQL INJECTION איך תוכניתנים עדיין
    לא עושים STRIP לSTRING שמקבלים מהשתמש.

  6. יוסף הגב ספטמבר 1, 2019 בשעה 7:03 pm

    איך מבטלים כאלה פרצות בשרת NODE.JS?

השארת תגובה

ביטול

ללמוד ג'אווהסקריפט בעברית

ללמוד לתכנת ג'אווהסקריפט בעברית שגייס יותר משלוש מאות אלף שקל ולמעלה מ-2000 תומכים - בואו ללמוד עכשיו איך לתכנת.

רשימת הנושאים
  • מדריכים
    • ריאקט
    • טייפסקריפט
    • ECMAScript 6
    • ES20XX
    • Node.js
    • Express
    • רספברי פיי
    • Babel
    • docker
    • MongoDB
    • Git
    • לימוד MySQL
    • SASS
    • jQuery
    • CSS3
    • HTML 5
    • SVN
    • LESS
  • פיתוח אינטרנט
    • פתרונות ומאמרים על פיתוח אינטרנט
    • jQuery Scripts
    • jQuery למתקדמים
    • יסודות בתכנות
    • נגישות אינטרנט
  • חדשות אינטרנט
  • מידע כללי על אינטרנט
    • רשת האינטרנט
    • בניית אתרי אינטרנט
  • rss logo

    לכל המאמרים

    לכל המאמרים שפורסמו באינטרנט ישראל משנת 2008 ועד עכשיו.
  • rss logo

    RSS Feed

    משתמשים בקורא RSS? אם כן, עקבו אחרי אינטרנט ישראל באמצעות פיד ה-RSS!
    מה זה RSS?
  • Twitter logo

    עקבו אחרי בטוויטר

    בחשבון הטוויטר שלי אני מפרסם עדכונים מהירים על חדשות בתחום התכנות והיזמות, התרעות על מצבי חירום ורכילות בוערת על תחום הווב.
    מה זה טוויטר?
  • facebook like image

    ערוץ הטלגרם של אינטרנט ישראל

    בערוץ הטלגרם של אינטרנט ישראל אני מפרסם את הפוסטים של באתר וכן עדכונים טכנולוגיים נוספים.
    מה זה טלגרם?
  • github logo

    הפרויקטים שלי בגיטהאב

    הפרויקטים שאני כותב ושוחררו לציבור ברישיון קוד פתוח נמצאים ברובם בגיטהאב.
חיפוש

כל הזכויות שמורות לרן בר-זיק ולאינטרנט ישראל | מדיניות הפרטיות של אתר אינטרנט ישראל | אתר אינטרנט ישראל נגיש לפי תקן WCAG 2.0 AA | הצהרת הנגישות של האתר | אבטחת מידע ודיווח על בעיית אבטחת מידע

גלילה לראש העמוד