C:\>aula_ □ ×

FTP Anonymous Foothold

A aula começa em um serviço FTP aberto, passa por Cracking offline e termina na análise de um executável SUID que usa o PATH de forma insegura.

FTP

Como o serviço funciona e o que deve ser observado.

John

Como testar candidatos contra um hash local.

PATH

Como o Linux escolhe qual executável será chamado.

O laboratório junta três problemas comuns em máquinas Linux: um serviço de arquivos mal configurado, uma senha fraca exposta por meio de um hash e um executável privilegiado que chama outro programa sem usar o caminho completo.

A ideia da aula não é entregar a sequência do desafio. O objetivo é entender o comportamento de cada componente. Quando você encontra uma pista no Target, deve conseguir reconhecer o que ela significa e qual teste faz sentido em seguida.

1. Como o FTP funciona
C:\>ftp_ □ ×

Controle e dados usam conexões diferentes

Porta 21

Mantém a sessão de controle e recebe comandos.

Canal de dados

Transporta listagens e arquivos.

Modo passivo

O cliente abre a conexão de dados indicada pelo servidor.

FTP é um protocolo antigo e simples. O cliente abre uma conexão TCP com a porta 21 do servidor. Essa conexão é chamada de canal de controle. É nela que o cliente envia comandos como USER, PASS, LIST, CWD e RETR.

A listagem de diretórios e a transferência de arquivos não passam pela mesma conexão. O FTP abre um segundo canal, chamado canal de dados. É por isso que um login pode funcionar e, ainda assim, o comando ls falhar. Nesse caso, o problema costuma estar na negociação da conexão de dados, em NAT ou em regras de firewall.

Hoje, o modo passivo é o mais comum. O cliente pede uma porta ao servidor e abre a conexão até ela. Isso funciona melhor quando o cliente está atrás de um roteador ou firewall.

O FTP tradicional também não cifra usuário, senha ou conteúdo. Em uma rede sem proteção, esses dados podem ser observados em trânsito. Neste laboratório, o acesso ao Target ocorre dentro da VPN, mas a limitação do protocolo continua sendo importante.

comandos ftp e respostas_ □ ×
ftp TARGET_IP

ftp> status
ftp> pwd
ftp> ls -la
ftp> cd <diretorio>
ftp> binary
ftp> get <arquivo>
ftp> quit

O modo binary evita que o cliente trate o arquivo como texto e altere quebras de linha durante a transferência. Para arquivos desconhecidos, backups e Dumps, ele é a opção mais segura.

2. Anonymous Login e Information Disclosure
C:\>anonymous_ □ ×

Anonymous é uma conta pública

Entrada

O servidor aceita o usuário anonymous ou ftp.

Permissões

A conta pode ter leitura, escrita ou acesso restrito a uma pasta.

Risco

O conteúdo publicado pode revelar dados que nunca deveriam estar ali.

O Anonymous Login foi criado para distribuição pública de arquivos. Em muitos servidores, o usuário é anonymous e a senha pode ser vazia, qualquer texto ou um endereço de e-mail.

Ter esse recurso ativo não significa que o servidor está vulnerável. O problema está no que essa conta consegue ver e fazer.

Uma pasta pública pode conter documentos legítimos, mas também pode expor backups, arquivos de configuração, nomes de usuários, Keys, Dumps e cópias de arquivos de autenticação. Esse tipo de vazamento é chamado de Information Disclosure.

Durante a enumeração, separe as perguntas:

  1. O login foi aceito?
  2. Quais diretórios podem ser listados?
  3. Quais arquivos podem ser baixados?
  4. Existe permissão de upload, rename ou delete?
  5. O conteúdo encontrado ajuda a acessar outro serviço?

Não presuma que toda pasta pública permite escrita. Não presuma também que um servidor somente leitura é inofensivo. Um único backup pode ser suficiente para revelar uma credencial reutilizada em SSH, painel web ou outro Host.

Leitura

Permite coletar o conteúdo sem alterar o servidor.

Escrita

Pode permitir upload, sobrescrita ou criação de arquivos.

Contexto

O nome, o formato e o conteúdo do arquivo indicam seu possível uso.

3. Hashes de senha em Linux
C:\>hashes_ □ ×

