<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:
/bin/getflag
come utente flag10Vediamo 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
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);
}
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