Sono nuovo per garantire la revisione del codice. So che strlen calcolerà la lunghezza finché non troverà un carattere nullo. Questa è una parte di un codice più grande.
char* executeMount(char* password, char* path, int unmountOrMount)
{
char* catString = new char[(strlen("echo|set /p password=") + strlen(password) + strlen(" | runas /user:administrator \"mountvol ") + strlen(path) + 1)];
strcpy(catString, "echo|set /p password=");
strcat(catString, password);
strcat(catString, " | runas /user:administrator \"mountvol ");
strcat(catString, path);
//Equivalent command: system("echo|set /p password=" + adminPassword + " | runas /user:administrator mountvol" + path);
return catString;
}
Restituirà lead di catString a un overflow del buffer?
Strlen calcolerà tutte le stringhe fino a raggiungere un terminatore nullo. Quindi catString è la lunghezza totale di tutte le stringhe + 1 (per il terminatore null). strcpy copierà echo | set / p password="+ terminatore null. Seguendo strcat rimuoverà il terminatore null e concatenare" password "ma lo strcat successivo non rimuoverà il terminatore null che porta al buffer overflow? Il mio pensiero è corretto? vulnerabile a qualsiasi altra minaccia?