Find Avanzado
El comando find es una de las herramientas más poderosas en Linux para búsqueda de archivos y directorios. Esta guía cubre desde uso básico hasta técnicas avanzadas para pentesting y análisis forense.
Sintaxis Básica
Section titled “Sintaxis Básica”find [ruta] [expresión]Estructura de expresiones
Section titled “Estructura de expresiones”- Tests:
-name,-type,-size,-perm, etc. - Actions:
-print,-exec,-delete, etc. - Operators:
-and,-or,-not
Búsqueda por Nombre
Section titled “Búsqueda por Nombre”Patrones básicos
Section titled “Patrones básicos”# Buscar por nombre exactofind /home -name "archivo.txt"
# Búsqueda case-insensitivefind /home -iname "ARCHIVO.txt"
# Patrones con wildcardsfind /home -name "*.log"find /home -name "config*"find /home -name "*.conf"
# Múltiples patronesfind /home \( -name "*.log" -o -name "*.txt" \)Expresiones regulares
Section titled “Expresiones regulares”# Usar regex (requiere -regex)find /var/log -regex ".*\.[0-9]+"
# Regex case-insensitivefind /var/log -iregex ".*error.*\.log"
# Buscar archivos que NO coincidanfind /home -not -name "*.tmp"Búsqueda por Tipo
Section titled “Búsqueda por Tipo”# Archivos regularesfind /home -type f
# Directoriosfind /home -type d
# Enlaces simbólicosfind /home -type l
# Dispositivos de bloquefind /dev -type b
# Dispositivos de caracteresfind /dev -type c
# Pipes nombrados (FIFO)find /tmp -type p
# Socketsfind /tmp -type sBúsqueda por Tamaño
Section titled “Búsqueda por Tamaño”# Archivos mayores a 100MBfind /home -size +100M
# Archivos menores a 1KBfind /home -size -1k
# Archivos de exactamente 512 bytesfind /home -size 512c
# Rangos de tamañofind /home -size +1M -size -10M
# Archivos vacíosfind /home -empty
# Directorios vacíosfind /home -type d -emptyUnidades de tamaño
Section titled “Unidades de tamaño”c: bytesk: kilobytesM: megabytesG: gigabytes
Búsqueda por Permisos
Section titled “Búsqueda por Permisos”# Permisos exactos (octal)find /home -perm 644
# Al menos estos permisosfind /home -perm -644
# Cualquiera de estos permisosfind /home -perm /644
# Archivos ejecutables por el propietariofind /home -perm -u+x
# Archivos world-writablefind /home -perm -002
# Archivos SUIDfind /home -perm -4000
# Archivos SGIDfind /home -perm -2000
# Sticky bitfind /home -perm -1000Búsqueda por Propietario
Section titled “Búsqueda por Propietario”# Por usuario específicofind /home -user username
# Por UIDfind /home -uid 1000
# Por grupofind /home -group groupname
# Por GIDfind /home -gid 100
# Archivos sin propietariofind /home -nouser
# Archivos sin grupofind /home -nogroup
# Combinacionesfind /home -user root -group wheelBúsqueda por Tiempo
Section titled “Búsqueda por Tiempo”Tiempo de acceso (atime)
Section titled “Tiempo de acceso (atime)”# Accedidos en los últimos 7 díasfind /home -atime -7
# Accedidos hace exactamente 7 díasfind /home -atime 7
# Accedidos hace más de 7 díasfind /home -atime +7
# Accedidos en los últimos 60 minutosfind /home -amin -60Tiempo de modificación (mtime)
Section titled “Tiempo de modificación (mtime)”# Modificados en los últimos 24 horasfind /home -mtime -1
# Modificados en los últimos 30 minutosfind /home -mmin -30
# Archivos más nuevos que otro archivofind /home -newer /etc/passwdTiempo de cambio de metadatos (ctime)
Section titled “Tiempo de cambio de metadatos (ctime)”# Metadatos cambiados en los últimos 7 díasfind /home -ctime -7
# Metadatos cambiados en los últimos 120 minutosfind /home -cmin -120Acciones con Archivos Encontrados
Section titled “Acciones con Archivos Encontrados”Ejecutar comandos
Section titled “Ejecutar comandos”# Ejecutar comando para cada archivofind /home -name "*.log" -exec cat {} \;
# Ejecutar comando con múltiples archivosfind /home -name "*.txt" -exec grep "pattern" {} +
# Confirmar antes de ejecutarfind /home -name "*.tmp" -ok rm {} \;
# Usar xargs para mejor rendimientofind /home -name "*.log" -print0 | xargs -0 grep "error"Formatear salida
Section titled “Formatear salida”# Formato personalizadofind /home -printf "%p %s %TY-%Tm-%Td\n"
# Solo mostrar nombres de archivofind /home -name "*.conf" -printf "%f\n"
# Mostrar permisos y tamañofind /home -printf "%M %s %p\n"Variables de formato printf
Section titled “Variables de formato printf”%p: ruta completa%f: nombre del archivo%s: tamaño en bytes%M: permisos en formato simbólico%u: nombre del propietario%g: nombre del grupo%T: tiempo (requiere especificador adicional)
Operadores Lógicos
Section titled “Operadores Lógicos”# AND (implícito)find /home -name "*.log" -size +1M
# AND explícitofind /home -name "*.log" -and -size +1M
# ORfind /home \( -name "*.log" -o -name "*.txt" \)
# NOTfind /home -not -name "*.tmp"find /home ! -name "*.tmp"
# Combinaciones complejasfind /home \( -name "*.log" -o -name "*.txt" \) -and -size +1kTécnicas Avanzadas
Section titled “Técnicas Avanzadas”Limitar profundidad
Section titled “Limitar profundidad”# Solo en el directorio actualfind /home -maxdepth 1 -name "*.txt"
# Mínimo 2 niveles de profundidadfind /home -mindepth 2 -name "*.conf"
# Entre 2 y 4 nivelesfind /home -mindepth 2 -maxdepth 4 -type dSeguir enlaces simbólicos
Section titled “Seguir enlaces simbólicos”# Seguir todos los enlacesfind -L /home -name "*.txt"
# No seguir enlaces (por defecto)find -P /home -name "*.txt"
# Seguir enlaces solo en línea de comandosfind -H /home -name "*.txt"Excluir directorios
Section titled “Excluir directorios”# Excluir directorio específicofind /home -path "*/node_modules" -prune -o -name "*.js" -print
# Excluir múltiples directoriosfind /home \( -path "*/node_modules" -o -path "*/.git" \) -prune -o -name "*.txt" -printEjemplos para Pentesting
Section titled “Ejemplos para Pentesting”Búsqueda de archivos sensibles
Section titled “Búsqueda de archivos sensibles”# Archivos de configuraciónfind /etc -name "*.conf" -o -name "*.cfg" -o -name "*.ini"
# Archivos de contraseñasfind / -name "*password*" -o -name "*passwd*" -o -name "shadow*" 2>/dev/null
# Claves SSHfind /home -name "id_rsa" -o -name "id_dsa" -o -name "*.pem" 2>/dev/null
# Archivos de backupfind / -name "*.bak" -o -name "*.backup" -o -name "*~" 2>/dev/null
# Archivos de logfind /var/log -name "*.log" -mtime -7Análisis de permisos peligrosos
Section titled “Análisis de permisos peligrosos”# Archivos SUIDfind / -perm -4000 -type f 2>/dev/null
# Archivos SGIDfind / -perm -2000 -type f 2>/dev/null
# Archivos world-writablefind / -perm -002 -type f 2>/dev/null
# Directorios world-writablefind / -perm -002 -type d 2>/dev/null
# Archivos sin propietariofind / -nouser -o -nogroup 2>/dev/nullBúsqueda de ejecutables
Section titled “Búsqueda de ejecutables”# Ejecutables en PATHecho $PATH | tr ':' '\n' | xargs -I {} find {} -type f -executable 2>/dev/null
# Scripts con shebang específicofind /home -type f -exec grep -l "^#!/bin/bash" {} \; 2>/dev/null
# Binarios ELFfind /home -type f -exec file {} \; | grep ELF
# Archivos con capabilitiesfind /usr/bin -type f -exec getcap {} \; 2>/dev/null | grep -v "="Análisis temporal
Section titled “Análisis temporal”# Archivos modificados recientemente (últimas 24h)find /home -mtime -1 -type f
# Archivos accedidos recientementefind /tmp -atime -1 -type f
# Archivos creados después de una fecha específicafind /var/log -newermt "2024-01-01"
# Archivos modificados en un rango de tiempofind /home -newermt "2024-01-01" ! -newermt "2024-01-31"Análisis Forense
Section titled “Análisis Forense”Recuperación de evidencia
Section titled “Recuperación de evidencia”# Buscar archivos eliminados recientemente (en /proc)find /proc -name "deleted" 2>/dev/null
# Archivos con extensiones específicasfind /home -iname "*.doc" -o -iname "*.pdf" -o -iname "*.xls"
# Archivos ocultosfind /home -name ".*" -type f
# Archivos con nombres sospechososfind /home -name "*tmp*" -o -name "*temp*" -o -name ".*"Análisis de metadatos
Section titled “Análisis de metadatos”# Archivos con timestamps anómalosfind /home -newermt "1970-01-01" ! -newermt "1990-01-01"
# Archivos muy grandesfind /home -size +100M -exec ls -lh {} \;
# Duplicados por tamañofind /home -type f -exec ls -l {} \; | sort -k5 -n | uniq -f4 -DScripts de Automatización
Section titled “Scripts de Automatización”Script de auditoría de seguridad
Section titled “Script de auditoría de seguridad”#!/bin/bashecho "=== AUDITORÍA DE SEGURIDAD ==="
echo "Archivos SUID:"find / -perm -4000 -type f 2>/dev/null
echo -e "\nArchivos world-writable:"find / -perm -002 -type f 2>/dev/null | head -20
echo -e "\nArchivos sin propietario:"find / -nouser -o -nogroup 2>/dev/null | head -10
echo -e "\nArchivos de configuración modificados recientemente:"find /etc -name "*.conf" -mtime -7 2>/dev/nullScript de búsqueda de credenciales
Section titled “Script de búsqueda de credenciales”#!/bin/bashTARGET_DIR=${1:-/home}
echo "Buscando credenciales en $TARGET_DIR..."
# Archivos con patrones de contraseñasfind "$TARGET_DIR" -type f -exec grep -l -i "password\|passwd\|pwd" {} \; 2>/dev/null
# Claves SSHfind "$TARGET_DIR" -name "id_*" -o -name "*.pem" -o -name "*.key" 2>/dev/null
# Archivos de configuración de bases de datosfind "$TARGET_DIR" -name "*.cnf" -o -name "my.cnf" -o -name "*.conf" 2>/dev/null | xargs grep -l -i "password" 2>/dev/nullOptimización y Rendimiento
Section titled “Optimización y Rendimiento”Mejorar velocidad
Section titled “Mejorar velocidad”# Usar -quit para parar en el primer resultadofind /home -name "target.txt" -quit
# Limitar búsqueda con -maxdepthfind /home -maxdepth 3 -name "*.log"
# Usar -prune para excluir directorios grandesfind /home -path "*/node_modules" -prune -o -name "*.js" -printManejo de errores
Section titled “Manejo de errores”# Suprimir errores de permisosfind /home -name "*.txt" 2>/dev/null
# Redirigir errores a archivofind /home -name "*.txt" 2>errors.log
# Separar salida y erroresfind /home -name "*.txt" >results.txt 2>errors.logCasos de Uso Específicos
Section titled “Casos de Uso Específicos”Limpieza del sistema
Section titled “Limpieza del sistema”# Archivos temporales antiguosfind /tmp -type f -atime +7 -delete
# Logs antiguosfind /var/log -name "*.log" -mtime +30 -exec gzip {} \;
# Archivos de core dumpfind /home -name "core.*" -size +10M -deleteBackup selectivo
Section titled “Backup selectivo”# Archivos modificados para backup incrementalfind /home -mtime -1 -type f -exec cp {} /backup/ \;
# Crear lista de archivos para backupfind /home -name "*.doc" -o -name "*.pdf" > backup_list.txtNota de Seguridad: El comando find es extremadamente poderoso. Siempre verifica los comandos antes de ejecutarlos, especialmente cuando uses
-deleteo-exec. En entornos de producción, prueba primero con