> For the complete documentation index, see [llms.txt](https://d4redevil.gitbook.io/d4redevil/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://d4redevil.gitbook.io/d4redevil/writeups/dockerlabs/medio/database.md).

# Database

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2FyJEU9x0cH4Tu70IebH9q%2Fimage.png?alt=media&amp;token=452ff1ee-3583-4c92-add8-46a2270232c3" alt=""><figcaption></figcaption></figure>

## Reconocimiento

Iniciamos como siempre, lanzando una traza ICMP a la máquina objetivo para comprobar que tengamos conectividad.

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2Ff3KhDVMPiEXVzGzDFpn5%2Fimage.png?alt=media&amp;token=b5046d97-8af7-45ff-99bb-b1d8a48b2a7b" alt=""><figcaption><p>Reconocimiento usando el comando ping</p></figcaption></figure>

Vemos que responde al envío de nuestro paquete, verificando de esta manera que tenemos conectividad. Por otra parte, confirmamos que estamos frente a una máquina Linux basandonos en el TTL (Time To Live) 64.

## Enumeración

### Enumeración de versión y servicio <a href="#enumeracion-de-version-y-servicio" id="enumeracion-de-version-y-servicio"></a>

Lanzamos una serie de script básicos de enumeración propios de `nmap`, para conocer la versión y servicio que esta corriendo bajo los puertos abiertos.

\
nmap -sS -p- --open --min-rate 5000 172.17.0.2 -n -Pn -oG scanPorts -vvv

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2FbuEorQSnmUgINrxBKlcq%2Fimage.png?alt=media&amp;token=48b6b5ab-11cc-4c09-946c-96cd98d07ad9" alt=""><figcaption><p>Descubrimiento de puertos abiertos</p></figcaption></figure>

### Enumeración de versión y servicio <a href="#enumeracion-de-version-y-servicio" id="enumeracion-de-version-y-servicio"></a>

Lanzamos una serie de script básicos de enumeración propios de `nmap`, para conocer la versión y servicio que esta corriendo bajo los puertos abiertos.

```bash
nmap -sCV -p22,80,139,445 172.17.0.2 -oN targeted -vvv
```

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2Ft7TXesfau12LaW05xWTp%2Fimage.png?alt=media&amp;token=52226346-1e1b-470d-8f52-6b1336581412" alt=""><figcaption><p>Descubrimiento de versión y servicio con nmap</p></figcaption></figure>

## Explotación

Enumeramos los recursos compartidos con la herramienta smbmap con el usuario `guest`.

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2FnJpMEafx8aFPBlWDDX4P%2Fimage.png?alt=media&amp;token=5111f9d1-f3de-4b35-8cbb-1102c40f29b8" alt=""><figcaption><p>Enuemeración de recursos compartidos</p></figcaption></figure>

Podemos observar que no tenemos acceso a ninguno de los recursos compartidos.

### Web

Si ingresamos a la web que esta corriendo bajo el puerto 80, nos encontramos con el siguiente panel de autenticación.

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2F19KLaPhYVNoCOvC9hJOV%2Fimage.png?alt=media&amp;token=089e0ffa-fec8-4d9d-be2e-f595aad2d82d" alt=""><figcaption><p>Login</p></figcaption></figure>

Probamos credenciales por defecto, pero nada.

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2FvLCgsGFFW5LqcckSlc9T%2Fimage.png?alt=media&amp;token=f4519567-0429-4811-b574-e7e8e516fec1" alt=""><figcaption><p>Login</p></figcaption></figure>

Pero sin embargo, si probamos con una simple inyección SQL tenemos exito:  `' OR 1=1-- -`

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2F3aIkiblAoNixmJorFv4P%2Fimage.png?alt=media&amp;token=544c2a1a-6d99-4782-90a9-4da6419c5e53" alt=""><figcaption><p>Login</p></figcaption></figure>

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2FGnP8YQhKjkeHpKoqoaPJ%2Fimage.png?alt=media&amp;token=f940d904-bb8d-4f4f-8a73-9fb0a0a098dc" alt=""><figcaption><p>Ganamos acceso como el usuario Dylan</p></figcaption></figure>

Logramos Ganar acceso como el usuario `Dylan`.

Aunque tengamos aceso al panel, podemos seguir enumerando la base de datos mediante la inyección SQL.

### Determinación de la cantidad de campos devueltos en la consulta.

En primer lugar, debemos conocer cuantos resultados (columnas) esta devolviendo la consulta SQL. Para ello, podemos utilzar la clausula de SQL, `ORDER BY`.

Probamos primer con un valor de 10, pero obtenemos el siguiente mensaje:

```sql
' ORDER BY 10-- -
```

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2FmDZyfU9nIzNJVSdrHD4m%2Fimage.png?alt=media&amp;token=05dfd6a6-2f7e-4079-bacf-def47145b3a0" alt=""><figcaption><p>Mensaje de error MySQL</p></figcaption></figure>

Probamos con un valor de 7 columnas, pero vemos que el error persiste.

```sql
' ORDER BY 7-- -
```

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2FdlZBQnwzpnp45uudNqhU%2Fimage.png?alt=media&amp;token=cadd28d6-c175-4794-9d1b-5a84c04129f8" alt=""><figcaption></figcaption></figure>

Continuamos probando, hasta descubrir que la cantidad de campos devuelta por la consulta es de 2, ya que el mensaje de error cambia indicando que las credenciales no son validas.

```sql
' ORDER BY 2-- -
```

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2FOIx5bdqk3f2zXuhfgXKV%2Fimage.png?alt=media&amp;token=bc910eb4-143c-4275-9cae-c69994539e31" alt=""><figcaption><p>Login</p></figcaption></figure>

### Obtenemos las bases de datos

Teniendo en cuenta cuantos campos son, toca conocer las base de datos disponibles. Para trabajar de forma más comoda, vamos a intereceptar la petición con Burp Suite y posteriormente enviarla al Repeater.

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2FG4zOjiF2iSeB6deEKH3K%2Fimage.png?alt=media&amp;token=0f403a06-aad5-40d8-9995-c5292f7c8108" alt=""><figcaption><p>Proxy</p></figcaption></figure>

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2FWKHvHdbUSZdIq1uZMy3C%2Fimage.png?alt=media&amp;token=0494f022-92a4-4cf3-a26b-f1850f973ddc" alt=""><figcaption><p>Repeater</p></figcaption></figure>

Para concer las base de datos, utilizaremos el siguiente payload.

```sql
' UNION SELECT 1, SLEEP(2)-- -
```
