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/
Capture 1

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

Capture 2

Testons une LFI

Essayons maintenant d’injecter un chemin vers un fichier système :

http://CENSORED:5000/page?page=../../../../etc/passwd
Capture 3

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 :

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 :

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 :

Ce n’est généralement pas difficile à deviner.

On peut donc fuzz /proc/ en testant différents PID et fichiers courants.

Capture 4 Capture 5

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