Sería raro que a estas alturas aún quede alguien que no haya escuchado de las inyecciones SQL ... lamentablemente muchos no sólo han escuchado sobre este tema...sino que lo han padecido.
¿Qué tan peligroso es un ataque mediante inyección SQL?
Primero, para que se aplique, el programador debe dejar huecos de seguridad...cómo?? de varias maneras
1.-Consultas dinámicas, osea ... los resultados están en función al input del cliente.
2.-Concatenar segmentos de una consulta dentro de una consulta parametrizada.
3.-No validar los inputs del usuario o validarlos pobremente.
Chequea este ejemplo:
sSql = "select ErrorMessage from ErrorMessages where ErrorCode = " & Request.QueryString("ErrorCode")
Esta consulta tiene una parte estática y la otra variable... que dependerá del número de error pasado por esta url http://127.0.0.1/webApp/Error.aspx?ErrorCode=2
Obviamente la cadena de consulta se convertiría en esto
"select ErrorMessage from ErrorMessages where ErrorCode = 2"
todo claro hasta ahí... Si nosotros cambiamos el código del error a 3, quedaría así:
...where ErrorCode = 3" cierto??
Hasta ahí tampoco hay gran problema ..pero qué pasa si ponemos algo equivocado? ..algo como "2' "
A decir verdad, atacar inputs de tipo NUMÉRICO es lo más sencillo que se puede hacer...ya que la aplicación espera un número y no un caracter, tons' ...no habrá una comilla simple que cierre el input ... exacto!!! ... qué bueno que se te ocurrió!!
entonces podemos concatenar esa cadena de consulta con otra consulta de ataque...
Sigamos, noten que he ingresado, adicionalmente, una simple comilla ... esto me causará un error ... y el atacante se daría cuenta que no validaste las entradas para la consulta.
Esto es el principio de una serie de pruebas que intentará ¡¡por joder!! seamos crudos.
Otra cosa, si tú no pusiste una página de error personalizada ... ya fuiste!! el atacante a estas alturas ya sabría qué base de datos estás usando y que además no validaste los inputs del usuario.
Pero, seamos más creativos aún, cambiemos la url inicial a esto:
http://127.0.0.1/webApp/Error.aspx?ErrorCode=2 UNION select name from sysobjects
finalmente, la cadena de consulta quedaría así:
"select ErrorMessage from ErrorMessages where ErrorCode = 2 UNION select name from sysobjects"
la palabra UNION permite concatenar consultas de esta manera podemos recuperar datos de varias tablas ... osea: ya se metieron en tu base de datos!! ...y si eres un salado ... la consulta les ha retornado los nombres de todos los objetos de tu base de datos.
Ahora, definitivamente estarías en problemas.
Como este tema se extiende más ... la seguiremos en el próximo capítulo. Suerte.
No hay comentarios.:
Publicar un comentario