find es una poderosa utilidad de línea de comandos en sistemas Unix/Linux que permite buscar archivos y directorios según múltiples criterios. Es considerada una de las herramientas más versátiles para enumeración de sistemas en ciberseguridad.
find es una herramienta de línea de comandos que busca recursivamente archivos en una jerarquía de directorios basándose en múltiples criterios como nombre, tipo, tamaño, permisos, fecha de modificación, propietario y mucho más.
Contextos de uso en ciberseguridad:
Enumeración de sistemas: Identificar archivos y directorios importantes
Búsqueda de vulnerabilidades: Localizar archivos con permisos incorrectos
Forensics: Encontrar archivos modificados en intervalos específicos
Post-explotación: Identificar información sensible en sistemas comprometidos
Auditorías de seguridad: Verificar configuraciones y permisos de archivos
graph TD
A[Compromiso inicial] --> B[Enumeración con find]
B --> C{Objetivo de búsqueda}
C -->|Escalada de privilegios| D[Búsqueda de binarios SUID]
C -->|Exfiltración de datos| E[Búsqueda de archivos confidenciales]
C -->|Persistencia| F[Búsqueda de ubicaciones para backdoors]
C -->|Forensics| G[Búsqueda de IOCs y archivos modificados]
🖥️ Sintaxis y opciones
Sintaxis básica
find [ruta] [expresión]
[ruta]: Directorio desde donde comenzar la búsqueda (por defecto: directorio actual)
[expresión]: Criterios de búsqueda (tipo, nombre, tamaño, etc.)
Comando básico
find /home -name "*.txt"
Busca todos los archivos .txt en el directorio /home y sus subdirectorios
Operadores principales
Operador
Descripción
-and o simplemente un espacio
Operador lógico AND (por defecto entre criterios)
-or
Operador lógico OR
-not o !
Negación lógica
\( ... \)
Agrupación de expresiones
🎯 Criterios de búsqueda
Criterios más utilizados en ciberseguridad
Estos son los criterios que más usarás en tus evaluaciones de seguridad
Por nombre y tipo
Criterio
Descripción
Ejemplo
-name "patrón"
Búsqueda por nombre (distingue mayúsculas/minúsculas)
find / -name "passwd"
-iname "patrón"
Búsqueda por nombre (no distingue mayúsculas/minúsculas)
find / -iname "*.conf"
-type X
Búsqueda por tipo (f=archivo, d=directorio, l=enlace, etc.)
find / -type f -name "*.php"
Por permisos y propiedad
Criterio
Descripción
Ejemplo
-perm modo
Búsqueda por permisos exactos
find / -perm 644
-perm -modo
Todos los permisos especificados están establecidos
find / -perm -4000 (SUID)
-perm /modo
Cualquiera de los permisos especificados está establecido
find / -perm /2000 (SGID)
-user nombre
Archivos propiedad de un usuario específico
find / -user root
-writable
Archivos escribibles por el usuario actual
find / -writable
Por tiempo y tamaño
Criterio
Descripción
Ejemplo
-mtime n
Modificado hace n días exactos
find / -mtime 1
-mtime +n
Modificado hace más de n días
find / -mtime +30
-mtime -n
Modificado hace menos de n días
find / -mtime -7
-mmin n
Modificado hace n minutos
find / -mmin -60
-size n[cwbkMG]
Búsqueda por tamaño
find / -size +10M
💻 Ejemplos prácticos
1. Buscar archivos con permisos SUID (útil para escalada de privilegios)
find / -perm -4000 -type f 2>/dev/null
Explicación
/: Busca en todo el sistema
-perm -4000: Archivos con bit SUID establecido
-type f: Solo archivos regulares (no directorios ni enlaces)
2>/dev/null: Redirige errores a /dev/null (oculta mensajes de “permiso denegado”)
Busca archivos con permiso de escritura para “otros” (o+w)
Excluye /proc, /sys y /dev para reducir falsos positivos
-ls muestra información detallada de cada archivo
🔐 Casos de uso en ciberseguridad
Escalada de privilegios
flowchart LR
A[Acceso inicial] --> B[Enumeración]
B --> C{Vectores potenciales}
C --> D[find / -perm -4000 -type f]
C --> E[find / -writable -type f]
C --> F[find / -perm -2 -type f]
D --> G[Binarios SUID]
E --> H[Archivos escribibles]
F --> I[Permisos incorrectos]
G --> J[Escalada exitosa]
H --> J
I --> J
Comandos útiles para escalada
# Buscar archivos de configuración de servicios que sean modificablesfind /etc/systemd -writable -type f 2>/dev/null# Buscar tareas cron que sean modificablesfind /etc/cron* -writable -type f 2>/dev/null# Buscar binarios con capabilitiesfind / -type f -exec getcap {} \; 2>/dev/null | grep -v "= "
Exfiltración de datos
# Buscar archivos con "password", "credential", "secret" en el nombrefind / -type f -name "*pass*" -o -name "*cred*" -o -name "*key*" -o -name "*secret*" 2>/dev/null# Buscar archivos SSH y de configuración de clientesfind / -name "id_rsa*" -o -name "*.pem" -o -name "*.ppk" 2>/dev/null# Buscar bases de datosfind / -name "*.db" -o -name "*.sqlite" -o -name "*.sqlite3" 2>/dev/null
Análisis forense
# Buscar archivos modificados en las últimas 24 horasfind / -type f -mtime -1 2>/dev/null# Buscar archivos creados después de una fecha específicafind / -type f -newermt "2023-01-01" 2>/dev/null# Buscar archivos ejecutables no estándar en directorios del sistemafind /bin /sbin /usr/bin /usr/sbin -type f -not -name "*.sh" -not -name "*.pl" -perm -u+x -exec file {} \; | grep -v "ELF"
💡 Tips y optimización
Mejores prácticas
Usa siempre 2>/dev/null para eliminar errores no deseados
Combina criterios para búsquedas más precisas
Usa -prune para excluir directorios y mejorar rendimiento
Para búsquedas lentas, considera usar -xdev para limitar a un sistema de archivos
Optimización de rendimiento
# Versión lentafind / -name "*.log"# Versión optimizadafind / -name "*.log" -type f -not -path "/proc/*" -not -path "/sys/*" -not -path "/dev/*" -not -path "/run/*" 2>/dev/null