Sea
Reconhecimento
Como tenho apenas o IP da máquina e nenhuma outra informação, comecei a varrer a aplicação em busca de serviços que estivessem sendo executados. Após um scan completo com o nmap, identifiquei que a máquina expõe as portas 22 (SSH) e 80 (HTTP), onde um Apache está sendo executado. Ambos os serviços estão utilizando versões recentes, então não procurei explorá-los.
Após abrir a aplicação no navegador, encontrei a seguinte página:
Navegando nos links exibidos, fui redirecionado ao domínio sea.htb
, então precisei adicionar esse domínio ao arquivo /etc/hosts
da minha máquina, o que pôde ser feito da seguinte maneira (sendo "{IP_DO_ALVO}" o endereço IP da máquina):
Continuei navegando pelas funcionalidades do site, e identifiquei uma vulnerabilidade de Server-Side Request Forgery na página de contato (após clicar em "How To Participate", obtive o link para essa página). Entretanto, no momento essa vulnerabilidade não me pareceu útil, então continuei explorando.
Varredura
Exploração
Seguindo as instruções para utilizar a dessa CVE, obtive um shell na máquina:
Navegando pela máquina, encontrei um arquivo de configuração do CMS que expõe um hash:
Perdi mais tempo tentando quebrar esse hash do que gostaria de admitir, pois esse é um arquivo JavaScript e alguns caracteres estão sendo escapados na string... ou seja, foi preciso remover todos os caracteres escapados (prefixados com uma \
), para poder crackear esse hash. Mas por fim, obtive o hash do usuário amay
, e fiz login com esse usuário por meio do SSH.
Pós-Exploração
Com isso, pude acessar por meio do navegador e a seguinte página é exibida:
Perceba que é possível selecionar um arquivo e exibir o conteúdo dele por meio dessa página. Se interceptarmos a requisição, é possível ver que o caminho do arquivo é passado por meio de um parâmetro log_file
. Tentei alterar o caminho do arquivo para um arquivo sensível do Linux:
E... foi possível acessar o arquivo. Isso significa que podemos ler arquivos arbitrariamente no sistema. Tentei escalar e injetar comandos por meio dessa parâmetro, e para minha surpresa o resultado do comando foi exibido na resposta:
Com isso, inseri a chave pública da minha máquina no arquivo /root/.ssh/authorized_keys
, o que possibilitou que minha máquina pudesse se conectar como usuário root via SSH sem precisar nem mesmo da senha:
Agora bastou acessar a máquina por meio do seguinte comando:
Listar o conteúdo da flag e inserir na plataforma.
Atualizado
Isto foi útil?