Uso del desbordamiento de búfer para ejecutar un comando en execlp ()

0

Estoy tratando de mejorar mis habilidades en desbordamientos de búfer y, este es mi escenario:

  • Hay 2 variables de cadena C definidas posteriormente.
  • Ambos están tomando la entrada del usuario; el primero es un nombre de archivo y el otro son los argumentos.
  • Soy capaz de desbordar el segundo argumento para manipular el primero. Y el nombre de archivo se verifica con la función access() , no es posible desbordarlo directamente. El segundo argumento se verifica y se copia después de la verificación access() .
  • Estas variables se utilizan en execlp(filename, filename, arguments, (char *)0)

Lo que he intentado es, proporcioné una gran cantidad de 'A' s y agregué un /bin/bash para desbordarlo. El problema con esto es que también envía la carga útil como argumento al nombre de archivo. Esto provoca un error filename or directory not found .

Cuando intenté crear ese directorio ficticio manipulando la carga útil, no se pudo ejecutar un archivo binario al mostrar cannot execute binary file o no se pudo reconocer el comando bash -c al mostrar bash: - : invalid option .

Busqué el uso de execlp y, q & a in stackoverflow lo muestran así:

execlp("/bin/bash", "bash", "-c", "SOME_PIPED_COMMANDS")  

¿Hay alguna forma de proporcionar opciones y argumentos para golpear en la variable arguments ?

char arguments[192];
char filename[192];

int main(argc, *argv) {
     //Check filename here
     strcpy(arguments, argv[2]);
     execlp(filename, filename, arguments, (char *)0);
}    
    
pregunta Kaan 02.10.2018 - 21:44
fuente

0 respuestas

Lea otras preguntas en las etiquetas