SQLMap - Capítulo 6: Shell

Tiempo de lectura 4 minutos

En esta última entrega del breve tutorial de sqlmap vamos a ver algo muy interesante, cómo obtener una shell en el sistema victima a través de una inyección sql.

Pero primero repasemos que hemos aprendido hasta ahora: identificar parámetros vulnerables en el query string y en el POST, distintos niveles de inyección a través del User Agent y Host y por último vimos cómo obtener no sólo los datos de una tabla específica, sino también obtener todas las bases de datos a las que tengamos acceso. Todo esto parece maravilloso pero encontrar un sistema tan vulnerable en la vida real no es tan sencillo, pero cuando encontramos uno es sumamente gratificante. Desde mi experiencia personal, he encontrado varios sistemas vulnerables a ataques de inyección de sql, pero nunca he explotado la vulnerabilidad ni obtenido datos de la base de datos del sistema, eso es ilegal en la mayoría de los países que tienen legislación sobre protección de la información y datos personales. Lo ético a hacer si nos encontramos en esa situación es reportar dicha vulnerabilidad a los administradores del sistema para que la puedan corregir.

Dicho esto, manos a la obra, obtengamos una shell!

Como siempre directo al ejemplo

Tenemos 2 clases de shell

  1. SQL shell
  2. OS shell


Aunque no creo que sea necesario una explicación aquí va de todas maneras. Una shell de sql solo nos permitirá ejecutar comandos del motor de bases de datos, mientras que una shell del Sistema Operativo nos dará control parcial o total sobre el propio sistema. Esto último dependerá directamente del nivel de privilegios que tenga el usuario que ejecuta el motor de bases de datos.

Sql shell

sqlmap -u "http://victima.com/busqueda.php?param=FUZZ" --sql-query "SELECT 'id' from usuarios" 

Con el parámetro –sql-query sqlmap ejecutará el comando/query que le siga. En el ejemplo, al tratarse de un SELECT, nos devolverá el resultado de la consulta. Si se tratara de otro comando como UPDATE o DELETE sqlmap solo ejecutará la consulta y nos devolverá la cantidad de filas afectadas. De esta forma tendremos control en tiempo real de los datos contenidos en la base de datos.

OS shell

sqlmap -u "http://victima.com/busqueda.php?param=FUZZ" --os-shell

Con el comando –os-shell, sqlmap nos permite subir una web shell. Para esto tenemos que elegir el lenguaje del servidor web:

  • ASP
  • ASPX
  • JSP
  • PHP

Luego nos pedirá que le indiquemos un directorio con permisos de escritura en la víctima. Si no sabemos si hay uno, SQLMap hará una búsqueda de fuerza bruta para encontrar uno.

Acto seguido SQLMap subirá un uploader el cual nos permite subir manualmente nuestra shell (o cualquier otro archivo). Podremos usarlo para subir el payload que quisiéramos, por ejemplo creado con MSFVenom. Por otra parte, SQLMap dejará abierta una sesión remota para interactuar con el servidor, en otras palabras SQLMap dejará un backdoor en el servidor de la víctima.

Cabe destacar que lo fundamental en este ataque, además de los parámetros vulnerables, es que la víctima tenga un directorio desprotegido con permisos de escritura, ya sea con un usuario logueado o totalmente público. Pero si se reúnen todas las condiciones, tendremos acceso al servidor, solo nos faltaría elevar nuestros privilegios para conseguir root…

Con esto concluye la breve (aunque no tanto) introducción a SQLMap. Vimos como determinar en una aplicación web si un parámetro es vulnerable, identificar la base de datos y su esquema de tablas, dumpearlas y hasta tener una shell remota en la víctima. SQLMap tiene muchas más opciones, quedará a tu parecer investigar más a fondo cada una de ellas.

Capítulos

  1. Introducción
  2. Parámetros por Get
  3. Parámetros por Post
  4. Level
  5. Dump
  6. Shell
  7. Extra

Hasta la próxima y happy hacking.


© 2018. All rights reserved.

Powered by Hydejack v8.2.0