Introdução
A Fieldnote está preparando a Northline Print Fair. Os expositores entram para obter seu próprio kit de estande: horário de chegada, ponto de entrega e lista de materiais. Um primeiro teste do Hydra parece encontrar vários logins válidos. Alguns desses resultados são, na verdade, páginas de erro. Sua tarefa é distinguir a autenticação real de uma resposta enganosa e obter o kit completo do expositor atribuído.
Você precisa apenas saber digitar comandos básicos no terminal, reconhecer caminhos e alternar abas. O Hydra e o portal local estão preparados. Você aprenderá sobre os campos do formulário, as condições de correspondência e os cookies antes de usá-los. Workstation é o terminal; Exhibitor Portal é o site. São duas interfaces do mesmo contêiner de treinamento isolado, não dois hosts. Todas as contas e os dados de negócio são sintéticos. Teste somente o formulário de prática declarado e a conta atribuída com os candidatos fornecidos. Não altere o servidor, as contas nem os documentos.
A estimativa de 55 minutos inclui leitura e erros comuns; o tempo não foi medido com iniciantes. Você entregará um argumento de formulário reutilizável, um resultado original do Hydra e o kit de estande obtido com autenticação, sem precisar redigir um relatório.
Ver o que um login real abre
Nesta etapa, abra uma conta de demonstração que sabidamente funciona e relacione-a aos dados de seu próprio estande. Uma requisição HTTP bem-sucedida significa que o servidor enviou uma resposta; autenticação bem-sucedida significa que o servidor aceitou uma identidade. São fatos diferentes.
Abra a aba Exhibitor Portal. Selecione Start at the practice desk e depois Practice sign-in. Digite o ID de expositor preview e a senha Preview24, e selecione Sign in. O resultado informa Signed in as preview. Selecione Open your workspace. O estande é DEMO, e a observação de embalagem identifica o documento como material de prática. Esse é o fluxo normal do serviço; o kit de demonstração não é sua entrega final. Selecione Sign out e depois o link de navegação Practice desk.

