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
Comecei a escanear a aplicação web em busca de diretórios e arquivos. Após executar o feroxbuster
com a wordlist big do repositório SecLists, obtive os seguintes arquivos/diretórios:
A princípio, nada muito valioso. Depois de um tempo buscando mais informações sobre a aplicação, não encontrei mais nada que parecesse útil. Seguindo o OWASP , busquei tentar entender melhor que tecnologia compõe essa aplicação. Verifiquei cada um dos arquivos encontrados, e no arquivo LICENSE
o seguinte conteúdo é exibido:
Pesquisando pelo autor (turboblack), pude encontrar uma publicação no blog de um chamado WonderCMS. Essa informação foi valiosa, pois encontrei uma CVE referente a esse CMS.
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
Agora com o usuário amay
, fiz um breve reconhecimento da máquina e encontrei um serviço sendo executado internamente pelo usuário root
na porta 8080. Fiz port-forwarding desse serviço com SSH para acessar localmente na minha máquina com o seguinte comando:
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?