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.
-
-
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).