← Todas las guías
ExplotaciónChecklist de solo lecturaIntermedio34 min

He conseguido una shell: ¿y ahora qué?

Un checklist inmediato para orientarte tras un acceso autorizado: confirma identidad, hostname, sistema operativo, interfaces, rutas, usuarios, procesos, servicios y metadatos de archivos sin ampliar el impacto.

1. El orden importa: contexto antes que profundidad

Este checklist está pensado para los primeros quince minutos después de obtener una shell. Su objetivo no es escalar privilegios ni moverse a otro sistema, sino responder de forma reproducible: quién soy, dónde estoy, qué red ve el host, qué actividad sostiene su funcióny qué rutas merecen una revisión posterior autorizada. Ejecuta un bloque, interpreta su salida y anota el límite antes de continuar.

  • Confirmar activo, horario, cuenta permitida y contacto de emergencia
  • Registrar identidad efectiva, terminal o proceso de shell y hora con zona horaria
  • Identificar hostname, versión y arquitectura del sistema operativo
  • Inventariar interfaces, direcciones, DNS y rutas sin generar tráfico de reconocimiento
  • Observar usuarios, procesos, servicios y sockets; no detener ni modificar ninguno
  • Revisar solo metadatos de archivos dentro de rutas autorizadas
  • Conservar salida mínima, errores y conclusiones separando hecho de inferencia

2. Checklist: identidad, hostname y sistema operativo

Empieza por la identidad efectiva, no por el nombre que te hayan dado. En Windows, whoami /allmuestra usuario, grupos y privilegios del token actual; en Linux, id muestra UID, GID y grupos. La hora sirve para correlacionar tu actividad con registros defensivos. El proceso de la shell ayuda a explicar por qué una propiedad o comando puede no estar disponible.

Linux · □ identidad y sesión
idwhottyps -p $$ -o pid,ppid,user,lstart,comm,argsdate --iso-8601=seconds
Windows PowerShell · □ identidad y sesión
whoami /all$PIDGet-Process -Id $PID | Select-Object Id,ProcessName,StartTime,PathGet-Date -Format o

Comprueba ahora que el nombre del host pertenece al activo autorizado. Una versión de kernel no equivale siempre a la distribución; por eso Linux combina uname con /etc/os-release. En Windows,Get-ComputerInfo reúne producto, versión, build y arquitectura. Una ruta de proceso vacía o un campo omitido puede ser un límite de permisos o de compatibilidad, no una invitación a elevarlos.

Linux · □ hostname y SO
hostnameuname -acat /etc/os-release
Windows PowerShell · □ hostname y SO
hostnameGet-ComputerInfo | Select-Object CsName,WindowsProductName,WindowsVersion,OsBuildNumber,OsArchitecture

3. Checklist: interfaces, DNS y rutas

Estas órdenes leen la configuración local: no escanean subredes ni prueban conectividad con otros hosts. Relaciona cada dirección con su interfaz y busca la ruta por defecto. Una interfaz de contenedor, VPN o loopback no demuestra por sí sola que exista una red alcanzable desde fuera. DNS indica resolutores configurados; no confirma que respondan.

Linux · □ red local
ip -brief addressip route showcat /etc/resolv.conf
Windows PowerShell · □ red local
Get-NetIPConfigurationGet-NetRoute -AddressFamily IPv4 | Sort-Object RouteMetric | Select-Object DestinationPrefix,NextHop,InterfaceAlias,RouteMetricGet-DnsClientServerAddress | Select-Object InterfaceAlias,AddressFamily,ServerAddresses

4. Checklist: usuarios, procesos, servicios y escuchas

Separa cuentas configuradas, sesiones activas y procesos. No son la misma cosa. La lista de cuentas ayuda a entender el rol del host, mientras que las sesiones y procesos son una fotografía cambiante. En Linux,getent respeta las fuentes de identidad configuradas; en Windows, Get-LocalUser muestra cuentas locales y puede no estar disponible en PowerShell de 32 bits sobre un sistema de 64 bits.

Linux · □ usuarios y sesiones
whogetent passwd | awk -F: '$7 !~ /(nologin|false)$/ { print $1, $3, $6, $7 }'
Windows PowerShell · □ usuarios y sesiones
Get-CimInstance Win32_ComputerSystem | Select-Object UserNameGet-LocalUser | Select-Object Name,Enabled,LastLogon

Ordena procesos para reducir ruido, pero no interpretes consumo alto como actividad maliciosa. Después cruza servicios activos con sockets en escucha. Un puerto confirma una escucha local, no su exposición desde otra red. Algunos nombres de proceso o rutas solo son visibles con permisos superiores; registra esa ausencia.

Linux · □ procesos, servicios y escuchas
ps -eo user,pid,ppid,lstart,pcpu,pmem,comm --sort=-pcpu | head -n 25systemctl --type=service --state=running --no-pagerss -lntup
Windows PowerShell · □ procesos, servicios y escuchas
Get-Process | Sort-Object CPU -Descending | Select-Object -First 25 Name,Id,CPU,PathGet-Service | Where-Object Status -eq 'Running' | Sort-Object DisplayNameGet-NetTCPConnection -State Listen | Sort-Object LocalPort | Select-Object LocalAddress,LocalPort,OwningProcess

5. Checklist: qué significa «archivo interesante»

