Level 04

<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:

Strategia

L’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

Analisi del sorgente

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);
	}

Funzione strstr

Si ha un messaggio di errore ogniqualvolta l’argomento passato a flag04 contiene token come sottostringa

Analisi del sorgente

	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);
}

Funzione open

Può aprire diversi tipi di file tra cui i link simbolici (symlink o softlink), cioè file che puntano ad altri file