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ónaccess()
. - 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);
}