Leaking Source Code Via Blind LFI
Bienvenue sur ce mini cours ! Aujourd’hui, je vais vous montrer une technique pour leaker du code source sans connaître le chemin exact du fichier.
Dans ce cas précis, nous sommes face à une application Flask.
L'application cible
Jetons un œil à l’URL du site :
http://CENSORED:5000/

On remarque la présence d’un paramètre ?page
qui charge une page, un comportement assez classique.

Testons une LFI
Essayons maintenant d’injecter un chemin vers un fichier système :
http://CENSORED:5000/page?page=../../../../etc/passwd

Good ! On a une LFI (LFI).
Et maintenant, comment accéder au code source ?
Sur Linux, il existe un dossier spécial appelé /proc
qui permet d’interagir avec les processus en cours d’exécution.
Il contient des sous-dossiers portant le nom du PID (Process ID) de chaque process. À l’intérieur, on peut accéder à des informations comme :
cwd
(Current Working Directory)exe
(exécutable)cmdline
etc.
Ce qui nous intéresse ici, c’est cwd
qui nous donne le répertoire courant du process Flask.
Chemin cible (format théorique)
/proc/<PID>/cwd/<fichier>
Mais deux problèmes se posent :
- On ne connaît pas le PID
- On ne connaît pas encore le nom du fichier
C’est là que notre outil ffuf entre en jeu.
Fuzzing du nom de fichier
Si l’application tourne avec Flask, le fichier principal s’appelle très souvent :
app.py
- ou
run.py
Ce n’est généralement pas difficile à deviner.
On peut donc fuzz /proc/
en testant différents PID et fichiers courants.


J'ai utilisé une range de 55 000 à 60 000 pour ce test. En conditions réelles, il faudra fuzz de 0 à 100 000. :)