O prefixo informa o algoritmo

$1$

MD5-Crypt.

$5$

SHA-256-Crypt.

$6$

SHA-512-Crypt.

Linux não precisa guardar a senha em texto claro. Em vez disso, armazena um resultado derivado dela. No arquivo /etc/shadow, o campo de senha costuma seguir este formato:

estrutura de um hash crypt_ □ ×
$identificador$salt$digest

O identificador aponta para o algoritmo. O salt é um valor incluído no cálculo para que duas contas com a mesma senha não produzam necessariamente o mesmo resultado. O digest é o valor usado para verificar candidatos.

Uma linha unshadowed reúne os dados de /etc/passwd e /etc/shadow em um formato que ferramentas de Cracking conseguem processar. Isso também preserva o nome do usuário e outros campos úteis para organizar os resultados.

O salt não impede Cracking. Ele apenas obriga a ferramenta a calcular cada candidato com o valor correto, em vez de consultar uma tabela pronta.

PrefixoFormatoLeitura prática
$1$MD5-CryptFormato antigo e relativamente rápido para testar.
$5$SHA-256-CryptExige mais trabalho por candidato.
$6$SHA-512-CryptFormato ainda comum em sistemas Linux.
4. Cracking com John the Ripper
C:\>john_ □ ×

O teste acontece no seu Host

Entrada

Arquivo com o hash ou a linha unshadowed.

Candidatos

Wordlist, regras ou geração incremental.

Resultado

John registra as senhas encontradas no pot file.

No Cracking offline, nenhuma tentativa é enviada ao Target. John lê o hash, gera um candidato, calcula o resultado usando o mesmo algoritmo e compara os dois valores.

Isso é diferente de tentar senhas diretamente em SSH. Um ataque online depende da rede, produz logs e pode sofrer bloqueio. O Cracking offline depende principalmente do algoritmo, do hardware e da qualidade dos candidatos.

Uma Wordlist funciona bem quando contém palavras próximas do padrão usado pela pessoa ou pela organização. rockyou.txt é uma base comum para laboratórios porque reúne senhas reais vazadas no passado. Ela é útil para testar senhas simples, mas não substitui análise de contexto.

John normalmente detecta o formato sozinho. Quando isso não acontece, use --format. Depois, --show exibe o que já foi recuperado.

john the ripper_ □ ×
# Teste com uma Wordlist
john --wordlist=/caminho/wordlist.txt hashes.txt

# Definição manual do formato, quando necessária
john --format=<formato> --wordlist=/caminho/wordlist.txt hashes.txt

# Exibir resultados
john --show hashes.txt

Uma senha encontrada ainda precisa ser validada. Ela pode pertencer a uma conta desativada, ter sido trocada ou não ser aceita pelo serviço que você está testando.

5. SUID
C:\>suid_ □ ×

O processo pode herdar o usuário do arquivo

Real UID

Usuário que iniciou o processo.

Effective UID

Usuário cujos privilégios estão sendo usados.

SUID root

O executável pode operar com Effective UID 0.

Quando um binário possui o bit SUID, ele pode executar com o Effective UID do proprietário do arquivo. Se o proprietário é root, o programa recebe privilégios que o usuário comum não possui.

Isso não significa que qualquer binário SUID gera uma Shell root. O programa precisa conter algum comportamento abusável. Por isso, executáveis customizados merecem atenção. Eles podem manipular arquivos temporários de forma insegura, confiar em variáveis de ambiente ou chamar outros comandos sem cuidado.

A enumeração inicial é simples:

enumeração suid_ □ ×
find / -perm -4000 -type f 2>/dev/null

ls -l /caminho/do/binario
file /caminho/do/binario
strings /caminho/do/binario

O strings pode revelar nomes de comandos embutidos no programa. Ele ajuda a levantar hipóteses, mas não mostra toda a lógica do binário. Quando disponível, strace ajuda a observar quais arquivos e processos são realmente acessados.

6. Como o PATH funciona
C:\>path_ □ ×

O primeiro executável encontrado vence

Sem barra

ps é procurado no PATH.

Com caminho

/usr/bin/ps aponta para um arquivo específico.

Ordem

/tmp:/usr/bin consulta /tmp primeiro.

