Sto giocando a un wargame CTF e sfortunatamente sono rimasto bloccato a questo livello, quindi voglio "crowdsourcing". Non c'è bisogno di una risposta completa, ma i suggerimenti sarebbero sufficienti.
Come posso:
- Rendi strcmp da 0 (valuta se a false)
- In qualche modo surprima i cantanti?
Voglio che la shell sia eseguita:
execl("/bin/sh", "sh", NULL);
Qualche idea?
Binary è setuid e /levels/level08.pass è leggibile solo a livello superiore.
-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
Il codice del programma per level08.c è riportato di seguito.
#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);
}