ejecutando un proceso con argc = 0

¿Es posible ejecutar un proceso cuyo argc = 0? Necesito ejecutar un progtwig, pero es extremadamente importante que su argc sea igual a 0. ¿Hay alguna manera de hacerlo? Intenté colocar 2 ^ 32 argumentos en la línea de comando para que aparezca como si argc = 0, pero hay un límite máximo para el número de argumentos.

Puedes escribir un progtwig que llame directamente a exec ; que le permite especificar los argumentos de la línea de comandos (incluido el nombre del progtwig) y la falta de ellos.

Podría escribir un progtwig en C que genere / ejecute el otro progtwig sin argv, como:

 #include  #include  int main(int argc, char** argv, char** envp) { pid_t pid; char* zero_argv[] = {NULL}; posix_spawn(&pid, "./that_app", NULL, NULL, zero_argv, envp); int status; waitpid(&pid, &status, NULL); return 0; } 

Puede utilizar el sistema de linux llamada execve () .

 int execve(const char *filename, char *const argv[], char *const envp[]); 

Puede pasar el nombre del archivo ejecutable y un puntero nulo como argv [] para ejecutar el binario y el argc será cero.

Es mi código de prueba:

 #include  #include  int main( void ) { char *argv[]={ NULL }; execv( "./target", argv ); return ( 0 ); } 

Y el resultado de Strace es:

 execve("./target", [], [/* 20 vars */]) = 0 

Podría usar envp [] para pasar los argumentos que definió de todos modos.

Además, puede usar lenguaje ensamblador para alcanzar su objective (argc == 0 pero aún necesita pasar argumentos). Supongo que está utilizando un entorno x86 de 32 bits.

El concepto es que:

  • almacene 0x0b ($ SYS_execve) en % eax
  • poner la dirección de argv [] en % ebx
  • poner la dirección de envp [] en % ecx
  • luego use int 0x80 para hacer una llamada al sistema

La estructura de la memoria se muestra a continuación:

 +--------------------------------------------------+ | +----------------------------------|-----+ vv v------------------|-----|-----+ [arg_0][\0][...][arg_1][\0][...][arg_2][\0][...][ptr0][ptr1][ptr2][\0] ^ | (argv[] = NULL) +--- envp 

Me pregunto si estuvieras haciendo la tarea de laboratorio del curso proporcionado por el profesor Taesoo Kim (GATech). Enlace del curso: https://tc.gtisc.gatech.edu/cs6265

¿O es un problema de hackers CTF (catch-the-flag)?

    Intereting Posts