Shells

Tratamiento de la TTY interactiva

Una vez que tenemos una reverse shell, es vital configurar una TTY interactiva para trabajar de forma cómoda y segura. De esta manera, evitamos cerrar la conexión accidentalmente y ganamos la facilidad de desplazarnos con las flechas o utilizar el tab para autocompletar rutas. El proceso es muy sencillo: solo hay que ajustar la tty siguiendo estos pasos para obtener una sesión más fluida y robusta.


Desde la reverse shell obtenida, script /dev/null -c bash transforma la sesión en una TTY interactiva.

VICTIM
$ script /dev/null -c bash
Script started, file is /dev/null

A continuación, hacemos Ctrl+Z para suspender la Reverse Shell.

VICTIM
www-data@test:/$ ^Z
zsh: suspended  nc -nlvp 443

Desde la reverse shell, con stty raw -echo; fg recuperamos la sesión en primer plano y reset xterm restablece la terminal para una experiencia interactiva óptima.

ATTACKER
 stty raw -echo; fg
ATTACKER
[1]  + continued  nc -nlvp 443
                                reset xterm

Exportamos las variables para que la terminal y la shell funcionen correctamente:

  • export TERM=xterm corrige el valor por defecto de TERM (a veces aparece como "dump") y permite usar atajos de teclado.

  • export SHELL=bash fuerza a que la shell sea bash.

VICTIM
www-data@test:/$ export TERM=xterm
www-data@test:/$ export SHELL=bash

Desde nuestra máquina revisaremos las dimensiones de nuestra terminal para ajustarlas en la máquina víctima.

ATTACKER
❯ stty size

Desde la máquina configuraremos la terminal con los valores de nuestra terminal. En el caso anterior, como ejemplo nos devolvió 40 filas y 230 columnas, el comando sería el siguiente.

VICTIM
www-data@test:/$ stty rows 40 columns 230

Spawning Interactive Shells

Python

python -c 'import pty; pty.spawn("/bin/sh")'

Perl

perl —e 'exec "/bin/sh";'
perl: exec "/bin/sh";

El comando anterior debe ejecutarse desde un script.

Ruby

exec "/bin/sh"

El comando anterior debe ejecutarse desde un script.

Lua

os.execute('/bin/sh')

El comando anterior debe ejecutarse desde un script.

Awk

awk 'BEGIN {system("/bin/sh")}'

Find

find / -name <file> -exec /bin/awk 'BEGIN {system("/bin/sh")}' \;
find . -exec /bin/sh \; -quit

Vim

Vim to Shell

vim -c ':!/bin/sh'

Vim Escape

vim
:set shell=/bin/sh
:shell

Última actualización

¿Te fue útil?