Principe:
Exploiter gdb pour accéder aux file descriptors d'un programme en cours de débug, et en lire le contenu (le flag)
Le challenge
Le challenge nous donne accès à une instance GDB à distance, qui permet d'accéder au flag
Le programme
On se connecte au serveur, et on arrive sur une instance gdb .
On demande les info files
Impossible d'y trouver un flag.txt , on va donc lancer le programme run
après avoir mis un break main pour stopper au début du programme
On avance instruction par instruction (si ) mais comme c'est long, on c continue,
et le programme segfault
Les file descriptors
Au vu de la description du challenge, je décide de recommencer de zéro, puis de chercher
dans les fd (file descriptors) ouverts du programme si un flag.txt s'y trouve
Mais un shell lsof -p 5262 (équivalent en gros à shell -ls /proc/PID/fd/ ) ne donne rien
Le bon moment
Sauf que le programme est actuellement stoppé (breakpoint) au début!
Peut-être que le fichier n'est pas encore ouvert, donc j'avance de ni +800 (800 instructions)
et je trouve un handler ouvert vers le fichier
Pourquoi 800? Au pif. J'ai essayé 500, rien, 1000, trop loin, 800… réussi!
Maintenant que le handler du fichier est ouvert, on peut le lire grâce au programme:
FCSC{da8ae129af8512620bc6c9a711392395fba426edc6713819c1baffe004024ff2}
Je ne sais plus si on pouvait accéder au flag directement via shell /bin/bash ,
mais il me semble que le fichier du flag n'était pas accessible de notre utilisateur
(uniquement de l'utilisateur sous lequel le programme "Password Manager" s'exécutait).
Cela pourrait toutefois être une autre façon de résoudre le challenge.
⇇ FCSC (French CyberSec CTF) 2022