Estoy jugando un juego de guerra CTF y, por desgracia, me quedé atascado en este nivel, así que quiero "crowdsourcing". No hay necesidad de una respuesta completa, pero las sugerencias serían suficientes.
¿Cómo puedo:
- Haz que strcmp sea 0 (evalúa si es falso)
- ¿De alguna manera, suprimir las canciones?
Quiero que el shell sea ejecutado:
execl("/bin/sh", "sh", NULL);
¿Alguna idea?
Binary es setuid y /levels/level08.pass solo se puede leer en un nivel superior.
-r-sr-x--- 1 level9 level8 7696 Apr 25 2015 level08
-r-------- 1 level8 level8 412 Apr 25 2015 level08.c
-r-------- 1 level9 level9 13 Apr 25 2015 level08.pass
El código del programa para el nivel08.c está debajo.
#include <signal.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
int main(int argc, char *argv[]) {
char buf[64];
FILE *fp;
signal(SIGABRT, SIG_DFL);
fp = fopen("/levels/level08.pass", "r");
fgets(buf, 64, fp);
buf[strcspn(buf, "\n")] = 'execl("/bin/sh", "sh", NULL);
';
if(strcmp(buf, argv[1]))
raise(SIGABRT);
execl("/bin/sh", "sh", NULL);
}