¿Se está aprovechando la función IsNumeric () en VB.Net a través de la inyección SQL?

5

Supongamos que esta es la única mitigación utilizada en un servidor:

Dim IDPerson
IDPerson = Request.Querystring("id")
If IsNumeric(IDPerson) = True Then
IDPerson = IDPerson
Else
IDPerson = 0
End If

IDPerson se usa para escribir la consulta. El "id" es la variable GET.

Sé que IsNumeric aceptará Hex como numérico.

¿Se podría construir una consulta completa en hexadecimal y pasar la función IsNumeric?

    
pregunta k to the z 29.05.2013 - 23:46
fuente

1 respuesta

1

Voy a decir que depende de lo que haga luego con la variable ID. Si su código convierte posteriormente el hex en una cadena y luego crea consultas con él, entonces la respuesta se convierte en "sí".

Ejemplo:

Construyo un sitio web de comercio electrónico que busca su historial de compras basado en su ID de cliente ... Siendo un noob, se me ocurrió una idea inteligente de usar su dirección de correo electrónico para generar su ID simplemente convirtiéndola en hexadecimal.

  • mi correo electrónico = [email protected]
  • mi ID sería entonces = 637573746f6d6572406578616d706c652e636f6d

Parece una identificación "bastante segura" y única, así que me siento muy bien por lo que he hecho.

Ahora la inyección:

Alguien se da cuenta de que el ID de usuario es simplemente el equivalente hexadecimal de la dirección de correo electrónico y adivina que es posible que lo esté convirtiendo de nuevo en texto y utilizando ese resultado en una consulta

enlace

  • ID inyectada = 31272064726f70207461626c652075736572733b202d2d

  • ascii equivalente = 1' drop table users; --

Si yo, el desarrollador, verifico que la ID sea numérica ... luego la ID de hexadecimal a texto ... luego la uso en una consulta ... Acabo de permitir una inyección de sql

Referencias:

Aquí hay una pregunta similar con respecto a las inyecciones de SQL que usan solo caracteres alfanuméricos: enlace

Aquí hay otro hilo que trata sobre la inyección de sql a través de hex: enlace

... Por supuesto, la solución correcta es utilizar mecanismos de prevención "reales", como consultas parametrizadas, pero esta es ciertamente una pregunta interesante.

    
respondido por el Brian Adkins 31.05.2013 - 02:57
fuente

Lea otras preguntas en las etiquetas