jueves, 28 de octubre de 2010

SQL injection en VICUS

Hola a todos... ya sé que estamos en parciales... y debería estar estudiando... no me critiquen por eso. Sucede que es en esos momentos cuando no debería que me pasan cosas que no puedo evitar.

¿Alguna vez visitaron el directorio de la universidad? ¿No? Bueno yo lo acabo de conocer. Es una pagina donde puedes buscar el numero de anexo de las diferentes oficinas de toda la universidad. La dirección es:

http://vicus.unmsm.edu.pe/

A mi me parece muy útil. Pero bien de lo que se trata este post es de una vulnerabilidad SQL injection en este sistema de búsqueda.

SQL injection es un tipo de vulnerabilidad que permite insertar instrucciones SQL en las consultas que hace una aplicación a la base de datos, modificando de esta manera las respuestas de la base de datos y/o el comportamiento de la aplicación.

La razón por la que se puede hacer esto es por que las aplicaciones concatenan parámetros que reciben del usuario con trozos de instrucciones SQL a fin de formar la sentencia completa sin validar que estos parámetros no contengan caracteres especiales que modifiquen la semántica de la orden SQL.

Bien al grano... si en el campo "Nombre" del buscador ponemos una comilla simple ( ' ) y damos clic a buscar nos tirara un error donde se puede leer:

Tipo de error:
Microsoft JET Database Engine (0x80040E14)
Error de sintaxis en la expresión de consulta '(anexo like '%') and (Nombre like ''%') order by Apellido'.
/resultado.asp, line 39

Hay un error de sintaxis por que sobra una comilla en (Nombre like ''%'). Lo que hace esta comparacion es buscar los registros donde el campo Nombre contenga (no necesariamente sea igual) el nombre que pasamos por parámetro. Ahora bien, si logramos generar una tautología con el nombre (que la condición sea siempre verdadera) podremos listar todos los registros de la tabla xD.

Para ello en "Nombre" pondremos:

%' or 'a' like '

¡Ahora clic en buscar y ya debes estar viendo todos los registros!

Algunas otras cosas se podrían hacer también con un poco de imaginación...

Hasta pronto.

Todo lo explicado aquí es solo con fines didácticos. El autor no se hace responsable por el uso que se le pueda dar a esta información.

2 comentarios:

  1. Disculpa mi ignorancia pero por que, %' or 'a' like ', provoca ese resultado en la búsqueda, gracias y perdón por la pregunta.

    ResponderEliminar
  2. Primero lee un poco sobre Bases de datos, el lenguaje SQL e inyecciones SQL.

    La razón es por que la consulta SQL que se forma al inyectar esa entrada queda más o menos así:

    select * from tabla where (anexo like '%') and (Nombre like '%' or 'a' like '%')

    El '%' significa cualquier letra. Así que la condición (Nombre like '%' or 'a' like '%') generará una tautología (una condición que siempre sera verdadera). Por ello no se filtra ningún resultado y se muestran todos.

    ResponderEliminar