Fawn Machine

Machine name: Fawn

Address: https://app.hackthebox.com/starting-point

Introdução

Às vezes, quando somos solicitados a enumerar os serviços de hosts específicos na rede do cliente, podemos nos deparar com serviços de transferência de arquivos que podem estar mal configurados. O objetivo deste exercício é familiarizar-se com o File Transfer Protocol (FTP), um protocolo nativo de todos os sistemas operacionais de hosts e utilizado há muito tempo para tarefas simples de transferência de arquivos, sejam elas automatizadas ou manuais. O FTP pode ser facilmente mal configurado se não for compreendido corretamente.

Há casos em que um funcionário da empresa cliente que estamos avaliando pode querer contornar verificações de arquivos ou regras de firewall para transferir um arquivo de si mesmo para seus colegas. Considerando os diversos mecanismos de controle e monitoramento do fluxo de dados em uma rede corporativa hoje, esse cenário se torna um caso substancial e viável que podemos encontrar na prática.

Ao mesmo tempo, o FTP pode ser usado para transferir arquivos de log de um dispositivo de rede para outro ou para um servidor de coleta de logs. Suponha que o engenheiro de rede responsável pela configuração se esqueça de proteger adequadamente o servidor FTP ou não dê a devida importância às informações contidas nos logs, decidindo deixar o serviço FTP intencionalmente sem segurança. Nesse caso, um atacante poderia explorar os logs e extrair todos os tipos de informações deles, que poderiam ser usadas posteriormente para mapear a rede, enumerar nomes de usuários, detectar serviços ativos e muito mais.

Vamos dar uma olhada no que é o FTP, conforme a definição da Wikipédia:

The File Transfer Protocol (FTP) is a standard communication protocol used to transfer computer files from a server to a client on a computer network. FTP is built on a client–server model architecture using separate control and data connections between the client and the server. FTP users may authenticate themselves with a clear-text sign-in protocol, generally in the form of a username and password. However, they can connect anonymously if the server is configured to allow it. For secure transmission that protects the username
and password and encrypts the content, FTP is often secured with SSL/TLS (FTPS) or replaced with SSH File Transfer Protocol (SFTP).

Nas primeiras linhas do trecho acima, vemos uma referência à arquitetura do modelo cliente-servidor. Isso diz respeito aos papéis que os hosts na rede desempenham durante o processo de transferência de dados entre eles. Os usuários podem fazer download e upload de arquivos do cliente (seu próprio host) para o servidor (um dispositivo de armazenamento centralizado de dados) ou vice-versa. Conceitualmente, o cliente é sempre o host que faz o download e upload de arquivos para o servidor, enquanto o servidor é sempre o host que armazena com segurança os dados sendo transferidos.

Os clientes também podem navegar pelos arquivos disponíveis no servidor ao utilizar o protocolo FTP. Do ponto de vista do terminal do usuário, essa ação parecerá como se estivesse navegando pelas pastas do sistema operacional local em busca dos arquivos necessários. Os serviços FTP também oferecem uma interface gráfica (GUI), semelhante aos programas do Windows OS, facilitando a navegação para iniciantes. Um exemplo de um serviço FTP com interface gráfica bem conhecido é o FileZilla. No entanto, vamos primeiro entender o que significa uma porta estar executando um serviço de forma aberta.

Uma porta que está executando um serviço ativo é um espaço reservado para o endereço IP do alvo receber solicitações e enviar respostas. Se tivéssemos apenas endereços IP ou nomes de host, os hosts poderiam executar apenas uma tarefa de cada vez. Isso significa que, se você quisesse navegar na web e ouvir música de um aplicativo no seu computador simultaneamente, não seria possível, pois o endereço IP seria usado para gerenciar apenas uma das tarefas, não ambas ao mesmo tempo. Com as portas, é possível ter um único endereço IP gerenciando múltiplos serviços, pois elas adicionam uma camada extra de distinção.

No caso mostrado abaixo, vemos o FTP ativo na porta 21. No entanto, vamos adicionar alguns serviços extras como SSH (Secure Shell Protocol) e HTTPD (Servidor Web) para explorar um exemplo mais típicos. Com esse tipo de configuração, um administrador de rede configurou um servidor web básico, permitindo que ele realize as seguintes tarefas, todas ao mesmo tempo, se necessário:

