Shocker
Difficulty: Easy | OS: Linux
Last updated
Difficulty: Easy | OS: Linux
Last updated
Em breve.
Ao acessarmos o servidor web no browser, vemos apenas uma imagem e um texto.
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.
()
:
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.
{ :; }
:
{}
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.
;
(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.
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.
/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.
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
.
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
.
Muitos scripts CGI (especialmente mais antigos) usam o Bash como interpretador para processar variáveis de ambiente ou executar comandos.
O exploit público disponÃvel na internet para exploração dessa vulnerabilidade, está muito desatualizado, em python2 e com diversas coisas desnecessárias.
Então eu criei o meu próprio script para exploração dessa vulnerabilidade, dando a possibilidade de utilizar comandos ou receber diretamente uma shell.
Assim conseguimos ler a nossa primeira flag.
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.
Se o script CGI invocar o Bash, ele inadvertidamente processará o payload injetado nas variáveis de ambiente.