Interesante significa relevante para el rol técnico del activo: configuración de la aplicación, logs, directorios temporales, despliegues recientes o rutas autorizadas con permisos inesperados. Empieza por metadatos. No abras el contenido hasta que la necesidad y la autorización estén documentadas. Limita siempre la raíz, el sistema de archivos y la profundidad; una búsqueda desde / o C:\ añade ruido, carga y datos fuera del objetivo.

Linux · □ metadatos dentro de rutas autorizadas
find /opt /var/www -xdev -type f -mtime -7 -size -1M -printfind /tmp /var/tmp -xdev -type f -mtime -1 -size -10M -printfind /opt /var/www -xdev -type f -writable -printstat /ruta/autorizada/archivo
Windows PowerShell · □ metadatos dentro de una ruta autorizada
$Scope = 'C:\ruta\autorizada'Get-ChildItem -LiteralPath $Scope -File -Recurse -Depth 3 -ErrorAction Continue | Sort-Object LastWriteTime -Descending | Select-Object -First 50 FullName,Length,LastWriteTimeGet-Acl -LiteralPath 'C:\ruta\autorizada\archivo' | Format-List Owner,Access

Sí: metadatos y contexto

Ruta, propietario, permisos, tamaño, fechas y relación con el servicio o despliegue autorizado.

No: coleccionar por si acaso

Llaves privadas, tokens, hashes de contraseñas, buzones, historiales, perfiles o documentos personales.

Un error también es evidencia

Conserva «Permission denied» o «Access is denied». No lo ocultes ni cambies de identidad para evitarlo.

6. Guarda evidencia mínima sin ensuciar el objetivo

La opción preferida es capturar la transcripción desde la estación del analista. Si las reglas permiten crear archivos temporales en el objetivo, usa una carpeta dedicada, permisos restrictivos y solo las consultas necesarias. No incluyas el listado de archivos sensibles. Calcula el hash después de cerrar el archivo: un hash demuestra si cambió, no quién lo creó ni si su contenido es verdadero.

Linux · artefacto mínimo autorizado
umask 077mkdir -p /tmp/cubix-evidencia{ date --iso-8601=seconds; id; hostname; uname -a; ip -brief address; ip route show; } | tee /tmp/cubix-evidencia/contexto.txtsha256sum /tmp/cubix-evidencia/contexto.txt | tee /tmp/cubix-evidencia/contexto.sha256sha256sum --check /tmp/cubix-evidencia/contexto.sha256
Windows PowerShell · artefacto mínimo autorizado
$Evidence = Join-Path $env:TEMP 'cubix-evidencia'New-Item -ItemType Directory -Force -Path $Evidence | Out-NullGet-Date -Format o | Out-File (Join-Path $Evidence 'contexto.txt')whoami /all | Out-File (Join-Path $Evidence 'contexto.txt') -AppendGet-ComputerInfo | Select-Object CsName,WindowsProductName,WindowsVersion,OsBuildNumber,OsArchitecture | Out-File (Join-Path $Evidence 'contexto.txt') -AppendGet-FileHash (Join-Path $Evidence 'contexto.txt') -Algorithm SHA256 | Format-List | Out-File (Join-Path $Evidence 'contexto.sha256')

7. Interpreta, comunica y cierra la sesión

Convierte la salida en frases verificables: «observé una ruta por defecto mediante interfaz X» es un hecho; «el host puede alcanzar toda la red» es una hipótesis que requeriría una prueba adicional autorizada. Una ausencia también necesita contexto: un servicio puede usar otro gestor, un cmdlet puede faltar o la shell puede estar dentro de un contenedor.

  • El hostname y el activo autorizado coinciden; si no, detuve la actividad
  • He registrado usuario, grupos, hora, proceso de shell, SO y arquitectura
  • He asociado interfaces con direcciones y rutas sin conectar a nuevos destinos
  • He distinguido cuentas, sesiones, procesos, servicios y sockets
  • Solo he recogido metadatos de rutas explícitamente autorizadas
  • Los errores de permisos figuran como límites y no intenté elevar privilegios
  • La evidencia mínima tiene fecha, autor, ubicación, hash y acceso restringido
  • Cada conclusión separa observación, inferencia y siguiente validación autorizada

Glosario

Shell

Interfaz de texto que interpreta órdenes y las ejecuta con la identidad y el contexto de una sesión.

Identidad efectiva

Cuenta y grupos cuyos permisos aplica el sistema a las acciones del proceso actual.

Hostname

Nombre asignado a un equipo dentro de su sistema o red; debe contrastarse con el inventario autorizado.

Interfaz de red

Punto lógico o físico por el que un sistema envía y recibe tráfico, asociado a direcciones y estado.

Tabla de rutas

Reglas que indican por qué interfaz y siguiente salto debe salir el tráfico hacia cada destino.

Proceso

Instancia de un programa en ejecución, identificada normalmente por un PID.

Servicio

Proceso o unidad gestionada que presta una función de forma continuada o bajo demanda.

Socket en escucha

Extremo de red preparado para aceptar conexiones en una dirección, protocolo y puerto.

Metadato de archivo

Dato descriptivo como ruta, tamaño, propietario, permisos o fecha, distinto del contenido del archivo.

Evidencia mínima

Conjunto más pequeño de datos verificables que permite sostener una observación sin recopilar información innecesaria.

Ver más guías
He conseguido una shell: ¿y ahora qué? | Cubix Academia