Comunidad de diseño web y desarrollo en internet online

Cómo funciona SQL Injection, seguro eres vulnerable

Las vulnerabilidades más comunes en aplicaciones web según la OWASP (Open Web Application Security Project) son las de tipo inyección, a través de estas un usuario malintencionado puede enviar comandos o consultas con el fin de obtener datos o realizar ciertas acciones.

SQL Injection es una vulnerabilidad que permite a un atacante realizar consultas a una base de datos, se vale de un incorrecto filtrado de la información que se pasa a través de los campos y/o variables que usa un sitio web, es por lo general usada para extraer credenciales y realizar accesos ilegítimos, práctica un tanto neófita, ya que un fallo de este tipo puede llegar a permitir ejecución de comandos en el servidor, subida y lectura de archivos, o peor aún, la alteración total de los datos almacenados.

Una vulnerabilidad de tipo SQL Injection puede ser explotada tanto a través del método GET como del método POST. La práctica más común es hacerlo a través del primero, sin embargo hacerlo a través del método POST puede llegar a devolver los mismos resultados. En el mundo de la seguridad informática quienes descubren o investigan vulnerabilidades suelen hacer scripts que automatizan la explotación de las mismas, para el caso de SQL Injection las más comunes son:

  • Sqlmap: Tal vez la más famosa, desarrollada en python por Bernardo Damele y Miroslav Stampar.
  • Havij: Desarrollada por la empresa ITSecTeam.
  • SqlNinja: Desarrollada en Perl, usada para explotar aplicaciones web que usan como back-end a Microsoft Sql Server.


Cómo es un ataque a una aplicación web vulnerable


Vamos a realizar un ataque a una aplicación web vulnerable, la forma más común de encontrar errores es a través del uso de una comilla (caracter de escape) en un input, para este caso una variable que se envía por GET:



Al probar poner la comilla junto al parámetro que se está enviando a la base de datos y ejecutarse la consulta deforme tenemos como resultado un error de sintaxis SQL, lo que nos está indicando la no validación de la sentencia y por tanto la vulnerabilidad.



Para explotarla usaremos Sqlmap ya que el proceso manual puede llegar a convertirse en algo tedioso y en ocasiones muy prolongado. Para usar esta herramienta debemos tener instalado Python, en nuestro caso estamos trabajando sobre Bugtraq 2, una distribución de seguridad informática que tiene instalado por defecto lo que necesitamos.

Lo primero que haremos es pedirle a sqlmap que nos revele qué bases de datos la aplicación web está usando a través del comando --dbs, no sin antes indicarle a través de -u la url con el parámetro vulnerable:

Código :

python sqlmap.py -u "http://192.168.1.37/cat.php?id=1" --dbs




Una vez tenemos la base de datos necesitamos saber qué tablas tiene:

Código :

python sqlmap.py -u "http://192.168.1.37/cat.php?id=1" -D photoblog --tables




Y en el árbol descendente lo siguiente son las columnas:

Código :

python sqlmap.py -u "http://192.168.1.37/cat.php?id=1" -D photoblog -T users --columns




Y la línea que nos dará las credenciales de los "users" registrados:

Código :

python sqlmap.py -u "http://192.168.1.37/cat.php?id=1" -D photoblog -T users -C login,password --dump


Sqlmap detecta que al hacer el dump las "password" están encriptadas en MD5 por lo que propone descifrar, aceptamos que lo haga y voila!



Accedemos a la sección "admin" de nuestra aplicación y nos encontramos un upload de imágenes, probamos subiendo una shell PHP que nos pueda dar acceso al servidor y permita ejecutar comandos, listar directorios y archivos e incluso hacer escalaciones de privilegios o ataques Symlink.



Hay una filtración por extensión, así que la engañamos renombrando al archivo con una extensión como ".php1".



Se ha bypasseado el filtro, ahora solo resta ir al index del sitio, buscar el link de la shell en el código y acceder:



Y pwned!, con tan solo explorar las opciones nos daremos cuenta de lo que podemos hacer en el servidor:

¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.

Publica tu comentario

El autor de este artículo ha cerrado los comentarios. Si tienes preguntas o comentarios, puedes hacerlos en el foro

Entra al foro y participa en la discusión

o puedes...

¿Estás registrado en Cristalab y quieres
publicar tu URL y avatar?

¿No estás registrado aún pero quieres hacerlo antes de publicar tu comentario?

Registrate