Sanitización de TTY por conexión remota:
A la hora de conectarnos a un equipo de manera remota es una práctica muy común en el hacking, ya sea por medio se ssh, reverse shell, bind shell, etc. Al momento de establecer la conexión remota nos damos cuenta que contamos con algunas limitaciones al momento de interactuar con nuestra consola, por nombrar algunas, en el caso de un ssh vemos que no nos es posible limpiar la pantalla ni detener procesos o mandarlos a segundo plano con los atajos de teclado tradicionales, y en caso de una reverse shell no podemos siquiera retroceder con las flechas de nuestro teclado. Por esta y otras razones en la siguente entrada de blog explicaré paso a paso algunas alternativas, como sanitizar una TTY en los casos de una conexión por ssh y con una shell obtenida por medio de Netcat (puede ser reverse o bind shell, pero para generalizar la llamaremos únicamente reverse shell), siguiendo el tutorial no solamente tendremos una TTY completamente interactiva sino que incluso estará ajustada a las proporciones de nuestra pantalla y tendrá colores descriptivos para archivos y carpetas tal como probablemente los tengamos en la consola de nuestra máquina.
Conexión por reverse shell:
- Muchas veces en hacking requerimos entablar una conexión con la máquina víctima y ganar una shell, para ello entablamos una conexión por Netcat poniéndonos en escucha por un puerto y recibiendo la shell de la otra máquina por ese puerto. El primer obstáculo que observamos es que no contamos con una bash, para esto ejecutamos el siguiente comando:
script /dev/null -c bash
En caso que el anterior comando no nos devuelva una bash, ejecutamos la siguiente alternativa haciendo uso de python:
python3 -c 'import pty;pty.spawn("/bin/bash")'
Ahora la interfaz es más familiar, pero siguen sin funcionar los atajos de las flechas y demás atajos de una consola linux, para ello ejecutamos los siguentes comandos:
^Z stty raw -echo; fg
El “^Z” se lee como ctrl Z, al ejecuta esto, la reverse shell pasa a segundo plano, ya en nuestra consola personal ponemos el segundo comando del campo anterior, lo siguiente va en el campo que se abre con el comando anterior:
reset xterm
Para asegurarnos que los comandos serán interpretados de la forma adecuada se asigna bash como shell ; en caso de que no estemos en una ( y que el sistema la tenga) hacemos lo siguiente:
export SHELL=bash
Ya en este punto podríamos colocar
export TERM=xterm
Y ya con esto tendríamos nuestra TTY interactiva, pero la idea es que quede lo mejor posible, en este caso queramos que tenga colores y se encuentre bien ajustado. Los comandos serían los siguientes:
export TERM=xterm-256color source /etc/skel/.bashrc
Si con estos comandos no vemos la TTY con colores una ligera alternativa al source (bastante mas difícil de recordar) sería:
export PS1="\[\e[32m\]\u@\h:\[\e[0m\]\w\$ "
Luego si queremos ajustar el tamaño, verificamos el tamaño de la TTY con la nuestra, en mi caso es 43 filas 179 columnas, pero para verificar el nuestro ejecutamos:
stty size
Verificamos y si queremos cambiar ponemos lo siguiente:
stty rows 43 columns 179
Como mencioné anteriormente, es en mi caso, al escribir el comando debemos ingresar las filas y columnas de nuestra pantalla. Con esto ya quedaría una terminal interactiva y bastante linda para trabajar de manera cómoda.
Alternativa con rlwrap:
En caso de querer una sanitización rápida, podemos hacer uso de la herramienta rlwrap (https://github.com/hanslub42/rlwrap) que básicamente nos ayuda a que funcionen todos los atajos de linux en la conexión. Básicamente nos “sanitiza” la TTY en ese aspecto. su uso se hace de la siguiente forma:
rlwrap nc -nlvp ${puerto en escucha}
Conexión por SSH:
- El proceso con ssh es bastante similar al de la reverse shell pero más fácil aún, cuando estemos dentro (en caso de estar con una bash) ejecutamos:
export TERM=xterm-256color source /etc/skel/.bashrc
O su alternativa de source:
export PS1="\[\e[32m\]\u@\h:\[\e[0m\]\w\$ "
Para ajustar el tamaño, verificamos las dimensiones de la TTY ssh con la de nosotros, en mi caso es 43 rows 179 columns, pero para verificar el nuestro ejecutamos:
stty size
Ahí verificamos y si queremos cambiar (voy a usar mi caso personal con segunda pantalla) ponemos:
stty rows 43 columns 179
Ahora veremos que nuestra tty está sanitizada como debe ser.
Espero que este pequeño tutorial haya sido de ayuda, pues cuando hacemos estas conexiones las primeras veces, nos percatamos de lo incómodo que es trabajar en una terminal así. Ya con esto, solo poniendo un par de comandos ya tenemos una terminal bien ajustada y lista para el trabajo.
AUTHOR=$(stat -c '%U' ./) > Authors::Autor(@s)
> Exit code: 1 █