ABA


"כושלה חדשה, לסופש רגוע וכיפי"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #15983 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 15983
Sn00py 
חבר מתאריך 1.8.02
2954 הודעות
   00:56   17.07.10   
אל הפורום  
  כושלה חדשה, לסופש רגוע וכיפי  
 
   קישור עם הסברים לחלק הראשון, לטובת אלו שמצטרפים אלינו בפעם הראשונה:
https://rotter.name/nor/prog/15952.shtml
חלק #2:
https://rotter.name/nor/prog/15956.shtml
חלק #3:
https://rotter.name/nor/prog/15965.shtml
חלק #4:
https://rotter.name/nor/prog/15974.shtml
חלק #5:
https://rotter.name/nor/prog/15975.shtml

---------------------------------------------------------

יחסית פשוט הפעם.
הקוד הנפלא שלי מאפשר לנו להריץ notepad עם שם קובץ לבחירתנו.
בעת התחלת התוכנית נדרש לתת שם קובץ, והוא יפתח לנו אותו עם שם הקובץ שניתן.

הערה #1: נניח שהקלט מגיע ממקור לא בטוח(נניח, מהאינטרנט)
הערה #2: אנחנו רוצים לאפשר לפתוח רק קבצים באותה תיקיה שה"סרבר" שלנו רץ, לכן קיימת הפוקנציה verifyThatThePathIsInCurrentDirectory שנתון שהיא עושה את עבודתה - היא מוודאת שאין בנתיב סלאשים, נקודות ונקודתים.
בנוסף, בשל השימוש ב cin >> var, אנחנו לא יכולים לקלוט רווחים(תנסו ותראו) - זאת התנהגות רצויה ובסדר(ואף טובה הגנתית).

יאללה, אז מה הבעיה כאן? מה הסיכון?
תפציצו


#include <iostream>

using namespace std;

void openNotepadWithParam() {
char a[250] = "c:\\windows\\system32\\notepad.exe ";

char b[30];
cin >> b;

// protect against ../.., or c:\file.txt
verifyThatThePathIsInCurrentDirectory();

strcat(a, b);

system(a);
}

int main() {
openNotepadWithParam();

return 0;
}

\x6C\x65\x65\x74\x68\x61\x78\x30
\x72\x3A\x2D\x29
tresp4sser


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  אם אני זוכר נכון strcat akoka2 17.07.10 10:56 1
     אין בעיה לבצע casting מ-non-const ל-const ldan192  17.07.10 11:25 2
  שאתה אומר שverifyThatThePathIsInCurrentDirectory ronen333  17.07.10 12:02 3
     תקרא ת'קוד Sn00py  17.07.10 13:07 4
         אווקי, ומה עם השאלה השניה? ronen333  17.07.10 13:42 5
         אם זה מריץ בCMD זה אומר שאתה גם יכול לעשות ronen333  17.07.10 14:46 6
             סבבה, באמת עם & אפשר להריץ עוד קובץ Sn00py  17.07.10 14:57 7

       
akoka2

   10:56   17.07.10   
אל הפורום  
  1. אם אני זוכר נכון strcat  
בתגובה להודעה מספר 0
 
   מקבלת char כוכב בפרמטר הראשון, וconst char * בפרמטר השני, אולי פה הבעיה הראשונה?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ldan192 
חבר מתאריך 14.9.08
95119 הודעות
   11:25   17.07.10   
אל הפורום  
  2. אין בעיה לבצע casting מ-non-const ל-const  
בתגובה להודעה מספר 1
 


בברכה,
עידן


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות
   12:02   17.07.10   
אל הפורום  
  3. שאתה אומר שverifyThatThePathIsInCurrentDirectory  
בתגובה להודעה מספר 0
 
   ערכתי לאחרונה בתאריך 17.07.10 בשעה 12:06 בברכה, ronen333
 
בודק אם זה נכון, זה אומר שזה גם בודק את הסיכונים כמו לחזור אחורה והכל?
בנוסף, למה היא בדיוק בודקת? לא שלחת שום ארגומנט.

ומה הפועלה system עושה?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Sn00py 
חבר מתאריך 1.8.02
2954 הודעות
   13:07   17.07.10   
אל הפורום  
  4. תקרא ת'קוד  
בתגובה להודעה מספר 3
 
   כתבתי בהערה, היא בודקת נגד directory traversal("חזרה אחורה").
לא יודע אם הכל - כמו שכתבתי בהודעה המקורית, היא מוודאת שאין בנתיב סלאשים, נקודות ונקודתים. אם אתה מוצא כושלה שלא מערבת את התווים האלה - תפציץ

הפעולה system - תקרא בעקרון היא פשוט מריצה פקודת cmd במערכת.

\x6C\x65\x65\x74\x68\x61\x78\x30
\x72\x3A\x2D\x29
tresp4sser


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות
   13:42   17.07.10   
אל הפורום  
  5. אווקי, ומה עם השאלה השניה?  
בתגובה להודעה מספר 4
 
   למה היא בודקת? לא שלחת שום ארגומנט.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות
   14:46   17.07.10   
אל הפורום  
  6. אם זה מריץ בCMD זה אומר שאתה גם יכול לעשות  
בתגובה להודעה מספר 4
 
   "הזרקות" של פקודות לתוך הסטרינג.

בנוסף צריך לעשות טיפול לתווים כמו \, $, /, ;, (, ), |, >, <, &.

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

קיצור יש הרבה סכנות פה :| זה למה אני אוהב FRAMEWORK, דואג לכל השטויות האלה D=


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Sn00py 
חבר מתאריך 1.8.02
2954 הודעות
   14:57   17.07.10   
אל הפורום  
  7. סבבה, באמת עם & אפשר להריץ עוד קובץ  
בתגובה להודעה מספר 6
 
   ואז אפשר לפתוח הרבה דברים שלא כדאי שנפתח, ולהשתלט על המחשב
טוב זה היה באמת פשוט, אבל חשוב לשים לב כי החושלה הזאת של shell injection נפוצה בטירוף.

\x6C\x65\x65\x74\x68\x61\x78\x30
\x72\x3A\x2D\x29
tresp4sser


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net