¿Cómo extraer datos usando la inyección de SQL en una aplicación ASP.NET vulnerable?

0

Logré encontrar una vulnerabilidad en el llamado sitio web de un amigo de las minas y quiero mostrarle que su sitio web es vulnerable a la extracción de datos.

Cuando uso algo como yes')-- como publicación, obtengo la siguiente información de depuración:

  

Tienes un error en tu sintaxis SQL; revisa el manual que   corresponde a la versión de su servidor MySQL para que se utilice la sintaxis correcta   cerca de '%' ) or (r.nrinreg=1 and datainreg='01.01.2017' and r.adresant like '%yes' en la línea 3

Así que básicamente mi entrada está dentro de algunos corchetes. Hacer yes%')-- da como resultado una página de carga lenta que se traduce en nada más que en blanco. Así que eso resultaría en algo como esta consulta:

or (r.nrinreg=1 and datainreg='01.01.2017' and r.adresant like '%yes%') -- whatever is after the comment

¿Cómo puedo obtener cualquier versión de MySQL o datos de esa consulta sabiendo que la entrada no se escapa?

Además, ¿cómo se llama este tipo de inyección SQL?

Versión de ASP.NET: 2.0.50727.8762

    
pregunta an4rei 23.05.2018 - 17:09
fuente

2 respuestas

1

A veces (la mayoría de las veces) no puedes. Es la llamada inyección ciega de SQL. Lo que normalmente puede hacer es eliminar (no suele querer) o crear o modificar algunos datos (sí, esto es lo que quiere hacer) o evitar la evaluación de expresiones (es decir, contraseña = contraseña).

Las tareas típicas que desea hacer es asignar un rol de administrador a su cuenta o cambiar la contraseña del administrador, forzar a la aplicación a presentar datos modificados a los usuarios objetivo (XSS almacenados y muchas otras cosas) o simplemente iniciar sesión sin saber el nombre de usuario / contraseña. Además, en MS SQL (si está mal configurado) también puede iniciar comandos del sistema, por lo que al final hay muchas posibilidades de hacerlo, como obtener un control completo sobre el servidor y otros servidores en la infraestructura.

¡Buena suerte, pero sé ético!

    
respondido por el Fis 24.05.2018 - 01:29
fuente
1

Esto es inyección SQL ciega.

Debes averiguar cuántas columnas se usan en esa consulta SQL y luego usar un UNION para agregar los datos que deseas.

Para obtener el número de columnas, intente esto, deteniéndose en el primer éxito:

') UNION SELECT 1 -- ') UNION SELECT 1, 2 -- ') UNION SELECT 1, 2, 3 -- ... ') UNION SELECT 1, 2, 3, 4, 5, 6, 7, 8, 9... --

Ya encontré algunos casos en los que MySQL requiere un espacio antes y después de que la etiqueta de comentario (el uso de '--' falla mientras ' -- ' funciona; el ' es irrelevante y está aquí para mostrarle los espacios extraños ) por lo que podría valer la pena mantener el espacio final adicional.

La consulta fallará hasta que obtenga el número correcto de columnas. Cuando sea así, encuentre dónde termina cada columna en la página (es posible que algunas columnas no se usen en la página, por lo que los datos que contiene nunca llegarán a su pantalla). Luego, puede inyectar cualquier SELECT que desee y recuperar información como la versión de MySQL:

') UNION SELECT VERSION(), 2, 3, 4...

Tenga en cuenta que algunas columnas pueden usarse internamente, como una columna id : si dicha columna tiene datos incorrectos, su página final podría cargarse, pero estará vacía (imagine que el sitio web es un foro y la primera columna es la Id. del autor de cada mensaje, y si el autor no existe, la página falla: en ese caso, debe tener un ID existente en la primera columna).

Otra buena manera de obtener información es SELECT ingrándolos desde information_schema : esta es la razón por la que el usuario de MySQL de su sitio web debe tener los privilegios mínimos posibles, por lo que no puede acceder a esa tabla crítica (igual para algunos otros como mysql o performance_schema ).

Por último, no olvide que esto se puede hacer solo si el propietario de la web lo permite, como una prueba muy eficiente del concepto de un ataque real (todos estos pasos pueden realizarse automáticamente mediante SQLMap o un software como ese). / p>     

respondido por el Xenos 23.07.2018 - 10:01
fuente

Lea otras preguntas en las etiquetas