<aside> đźš©
Questo livello richiede di leggere il file token, ma il codice limita i file che possono essere letti. Trova un modo per bypassarlo :)
</aside>
Gli obiettivi della sfida sono:
/bin/getflag
come utente flag04L’utente può accedere alla directory /home/flag04
che contiene file di configurazione di bash, un eseguibile /home/flag04/flag04
e un file token
Digitando ls -la /home/flag04/flag04
otteniamo -rwsr-x--- 1 flag04 level04
→ il file flag04 è di proprietà di flag04, è leggibile ed eseguibile dagli utenti del gruppo level04 ed è SETUID
Digitando ls -la /home/flag04/token
otteniamo -rw------- 1 flag04 flag04
→ il file token è di proprietà di flag04 ed è leggibile e scrivibile solo da lui
int main (int argc, char **argv, char **envp)
{
char buf[1024];
int fd, rc;
if(argc == 1){
printf("%s [file to read]\\n", argv[0]);
exit(EXIT_FAILURE);
}
if(strstr(argv[1], "token") != NULL) {
printf("You may not access '%s' \\n", argv[1]);
exit(EXIT_FAILURE);
}
strstr
Si ha un messaggio di errore ogniqualvolta l’argomento passato a flag04 contiene token come sottostringa
fd = open(argv[1], O_RDONLY);
if(fd == -1) {
err(EXIT_FAILURE, "Unable to open %s", argv[1];
}
rc = read(fd, buf, sizeof(buf));
if(rc == -1) {
err(EXIT_FAILURE, "Unable to read fd %d", fd);
}
write (1, buf, rc);
}
open
Può aprire diversi tipi di file tra cui i link simbolici (symlink o softlink), cioè file che puntano ad altri file