O ID do expositor e o estande identificam o documento de demonstração; o botão de download, sozinho, não prova que este é o kit atribuído a você.
Alterne para Workstation. Os comandos deste laboratório começam em /home/labex/project/login-review. A interface entra nesse diretório automaticamente; pwd mostra o diretório atual para você conferir:
pwd
Espere ver /home/labex/project/login-review. Se estiver em outro lugar, cd muda de diretório:
cd /home/labex/project/login-review
O formulário de prática envia uma requisição POST para /practice/login. Um POST leva campos nomeados no corpo da requisição. Aqui, os nomes são username e password; & os separa. O curl envia uma requisição pelo terminal, independentemente do navegador. No próximo comando, --data fornece os campos, -s oculta o indicador de progresso, -o salva o corpo da resposta e -w mostra o status HTTP. As aspas simples mantêm os espaços, & e %{http_code} juntos para o curl, sem deixar o shell interpretá-los.
Envie uma senha intencionalmente incorreta:
curl -s -o wrong.html -w 'HTTP %{http_code}
' --data 'username=preview&password=Wrong24' http://127.0.0.1:8080/practice/login
A saída é HTTP 200. Isso significa que a aplicação devolveu uma página, não que a senha funcionou. O arquivo wrong.html contém essa página. O grep procura texto; sua opção -o mostra somente o trecho correspondente, dispensando a leitura da marcação HTML ao redor:
grep -o 'Incorrect password' wrong.html
Espere ver Incorrect password. O mesmo status HTTP pode acompanhar tanto um sucesso real quanto um login recusado. Nesta lição, um erro comum ao digitar a senha é recuperável: corrija o valor e envie novamente. Um erro de conexão significa que a requisição não chegou ao serviço; confira 127.0.0.1, a porta 8080 e o caminho declarado antes de interpretar qualquer resultado de login. Não reinicie a VM para corrigir um erro de digitação.
Reproduzir um resultado enganoso
Nesta etapa, execute uma regra de classificação deliberadamente defeituosa com quatro pequenos pares de prática. Esta é uma demonstração de um teste ruim, não uma auditoria confiável.
Permaneça em Workstation. O cat mostra um arquivo. A lista preparada contém pares completos de username:password, um por linha:
cat practice-pairs.txt
preview:Wrong24
retired:Wrong24
offline:Wrong24
preview:Preview24
retired é um exemplo sintético de conta indisponível. offline é um exemplo controlado de erro de serviço: o manipulador de prática retorna HTTP 503 sem criar uma sessão. Não se trata de uma queda de um serviço externo nem de um expositor real. O último par é o login de demonstração que sabidamente funciona. Mantenha esse conjunto pequeno e autorizado; não o expanda para combinações arbitrárias de usuários e senhas.
O módulo http-post-form do Hydra envia cada par a um formulário. Seu argumento tem três partes separadas por dois-pontos: o caminho POST, os campos e uma condição de resposta. ^USER^ e ^PASS^ são marcadores de substituição do Hydra. F= significa “tratar uma resposta que contenha este padrão como falha”. Qualquer outra resposta pode ser classificada como sucesso. Este comando reconhece intencionalmente apenas Incorrect password, deixando outros tipos de falha sem cobertura.
As opções são -I para ignorar um aviso antigo de restauração neste diretório de trabalho, -C para candidatos em pares, -s para a porta, -t 1 para um único processo de trabalho, -o para o nome do arquivo de resultados e -b json para saída JSON. As aspas mantêm o último argumento inteiro, mesmo com espaços e &.
hydra -I -C practice-pairs.txt -s 8080 -t 1 -o misleading.json -b json 127.0.0.1 http-post-form '/practice/login:username=^USER^&password=^PASS^:F=Incorrect password'
Para ler JSON sem escrever um programa, use o formatador json.tool incluído no Python. python3 -m executa um módulo instalado:
python3 -m json.tool misleading.json
Leia a lista results. O par de demonstração válido aparece, mas também pode aparecer um par de conta indisponível ou de erro de serviço. Um resultado encontrado é uma afirmação feita pela condição, não prova de um espaço de trabalho autenticado. O campo superior success: true descreve a execução do Hydra, não a validade de cada senha relatada. Não use esse arquivo enganoso como resultado final da auditoria.
Se o Hydra informar um erro de sintaxe ou conexão, compare o argumento completo entre aspas e a porta com o comando acima, corrija a digitação e repita este teste de prática limitado. Uma conexão malsucedida não demonstra uma senha válida nem um resultado negativo confiável.
Calibrar com respostas conhecidas
Nesta etapa, salve uma condição reutilizável que aceite o sucesso real e rejeite os três casos conhecidos sem sucesso. Permaneça em Workstation. Primeiro, examine as outras respostas usando o mesmo formato de requisição.
A requisição da conta indisponível retorna HTTP 200 intencionalmente:
curl -s -o retired.html -w 'HTTP %{http_code}
' --data 'username=retired&password=Wrong24' http://127.0.0.1:8080/practice/login
grep -o 'Sign-in unavailable' retired.html
A requisição de erro de serviço controlado retorna HTTP 503 intencionalmente. Não há sessão válida, embora a página não contenha Incorrect password:
curl -s -o offline.html -w 'HTTP %{http_code}
' --data 'username=offline&password=Wrong24' http://127.0.0.1:8080/practice/login
grep -o 'Service unavailable' offline.html
Agora obtenha a resposta positiva conhecida. Esta requisição curl tem sua própria sessão, separada da sessão do navegador:
curl -s -o preview.html --data 'username=preview&password=Preview24' http://127.0.0.1:8080/practice/login
grep -o 'Signed in as preview' preview.html
Signed in as identifica o resultado autenticado neste caso. Welcome também aparece em páginas de falha, portanto não distingue autenticação. S= do Hydra escolhe um padrão positivo: a resposta precisa contê-lo para contar como sucesso. Consulte a ajuda do módulo instalado com -U; ela explica o caminho, os campos e a sintaxe da condição:
hydra -U http-post-form
Salve o argumento completo de prática. cat > calibration.txt grava texto em um arquivo; > substitui o arquivo se ele já existir. Um here-document fornece várias linhas até a linha final EOF. As aspas em 'EOF' mantêm o conteúdo literal. Coloque o marcador final sozinho em uma linha, sem espaços antes dele:
cat > calibration.txt <<'EOF'
/practice/login:username=^USER^&password=^PASS^:S=Signed in as
EOF
Uma variável de shell armazena texto para reutilização neste terminal. $(cat calibration.txt) lê o arquivo; form= armazena o resultado sem espaços ao redor de =. Mais adiante, as aspas em "$form" preservam seus espaços em um único argumento. Essa variável pertence à sessão atual do terminal; após reconectar, repita a atribuição.
form=$(cat calibration.txt)
hydra -I -C practice-pairs.txt -s 8080 -t 1 -o calibration.json -b json 127.0.0.1 http-post-form "$form"
python3 -m json.tool calibration.json
Somente preview:Preview24 deve ser relatado. A senha incorreta, a conta indisponível e o HTTP 503 não representam autenticação. A calibração também precisa incluir o exemplo positivo conhecido: uma condição que rejeita tudo também está errada. Um padrão de falha suficientemente amplo pode equivaler a esse padrão positivo; você não precisa usar uma grafia específica de S=. O argumento salvo é testado separadamente com cada resposta conhecida, em vez de ser aceito apenas por conter uma palavra-chave.
Obter o kit do expositor atribuído
Nesta etapa, aplique o método calibrado ao expositor atribuído e, em seguida, autentique-se de forma independente para obter seu documento de negócio real.
Abra Exhibitor Portal, depois Exhibitor sign-in e View your review assignment. A conta atribuída é papertrail; seu caminho POST é /signin. Somente as três senhas de candidates.txt são permitidas. A conta de prática pertence a outro formulário. Alterne para Workstation e leia os candidatos:
cat candidates.txt
Salve um segundo argumento reutilizável com o caminho atribuído e os mesmos campos e condição:
cat > form.txt <<'EOF'
/signin:username=^USER^&password=^PASS^:S=Signed in as
EOF
form=$(cat form.txt)
Ao contrário de -C, -l papertrail fornece um nome de usuário fixo, e -P candidates.txt fornece suas senhas autorizadas. Execute a pequena auditoria atribuída e salve um novo resultado JSON original:
hydra -I -l papertrail -P candidates.txt -s 8080 -t 1 -o findings.json -b json 127.0.0.1 http-post-form "$form"
python3 -m json.tool findings.json
O único resultado autêntico identifica papertrail com a senha InkPaper7. Essa conclusão se aplica somente à conta declarada e ao conjunto de candidatos; não afirma que o site inteiro é seguro.
Alterne para Exhibitor Portal. Selecione Exhibitor sign-in, informe o par encontrado e selecione Sign in, depois Open your workspace. Confira papertrail, estande N-14, chegada 09:15 e North loading door. Selecione Download booth kit para realizar o download verdadeiro no navegador. Esse arquivo pertence ao local de downloads do navegador; ele não aparece automaticamente dentro do contêiner de treinamento.