. Receber e enviar arquivos que podem ser usados para configurar o servidor web ou servir logs para uma fonte externa.
. Ser acessível para login remoto a partir de um host distante, caso mudanças de configuração sejam necessárias.
. Fornecer conteúdo web que possa ser acessado remotamente através do navegador de outro host.

É considerado não padrão o uso do FTP sem a camada de criptografia fornecida por protocolos como SSL/TLS (FTPS) ou tunelamento SSH (SFTP). O FTP, por si só, tem a capacidade de exigir credenciais antes de permitir o acesso aos arquivos armazenados. No entanto, a deficiência aqui é que o tráfego contendo esses arquivos pode ser interceptado através do que é conhecido como Ataque Man-in-the-Middle (MitM). O conteúdo dos arquivos podem ser lidos em texto claro (ou seja, em formato não criptografado e legível por humanos).

No entanto, se os administradores de rede optarem por envolver a conexão com o protocolo SSL/TLS ou fazer o túnel da conexão FTP através de SSH (como mostrado abaixo) para adicionar uma camada de criptografia que só os hosts de origem e destino podem descriptografar, isso impediria com sucesso a maioria dos ataques Man-in-the-Middle.

No entanto, a situação com a qual estamos lidando neste caso é muito mais simples. Vamos interagir apenas com o alvo que está executando um serviço FTP simples e mal configurado. Vamos prosseguir e analisar como seria esse serviço executando em um host interno.

Enumeração

Primeiramente, vamos verificar se nossa conexão VPN está estabelecida. Usar o protocolo ping pode nos ajudar com isso, pois é um método de baixo custo para alcançar o alvo e obter uma resposta, confirmando assim que nossa conexão está estabelecida e o alvo está acessível. “Baixo custo” significa que muito poucos dados são enviados ao alvo por padrão, permitindo que verifiquemos rapidamente o status da conexão sem precisar esperar uma varredura completa ser concluída. O protocolo ping pode ser invocado a partir do terminal usando o comando ping {target_IP}, onde {target_IP} é o endereço IP da sua instância da máquina Fawn, conforme exibido na página do Hack The Box.

Vale notar que isso pode não funcionar em ambientes corporativos de grande escala, pois os firewalls geralmente possuem regras para evitar o ping entre hosts, mesmo na mesma sub-rede (LAN), para prevenir ameaças internas e a descoberta de outros hosts e serviços.

Podemos cancelar o comando ping pressionando CTRL+C no teclado, caso contrário, ele continuará a rodar infinitamente. Com base na saída do comando, podemos ver que as respostas estão sendo recebidas do host de destino. Isso significa que o host está acessível através do túnel VPN que formamos. Agora podemos começar a escanear os serviços abertos no host.

Ao realizar o escaneamento com o comando que usamos anteriormente, podemos verificar que o serviço FTP está aberto e ativo na porta 21. No entanto, e se quisermos saber qual é a versão exata do serviço que está rodando nessa porta? Será que ao escaneá-lo com diferentes parâmetros conseguiríamos obter as informações necessárias?

No nosso caso, o parâmetro -sV serve para detecção de versão. Usar esse parâmetro fará com que o escaneamento demore mais, mas nos fornecerá mais informações sobre a versão do serviço em execução na porta previamente detectada. Isso significa que, de forma rápida, poderemos identificar se o alvo é vulnerável, devido ao uso de software desatualizado, ou se precisaremos investigar mais a fundo para encontrar nosso vetor de ataque.

Não vamos nos concentrar em explorar o serviço em si. Vamos dar pequenos passos em direção aos nossos objetivos, e o próximo passo envolverá simplesmente interagir com o serviço da forma como está, para aprender mais sobre como devemos abordar os alvos. No entanto, ter a versão do serviço sempre nos ajuda a obter mais informações sobre o que está sendo executado na porta escaneada.

Foothold

É hora de interagir com o alvo.

Para acessar o serviço FTP, usaremos o comando ftp em nosso próprio host. É uma boa prática fazer uma verificação rápida para garantir que o serviço ftp esteja atualizado e instalado corretamente. Executar o comando abaixo exibirá a mesma saída mostrada, caso o serviço ftp esteja instalado. Caso contrário, ele continuará com o processo de instalação.

