StreamIO es una máquina mediana que cubre la enumeración de subdominios que conduce a una inyección SQL para recuperar las credenciales de usuario almacenadas, que se descifran para obtener acceso a un panel de administración. El panel de administración es vulnerable a LFI, lo que nos permite recuperar el código fuente de las páginas de administración y nos lleva a identificar una vulnerabilidad de inclusión remota de archivos, cuyo abuso nos permite acceder al sistema. Después del shell inicial, aprovechamos la utilidad de línea de comandos SQLCMD para enumerar bases de datos y obtener más credenciales utilizadas en el movimiento lateral y encontrar bases de datos guardadas del navegador, que se decodifican para exponer nuevas credenciales. Usando las nuevas credenciales dentro de BloodHound descubrimos que el usuario tiene la capacidad de agregarse a un grupo específico en el que puede leer secretos LDAP. Sin acceso directo a la cuenta, utilizamos PowerShell para abusar de esta función y agregarnos al grupo "Core Staff", luego accedemos a LDAP para revelar la contraseña LAPS del administrador.
Enumeración
Iniciamos con la enumeración de los puertos abiertos de la maquina victima.
❯ nmap -p- --open --min-rate 5000 -vvv -Pn -n 10.10.11.158 -oG allportsScan
PORT STATE SERVICE REASON
53/tcp open domain syn-ack
80/tcp open http syn-ack
88/tcp open kerberos-sec syn-ack
135/tcp open msrpc syn-ack
139/tcp open netbios-ssn syn-ack
389/tcp open ldap syn-ack
443/tcp open https syn-ack
445/tcp open microsoft-ds syn-ack
464/tcp open kpasswd5 syn-ack
593/tcp open http-rpc-epmap syn-ack
636/tcp open ldapssl syn-ack
3268/tcp open globalcatLDAP syn-ack
3269/tcp open globalcatLDAPssl syn-ack
5985/tcp open wsman syn-ack
9389/tcp open adws syn-ack
49667/tcp open unknown syn-ack
49673/tcp open unknown syn-ack
49674/tcp open unknown syn-ack
49742/tcp open unknown syn-ack
Luego de obtener los puertos, enumeraremos los servicio y las versiones de los puertos abiertos que encontramos.
❯ nmap -p53,80,88,135,139,389,443,445,464,593,636,3268,3269,5985,9389,49667,49673,49674,49742 -sC -sV -Pn -vvv 10.10.11.158 -oN servicesScan
PORT STATE SERVICE REASON VERSION
53/tcp open domain syn-ack Simple DNS Plus
80/tcp open http syn-ack Microsoft IIS httpd 10.0
|_http-server-header: Microsoft-IIS/10.0
| http-methods:
| Supported Methods: OPTIONS TRACE GET HEAD POST
|_ Potentially risky methods: TRACE
|_http-title: IIS Windows Server
88/tcp open kerberos-sec syn-ack Microsoft Windows Kerberos (server time: 2024-03-23 13:47:15Z)
135/tcp open msrpc syn-ack Microsoft Windows RPC
139/tcp open netbios-ssn syn-ack Microsoft Windows netbios-ssn
389/tcp open ldap syn-ack Microsoft Windows Active Directory LDAP (Domain: streamIO.htb0., Site: Default-First-Site-Name)
443/tcp open ssl/http syn-ack Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
| ssl-cert: Subject: commonName=streamIO/countryName=EU
| Subject Alternative Name: DNS:streamIO.htb, DNS:watch.streamIO.htb
| Issuer: commonName=streamIO/countryName=EU
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2022-02-22T07:03:28
| Not valid after: 2022-03-24T07:03:28
| MD5: b99a:2c8d:a0b8:b10a:eefa:be20:4abd:ecaf
| SHA-1: 6c6a:3f5c:7536:61d5:2da6:0e66:75c0:56ce:56e4:656d
| -----BEGIN CERTIFICATE-----
| MIIDYjCCAkqgAwIBAgIUbdDRZxR55nbfMxJzBHWVXcH83kQwDQYJKoZIhvcNAQEL
| BQAwIDELMAkGA1UEBhMCRVUxETAPBgNVBAMMCHN0cmVhbUlPMB4XDTIyMDIyMjA3
| MDMyOFoXDTIyMDMyNDA3MDMyOFowIDELMAkGA1UEBhMCRVUxETAPBgNVBAMMCHN0
| cmVhbUlPMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2QSO8noWDU+A
| MYuhSMrB2mA+V7W2gwMdTHxYK0ausnBHdfQ4yGgAs7SdyYKXf8fA502x4LvYwgmd
| 67QtQdYtsTSv63SlnEW3zjJyu/dRW0cwMfBCqyiLgAScrxb/6HOhpnOAzk0DdBWE
| 2vobsSSAh+cDHVSuSbEBLqJ0GEL4hcggHhQq6HLRmmrb0wGjL1WIwjQ8cCWcFzzw
| 5Xe3gEe+aHK245qZKrZtHuXelFe72/nbF8VFiukkaBMgoh6VfpM66nMzy+KeLfhP
| FkxBt6osGUHwSnocJknc7t+ySRVTACAMPjbbPGEl4hvNEcZpepep6jD6qgi4k7bL
| 82Nu2AeSIQIDAQABo4GTMIGQMB0GA1UdDgQWBBRf0ALWCgvVfRgijR2I0KY0uRjY
| djAfBgNVHSMEGDAWgBRf0ALWCgvVfRgijR2I0KY0uRjYdjAPBgNVHRMBAf8EBTAD
| AQH/MCsGA1UdEQQkMCKCDHN0cmVhbUlPLmh0YoISd2F0Y2guc3RyZWFtSU8uaHRi
| MBAGA1UdIAQJMAcwBQYDKgMEMA0GCSqGSIb3DQEBCwUAA4IBAQCCAFvDk/XXswL4
| cP6nH8MEkdEU7yvMOIPp+6kpgujJsb/Pj66v37w4f3us53dcoixgunFfRO/qAjtY
| PNWjebXttLHER+fet53Mu/U8bVQO5QD6ErSYUrzW/l3PNUFHIewpNg09gmkY4gXt
| oZzGN7kvjuKHm+lG0MunVzcJzJ3WcLHQUcwEWAdSGeAyKTfGNy882YTUiAC3p7HT
| 61PwCI+lO/OU52VlgnItRHH+yexBTLRB+Oa2UhB7GnntQOR1S5g497Cs3yAciST2
| JaKhcCnBY1cWqUSAm56QK3mz55BNPcOUHLhrFLjIaWRVx8Ro8QOCWcxkTfVcKcR+
| DSJTOJH8
|_-----END CERTIFICATE-----
| tls-alpn:
|_ http/1.1
|_ssl-date: 2024-03-23T13:48:48+00:00; +7h00m00s from scanner time.
445/tcp open microsoft-ds? syn-ack
464/tcp open kpasswd5? syn-ack
593/tcp open ncacn_http syn-ack Microsoft Windows RPC over HTTP 1.0
636/tcp open tcpwrapped syn-ack
3268/tcp open ldap syn-ack Microsoft Windows Active Directory LDAP (Domain: streamIO.htb0., Site: Default-First-Site-Name)
3269/tcp open tcpwrapped syn-ack
5985/tcp open http syn-ack Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
9389/tcp open mc-nmf syn-ack .NET Message Framing
49667/tcp open msrpc syn-ack Microsoft Windows RPC
49673/tcp open ncacn_http syn-ack Microsoft Windows RPC over HTTP 1.0
49674/tcp open msrpc syn-ack Microsoft Windows RPC
49742/tcp open msrpc syn-ack Microsoft Windows RPC
Service Info: Host: DC; OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
| p2p-conficker:
| Checking for Conficker.C or higher...
| Check 1 (port 18376/tcp): CLEAN (Timeout)
| Check 2 (port 40049/tcp): CLEAN (Timeout)
| Check 3 (port 25119/udp): CLEAN (Timeout)
| Check 4 (port 26128/udp): CLEAN (Timeout)
|_ 0/4 checks are positive: Host is CLEAN or ports are blocked
| smb2-security-mode:
| 3:1:1:
|_ Message signing enabled and required
| smb2-time:
| date: 2024-03-23T13:48:12
|_ start_date: N/A
|_clock-skew: mean: 6h59m59s, deviation: 0s, median: 6h59m58s
Luego de enumerar agregaremos el dominios que es streamio.htb al /etc/hosts y enumeraremos los directorios del sitio web del puerto 443
También podemos crackearlas con la herramienta de John The Riper.
❯ john --wordlist=/usr/share/wordlists/rockyou.txt credentials.txt --format=Raw-MD5
Teniendo las credenciales en texto plano, las usaremos para autenticarnos contra el panel de administración que anteriormente habíamos encontrado
❯ cat credentials_crack.txt
Clara : ef8f3d30a856cf166fb8215aca93e9ff:%$clara
Bruno : 2a4e2cf22dd8fcb45adcb91be1e22ae8:$monique$1991$
Barry : 54c88b2dbd7b1a84012fabc1a4c73415:$hadoW
Juliette : 6dcd87740abb64edfa36d170f0d5450d:$3xybitch
Lauren : 08344b85b329d7efd611b7a7743e8a09:##123a8j8w5123##
Victoria : b22abb47a02b52d5dfa27fb0b534f693:!5psycho8!
Michelle : b83439b16f844bd6ffe35c02fe21b3c0:!?Love?!123
Sabrina : f87d3c0d6c8fd686aacc6627f1f493a5:!!sabrina$
Thane : 3577c47eb1e12c8ba021611e1280753c:highschoolmusical
Lenord : ee0b8a0937abd60c2882eacb2f8dc49f:physics69i
admin : 665a50ac9eaa781e4f7f04199db97a11:paddpadd
yoshihide : b779ba15cedfd22a023c4d8bcf5f2332:66boysandgirls..
Admin panel
ingresando las credenciales de yoshihide logramos autenticarnos contra el sitio web, por lo que tenemos el siguiente panel.
En la parte del sitio web, vemos que tenemos un parámetro del cual podremos quizás explotarlo
Haciendo click en cada uno de los apartados como User management, Staff mannagement, movie management y leave a messege for admin en donde encontraremos algunos parámetros como movie=, staff=, user=.
Para encontrar o descubrir otros parámetros enumeraremos con ffuf
Encontramos otro parámetro que es debug el cual es para los desarrolladores
LFI - Local File Inclusion
Probando algunas vulnerabilidades con el parametro debug= encontramos que es vulnerable a un LFI y para leer los archivos .php usaremos wrappers de base64.
Para poder leer mas de los wrappers podemos leer el siguiente post:
Luego de obtener el contenido tenemos lo siguiente:
Analizando el archivo de master.php podemos ver que podemos incluir un archivo .php ajeno al servidor, por lo que iniciaremos un servidor en Python y crearemos un archivo .php y así verificar si se realiza una petición a nuestro servidor.
Enumernado las tablas encontramos con una que es users y lo que haremos sera ver el contenido y verificar si es igual a la anterior que nos encontramos en la base de datos streamio.
Podemos observar que las credenciales: JDgodd : JDg0dd1s@d0p3cr3@t0r son validas, pero no podemos ingresar porque no pertenecemos al grupo remote management
Usuario - JDgodd
Haciendo uso de las credenciales, enumeraremos el sistema con bloodHound