Confira os campos de expositor e estande acima da observação de embalagem antes de usar o download.
Volte para Workstation para salvar a cópia exigida na VM. Um cookie é um identificador de sessão emitido pelo servidor. -c exhibitor.cookies salva os cookies recebidos por este login no terminal. Esse arquivo de cookies pertence ao curl; o navegador e o Hydra não o compartilham automaticamente. O corpo da resposta é salvo em signin.html:
curl -s -c exhibitor.cookies -o signin.html --data 'username=papertrail&password=InkPaper7' http://127.0.0.1:8080/signin
Leia o download autenticado com o mesmo arquivo de cookies. -b envia seus cookies. -f faz uma recusa HTTP retornar um status diferente de zero, em vez de salvar silenciosamente uma página de erro como kit:
curl -f -s -b exhibitor.cookies http://127.0.0.1:8080/kit.json -o booth-kit.json
Um 403 ou status de saída 22 do curl significa que este cliente não tem uma sessão aceita. Confira o usuário, a senha, o caminho do formulário e o nome do arquivo de cookies, repita o comando de login e depois o download. Um 404 significa que o caminho está errado. Esses erros são recuperáveis; não substitua o kit por uma cópia do arquivo de demonstração.
python3 -m json.tool booth-kit.json
Confira o expositor, o estande e a chegada com a página. O kit completo também inclui três expositores para gravuras, duas toalhas de mesa e a observação sobre capas protetoras numeradas para as gravuras. A existência do arquivo ou um nome de expositor correspondente, por si só, não prova que o documento inteiro está correto.
Por fim, abra Visitor guide em Exhibitor Portal. As informações públicas de chegada devem continuar disponíveis. Você alterou apenas seus próprios arquivos e sessões, preservando o serviço, as contas e os dados de negócio. As entregas finais são form.txt, findings.json e booth-kit.json no diretório de trabalho. As verificações observam fatos já existentes de login e download e testam o argumento salvo em um serviço temporário separado; elas não completam tarefas ausentes no portal real.
Resumo
Você comparou espaços de trabalho realmente autenticados com respostas de senha incorreta, conta indisponível e erro de serviço. Reproduziu um falso positivo do Hydra, calibrou uma condição de formulário reutilizável com exemplos positivos e negativos, confirmou a identidade atribuída e obteve seu kit completo usando uma sessão de cookies separada. HTTP 200, um indicador de execução bem-sucedida ou uma mensagem Welcome genérica não comprovam autenticação por si só.



