String input vulnerabilities



  • Hey,

    ich habe zwei Programme mit Fehlern gefunden, jedoch ohne Lösung.

    int main( int arg, char *argv[]){
    int a = 1;
    int b = 2;
    int c = 3;
    char buff1[32];
    char buff2[] = "BBB"
    int d = 4;
    
    memset(buff1,'A',32);
    snprintf(buff1, sizeof(buff1), argue[1]);
    buff[sizeoff(buff1) - 1]= '\0'; 
    printf ("buff1: [%s] (%d) \n", &buff1, strlen(buff1));
    }
    

    ich glaube der Fehler is, dass snprinft die format strings als input interpretiert. Kann ich das verhindern durch:

    snprintf(buff1, sizeof(buff1), %s, argue[1]);
    

    ?

    Das zweite Programm wäre:

    int main(int arg, char *argv[]{
    char user[512];
    strncpy(user, argv[1],511);
    char outbuf[512];
    char buffer[512];
    sprintf(buffer,"ERR Wrong Command: %.400s", user);
    sprintf(outbuf, buffer);
    return 0;
    
    }
    

    hab ein wenig gegoogelt und hier soll buffer stretching stattfinden.
    Ich verstehe aber nicht wo und weshalb.

    Danke!



  • soll argv heißen und nicht argue



  • MeWinz schrieb:

    ich habe zwei Programme mit Fehlern gefunden,

    Heißt: Ich habe die Hausaufgabe, die Fehler in diesen beiden C-Programmen zu beheben.



    1. Ja, niemals User Input als Format String verwenden, dafuer verwendet man "%s" .

    Uebergib z.B. mal %100s und %1000s als Command-Line Argument. Ersteres ist kein problem, das zweite wird crashen.

    Dann kannst du dir mal ausgeben lassen wie lange buffer ist und den Inhalt.

    *Edit
    Allgemein findest du hier einiges zum Thema.



  • Ich habe schon seit 10 Jahren keine Hausaufgaben mehr 😉



  • @icarus2: ok danke!



  • der fehler liegt darin, rohe arrays anstelle von std::array bzw. std::vector bzw. std::strings zu verwenden. außerdem auch darin, nicht-typsichere funktionen zu verwenden (snprintf).


Anmelden zum Antworten