Level 04

<aside> 🚩

Il binario setuid in /home/flag10/flag10 caricherà qualsiasi file venga dato, purché soddisfi i requisiti imposti dalla chiamata di sistema access()

</aside>

Gli obiettivi della sfida sono:

Strategia

Vediamo il contenuto della cartella /home/flag10 con il comando ls -la

Il file token è di proprietà dell’utente flag10 ed è leggibile e scrivibile solo da lui, quindi l’attaccante non ha accesso in lettura

L’eseguibile flag10 è di proprietà di flag10, è eseguibile anche da level10 ed è SETUID

Analisi del sorgente

int main(int argc, char **argv){
	char *file;
	char *host;
	if(argc < 3) {
		printf("%s file host\\n\\tsends file to host if you have access to it\\n", argv[0]);
		exit(1);
	}
	
	file = argv[1];
	host = argv[2];
	if(access(argv[1], R_OK) == 0) {
		int fd;
		int ffd;
		int rc;
		struct sockaddr_in sin;
		char buffer[4096];
		printf("Connecting to %s:18211 .. ", host);
		…
	} else {
		printf("You don't have access to %s\\n", file);
	}

Funzione access()

Se il pathname è un link simbolico viene effettuato il controllo al file a cui punta

Il controllo viene effettuato sull’uid reale, non su quello effettivo