Shocker

Difficulty: Easy | OS: Linux


Walkthrough - Youtube Habemus Shell


  • Em breve.

HackTheBox Machine


Scanning


Services and Versions


Exploration


Port 80 -http


  • Ao acessarmos o servidor web no browser, vemos apenas uma imagem e um texto.

Fuzzing


  • Para encontrarmos diretórios e arquivos interessantes

  • Verificando a execução desse script pelo browser, podemos afirmar que ele está executando o comando de linux uptime sempre que fazemos um refresh na página, pois há mudança dos segundos.

  • Sabemos que é um servidor Apache que tem a pasta CGI-BIN, que é onde é armazenado os scripts CGI. (CGI = Common Gateway Inteface)

  • Há vulnerabilidades conhecidas em relação ao CGI, uma delas é a ShellShock (CVE-2014-6271), que afeta o Bash, ocorre devido a uma falha na forma como o bash processa as variáveis de ambiente, permitindo a execução de comandos arbitrários injetados através dessas variáveis.

  • Servidores Web que utilizam scripts CGI ficam vulneráveis pois utilizam o bash.

circle-info

Dividindo o Payload:


  1. ():

    • Isso define uma função no Bash. No caso de Shellshock, a parte () é usada para criar uma função fictícia que será passada como uma variável de ambiente.

  2. { :; }:

    • {} contém o corpo da função. O : é um comando nulo no Bash (não faz nada), e o ; encerra o comando dentro da função.

  3. ; (após o fechamento da função):

    • Aqui está o ponto crítico da exploração: o Bash continua interpretando comandos depois do fechamento da função, permitindo a execução de comandos arbitrários.

  4. echo; echo:

    • Esses comandos são usados como um "preenchimento" ou para testar se o sistema é vulnerável. Não têm impacto direto na exploração.

  5. /bin/bash -c 'cat /etc/passwd':

    • Este é o comando malicioso que será executado se o Bash for invocado. Ele irá ler o conteúdo do arquivo /etc/passwd do linux, onde ficam armazenados os usuários do sistema.

circle-info

Um pouco mais de explicação

  1. Cabeçalhos HTTP e variáveis de ambiente:

    • Servidores web que usam scripts CGI (Common Gateway Interface) convertem cabeçalhos HTTP em variáveis de ambiente para processamento.

    • Por exemplo, o cabeçalho User-Agent enviado na requisição HTTP pode ser transformado em uma variável de ambiente $HTTP_USER_AGENT.

  2. A lógica de exploração:

    • Se o script do servidor utiliza o Bash para processar variáveis de ambiente, o payload inserido no User-Agent pode ser executado quando o Bash processar a variável $HTTP_USER_AGENT.

  3. Muitos scripts CGI (especialmente mais antigos) usam o Bash como interpretador para processar variáveis de ambiente ou executar comandos.

  4. Se o script user.sharrow-up-right CGI invocar o Bash, ele inadvertidamente processará o payload injetado nas variáveis de ambiente.

circle-check

Initial Access


  • Assim conseguimos ler a nossa primeira flag.

Privilege Escalation


  • Uma das primeiras coisas que costumo enumerar para escalação de privilégio em Linux, é verificar as permissões que o usuário tem.

  • Nesse caso o usuário tem a permissão de executar o binário perl com o contexto de root, e sem precisar de uma senha.

  • Podemos usar o Gtfobins para nos ajudar a explorar esse binário para obtermos um shell.

  • Porém, lembre-se que tem que chamar exatamente como está no sudoers ou seja, com o caminho absoluto /usr/bin/perl

  • -e : serve no perl para executar comandos one-liner.

  • exec : serve para executar um programa especificado na linha de comando e substitui o processo atual por esse programa.

  • E conseguimos obter a nossa última flag.

Last updated