Intentando replicar el ataque de inyección SQL

0

Bien, tengo un sitio web de ASP clásico y recientemente fue víctima de alguna inyección de SQL donde se actualizaron algunas tablas. Nada sucedió en serio ya que no mantengo nada personal en la base de datos. He investigado un poco y parece que puedo encontrar una respuesta a mi pregunta.

Así que aquí es lo que he encontrado hasta ahora. Tengo la URL de mi sitio web (no la real)

www.myWebSite/default.asp?pg=buy&Id=1

Simplemente puedo escribir una consulta de ACTUALIZACIÓN como tal

www.myWebSite/default.asp?pg=buy&Id=1; UPDATE table SET col WHERE something here .

Esto actualizará la base de datos y demás, pero eso es si ya conoce todos los nombres de las tablas.

Así que esto no es ideal en absoluto. Mi pregunta es: ¿cómo obtengo toda la información de la tabla? He intentado que se cometan errores y hacer cualquier cosa que pueda encontrar en línea, pero nada parece mostrar.

    
pregunta whisk 01.12.2016 - 15:14
fuente

2 respuestas

2

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.

    
respondido por el crovers 01.12.2016 - 15:29
fuente
0
www.myWebSite/default.asp?pg=buy&Id=1 UNION ALL select table_name,'','' from all_tables; 

dependiendo de cuántas columnas devuelva la consulta original, tendrá que ajustar el número de columnas que solicita de all_tables.

la anterior es sintaxis de Oracle. Para mysql sería algo así como

select table_name,'','' from information_schema.tables
    
respondido por el mcgyver5 01.12.2016 - 15:51
fuente

Lea otras preguntas en las etiquetas