O parâmetro -y no final do comando é utilizado para aceitar a instalação sem interromper o processo para perguntar se você deseja prosseguir.

sudo apt install ftp -y

Depois que a instalação for concluída, você pode executar o comando ftp -? para ver as opções e funcionalidades que o serviço oferece.

No trecho acima, podemos ver que podemos nos conectar ao host de destino usando o comando abaixo. Isso iniciará uma solicitação para autenticação no serviço FTP em execução no alvo, o que retornará um prompt de volta para o nosso host:

O prompt solicitará o nome de usuário com o qual desejamos fazer login. Aqui é onde a mágica acontece.

Uma configuração incorreta comum em serviços FTP permite que uma conta anônima acesse o serviço como qualquer outro usuário autenticado. O nome de usuário anonymous pode ser inserido quando o prompt aparecer, seguido de qualquer senha, pois o serviço ignorará a senha para essa conta específica.

Ao pressionar Enter após inserir a senha, podemos ver que conseguimos fazer login com sucesso. Nosso terminal é alterado para mostrar que agora podemos emitir comandos ftp.

Digitando o comando help, podemos visualizar os comandos disponíveis. Esse padrão é comum em todos os scripts e serviços aos quais você tem acesso. Digitar -h, –help ou help sempre exibirá uma lista de todos os comandos disponíveis para você como usuário, com descrições incluídas ocasionalmente.

Se você quiser aprender mais sobre um comando específico, pode usar um comando diferente: man {commandName}. No entanto, por agora, vamos voltar ao nosso alvo.

Alguns dos comandos listados aqui nos parecem familiares. Já sabemos como usar ls e cd. Vamos executar o primeiro comando e visualizar o conteúdo da pasta.

Como você pode notar a partir da saída, o serviço FTP também emite o status dos comandos que você está enviando ao host remoto. O significado das atualizações de status é o seguinte:

200 : PORT command successful. Consider using PASV.
150 : Here comes the directory listing.
226 : Directory send OK.

Agora, podemos prosseguir para baixar o flag.txt para o nosso host (máquina virtual). Para fazer isso, podemos usar o comando get, seguido pelo nome do arquivo que queremos baixar. No nosso caso, ficaria assim:

Isso iniciará o download do arquivo para o mesmo diretório em que você estava quando executou o comando ftp {machineIP}. Se sairmos do serviço FTP, veremos o mesmo arquivo em nosso computador agora.

Agora podemos pegar a flag e submetê-la na plataforma para conquistar a máquina!

Question 01: What does the 3-letter acronym FTP stand for?

File Transfer Protocol

Question 02: Which port does the FTP service listen on usually?

21

Question 03: FTP sends data in the clear, without any encryption. What acronym is used for a later protocol designed to provide similar functionality to FTP but securely, as an extension of the SSH protocol?

SFTP

Question 04: What is the command we can use to send an ICMP echo request to test our connection to the target?

ping

Question 05: From your scans, what version is FTP running on the target?

vsftpd 3.0.3

Question 06: From your scans, what OS type is running on the target?

Unix

Question 07: What is the command we need to run in order to display the ‘ftp’ client help menu?

ftp -h

Question 08: What is username that is used over FTP when you want to log in without having an account?

anonymous

Question 09: What is the response code we get for the FTP message ‘Login successful’?

200

Question 10: There are a couple of commands we can use to list the files and directories available on the FTP server. One is dir. What is the other that is a common way to list files on a Linux system.

Is

Question 11: What is the command used to download the file we found on the FTP server?

get

Question 12: Submit root flag

Primeiramente, precisamos descobrir quais portas estão abertas e o que está sendo executado em cada uma, usando a ferramenta nmap:

nmap -sV -T5 10.129.189.173 –stats-every=5s

Vemos que a porta 21 está executnado um serviço FTP. Então podemos nos conectar a esse serviço utilizando o comando abaixo, passando um usuário anônimo:

ftp anonymous@10.129.189.173

E inserindo uma senha anônima.

Assim que tiver acesso ao sistema, liste os arquivos que estão dentro do diretório atual:

Aqui já encontramos o arquivo que estamos procurando. Então vamos fazer o download dele através do comando get:

Ao sairmos desse serviço com o comando exit, exibimos o conteúdo do arquivo baixado, utilizando o comando cat:

035db21c881520061c53e0536e44f815

Rolar para cima