La faille include LFI (Avancé)

To the non-french speaker, note that you can translate the articles using the Google Trad widget situated at the bottom of all pages.


Dans un précédent article je vous avais montré comment on peut inclure des fichiers locaux si la fonction include() n’est pas sécurisée. Avec le temps j’ai découvert de nouvelles techniques qui, je pense, vous surprendront.
Dans cet article nous allons donc voir des techniques avancées pour exploiter une LFI.

Pour faciliter l’exploitation d’une LFI il est parfois utile d’accéder au fichier phpinfo.php qui donne en output l’ensemble des variables de configuration du serveur. Ce document vous dira d’office quels sont les vecteurs d’attaque possibles.

I/Le double encodage

La méthode du double encodage est  simple à comprendre. Lorsque vous tenterez d’exploiter une LFI, il vous arrivera parfois de devoir encoder votre payload afin que celui-ci passe les filtres du script. Cependant il arrivera que votre payload soit décoder une première fois et ensuite filtrer. Dans ce cas là votre payload sera inutilisable. Or si vous l’encodez deux fois eh bien vous verrez que le script exécutera le code sans problème.

Donc vous prenez votre caractère  « / », vous l’encodez une fois en hexadécimal « %2F », puis on encode le « % » ce qui nous donne : %252F. Donc si vous voulez procéder à une Dot Dot Slash attaque, votre payload ressemblera à ça : %252E%252E%252F.

Vous n’avez bien évidemment pas besoin d’encoder tout votre payload. Seul les caractères spéciaux devront l’être. Voici une liste des principaux caractères spéciaux ainsi que leur encodages en hexadécimale et leur double encodage.

<

%3C

%253C

>

%3E

%253E

« 

%22

%2522

%27

%2527

/

%2F

%252F

.

%2E

%252E

 =

%3D

%253D

%2D

%252D

:

%3A

%253A

II/Les Wrappers PHP

L’idée avec les wrappers c’est qu’on peut utiliser des protocoles via les URL’s qui sont gérés par des gestionnaires. Voici les différents wrappers existants :

file://

Gestionnaire de fichiers

http:// ou https://

Permet d’accéder à des ressources mises en ligne via la méthode GET

ftp:// ou ftps://

Permet la lecture et la création de fichiers via FTP

php://

Permet d’utiliser les flux PHP (voir plus bas)

zlib://

Flux de compression

data://

Flux de data (Voir RFI avancé)

glob://

Trouve des noms de fichiers correspondant à un masque donné

phar://

Accès aux archives PHP

ssh2://

Shell sécurisé

rar://

Archive Rar

ogg://

Flux audio

expect://

Flux d’interaction de processus (voir plus bas)

Parmi ces wrappers, plusieurs sont très utiles pour un pirate s’ils sont mal configurés. C’est d’ailleurs pour cela qu’ils sont généralement désactivés, car ils sont très dangereux.

expect://

Commençons par le plus intéressant, expect:// qui permet d’utiliser des commandes système. Oui oui, si ce wrapper est activé alors vous pourrez lancer toutes les commandes système que vous voulez. Vous pourrez donc vous balader sur le serveur ou détruire toutes les données…

http://monsitevulnerablelfi/script.php?page=expect://ls

Cette commande listera l’ensemble des éléments présents sur le répertoire courant.

php://input

Ce wrapper permet aussi d’envoyer des requêtes système sauf que cette fois ci il faudra envoyer la requête système via le post data (en utilisant la hackbar par exemple) :

input

php://filter

Ce wrapper permet entre autre de lire le contenu d’un fichier PHP avec des méthodes telles que read :

php://filter/read=convert.base64-encode/resource=votrefichier.php

Le résultat obtenu sera encodé en base 64 donc il faudra le décoder (encore avec la hackbar)

III/Manipulation de fichiers internes

Pour les attaques qui suivront, nous nous servirons des interactions entre les fichiers du serveur et le client afin d’exploiter une LFI. Tout ce qui suit ne sont que des connaissances théoriques.

/proc/self/environ

Si vous avez accès à /proc/self/environ alors tout ce qu’il vous reste à faire c’est de changer votre User Agent par du code PHP. Ensuite rendez vous sur /proc/self/environ via la LFI et votre code sera exécuté.

/proc/self/fd

Dans ce cas là il va falloir bruteforce le file descriptor afin de trouver le fichier access.log. En faisant une requête vers le serveur avec un referer qui contient du code PHP et en se rendant sur le fichier access.log on pourra faire exécuter notre code.

Si malgré tout vous n’arrivez pas à exploiter une variable mais vous pensez qu’elles LFIable (oui j’invente des mots) alors peut être que cet outil pourra le faire pour vous 😉


Pour le moment cet article est fini, je le mettrai bien évidemment à jour à chaque fois que je trouverai un nouveau vecteur d’attaque 😉

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l'aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s