O PATH é uma lista de diretórios separados por dois-pontos. A Shell e várias funções da libc usam essa lista quando recebem um nome de comando sem /.

Considere este valor:

exemplo de path_ □ ×
PATH=/usr/local/bin:/usr/bin:/bin

Quando alguém digita ps, o sistema procura nesta ordem:

  1. /usr/local/bin/ps
  2. /usr/bin/ps
  3. /bin/ps

A busca termina no primeiro arquivo executável encontrado.

Agora considere:

diretório controlável na frente_ □ ×
PATH=/tmp:/usr/local/bin:/usr/bin:/bin

Nesse caso, /tmp/ps será escolhido antes de /usr/bin/ps, caso o arquivo exista e tenha permissão de execução.

Essa diferença importa quando um programa privilegiado chama ps em vez de /usr/bin/ps. O autor do programa provavelmente pretendia executar a ferramenta do sistema, mas deixou a escolha nas mãos do ambiente.

Há três condições importantes para um Path Hijacking:

  1. o programa chama um comando sem caminho absoluto;
  2. o processo usa um PATH que pode ser influenciado pelo usuário;
  3. o usuário controla um diretório consultado antes do executável legítimo.

Um nome com /, como ./ps ou /usr/bin/ps, não passa pela busca normal do PATH.

Também é importante entender o bash -p. Em alguns contextos privilegiados, o Bash reduz privilégios por segurança. A opção -p pede que ele preserve o Effective UID recebido. Isso só funciona quando o processo já foi iniciado com o contexto adequado.

inspeção do path_ □ ×
echo "$PATH"
printf '%s
' "$PATH" | tr ':' '
'

command -v ps
type -a ps

export PATH="/tmp:$PATH"
7. Método de investigação
C:\>metodologia_ □ ×

Cada etapa precisa de uma evidência

FTP

Liste, baixe e leia o que foi publicado.

Hash

Identifique o formato antes de iniciar o Cracking.

Credencial

Teste apenas nos serviços que fazem sentido.

SUID

Confirme como o comando é resolvido antes de criar um Script.

Durante o laboratório, evite pular direto para um Payload.

No FTP, confirme primeiro o que a conta anonymous consegue acessar. Ao encontrar um arquivo interessante, faça uma cópia local e entenda seu formato. Se houver um hash, identifique o algoritmo e execute o Cracking no seu Host.

Depois do Foothold, enumere o sistema. Um executável SUID customizado é apenas um ponto de atenção. Você ainda precisa descobrir o que ele chama, qual ambiente recebe e se o comportamento pode ser controlado.

Essa sequência reduz tentativas aleatórias e facilita explicar por que cada comando foi usado.

8. Cheat Sheet
referência rápida_ □ ×
# FTP
ftp TARGET_IP
status
pwd
ls -la
cd <diretorio>
binary
get <arquivo>

# Identificadores comuns
$1$  MD5-Crypt
$5$  SHA-256-Crypt
$6$  SHA-512-Crypt

# John the Ripper
john --wordlist=<wordlist> <hashes>
john --format=<formato> --wordlist=<wordlist> <hashes>
john --show <hashes>

# SUID
find / -perm -4000 -type f 2>/dev/null

# PATH
echo "$PATH"
command -v <comando>
type -a <comando>
export PATH="/tmp:$PATH"

# Shell preservando privilégios, quando aplicável
/bin/bash -p
9. Laboratório
C:\>lab_ □ ×

FTP, Cracking e SUID

Serviço

Enumerar o FTP e entender o conteúdo publicado.

Credencial

Analisar um hash e testar candidatos offline.

Foothold

Usar a credencial no serviço adequado.

Privilégio

Investigar um executável SUID customizado.

Lab: FTP Anonymous Login
Nível: Intermediário
Categoria: Linux Infrastructure
Acesso: VPN WireGuard

Use o painel VPN no lado direito para baixar a configuração e revisar os passos de conexão. Depois que o túnel estiver ativo, inicie o Target no launcher.

C:\labs\infra-ftp-anon-01_ □ ×
laboratório prático

Ambiente isolado para prática

Inicie uma instância temporária ao final da aula para praticar o conteúdo com segurança.

aguardando login
Faça login para usar o laboratório.