Hay muchas maneras de obtener información de las bases de datos a través de la inyección SQL (las técnicas similares también pueden funcionar para otras vías de inyección).
Primero, está basado en errores: creas deliberadamente una solicitud no válida y la página web te devuelve una declaración SQL completa con lo que está mal. Puede usar esto para adivinar los nombres de las tablas y confirmar si tiene razón. Este solo funciona con sitios web que no están configurados correctamente: 500 páginas (error de servidor) NUNCA deben devolver la información de depuración / pila / base de datos, nunca. Los datos deben registrarse y debe enviarse un mensaje amigable e inespecífico a los usuarios finales.
En segundo lugar, se aprovechan las consultas que muestran datos. Si tiene una página que muestra filas de datos, el atacante puede agregar una Unión y otra selección, adivinando el número de columnas que espera la consulta (puede hacerlo por prueba y error) y las tablas de la base de datos que proporcionar datos de tabla / columna. Esto les proporcionará todas las tablas y sus columnas y pueden usar esa información para extraer más información o dañar con actualizaciones y eliminaciones.
Tercero, si realmente no puede sacar ningún dato (porque la única instrucción inyectable no devuelve ningún dato (una actualización, por ejemplo), puede hacer lo que se llama inyección de SQL ciego. Puede hacer que la base de datos fuga de información solo por su éxito y fracaso: puede adivinar los nombres de las tablas y ver si la actualización tuvo éxito o fracasó. Incluso puede adivinar los valores de columna y usarlos para filtrar datos. ¿El segundo carácter es o? ¿El tercer carácter es b? Oh, hay un usuario llamado Bob. Obviamente, este es el mejor guión, ya que filtrar cantidades de datos de esta manera requiere MUCHAS solicitudes, pero no tantas como podría pensar. La inyección SQL también se puede hacer en función del tiempo en lugar del error: básicamente, si una condición es verdadera, ponen un estado de suspensión y utilizan la diferencia en el tiempo de ejecución de la consulta para determinar si la condición era verdadera o falsa.
Esperamos que esto te ayude a encontrar más información sobre cada uno de estos. Es probable que haya variantes y otras técnicas con las que no estoy familiarizado; mi función no es principalmente realizar pruebas de lápiz, sino prácticas seguras de desarrollo de software.