Hackear: ejemplo de inyección sql en un programa en c ++

Inyección de código se produce cuando el usuario atrae a su programa en C ++ para ejecutar alguna pieza de código creado por el usuario. "¿Qué? Mi programa nunca haría eso!”, Dice usted. Considere el más común y, por suerte, más fácil de entender variante de esta pequeña estafa: la inyección de SQL.

Video: Hacking Websites with SQL Injection - Computerphile

Aquí están algunos hechos acerca de SQL:

  • SQL (A menudo pronunciado “secuela”) es sinónimo de Structured Query Language.

  • SQL es el lenguaje más común para el acceso a bases de datos.

  • SQL se utiliza casi universalmente en el acceso a bases de datos relacionales.

Si no lo sabe ya SQL, es suficiente decir que SQL es a menudo interpretado en tiempo de ejecución. Muy a menudo, las declaraciones de C ++ enviará una consulta SQL a un servidor independiente de base de datos y luego procesar y mostrar lo que el servidor envía de vuelta. Una consulta SQL típica dentro de un programa en C ++ puede tener un aspecto como el siguiente:

char * consulta = "SELECT * FROM transacciones en las que ACCOUNTID = `123456789`-"Resultados = submit (consulta) -

Este código dice “SELECCIONAR todos los campos DE la mesa de operaciones DÓNDE el ID de la cuenta (Presumiblemente uno de los campos en la tabla de transacciones) es igual a 123 456 789 (ID de cuenta del usuario) “The. enviar() función de la biblioteca podría enviar esta consulta fuera al servidor de base de datos.

El servidor de base de datos respondería con todos los datos que tiene sobre cada transacción que el usuario ha hecho nunca en esta cuenta, que se almacenan en la colección resultados. El programa entonces iterar resultados, Probablemente se presentan las transacciones en una tabla con cada transacción en una fila separada.

El usuario probablemente no necesita que muchos datos. Tal vez sólo aquellas transacciones entre fecha de inicio y fecha final, dos variables que el programa lee la página de la consulta del usuario. Esta más selectivo programa en C ++ podría contener una declaración como la siguiente:

char * consulta = "* SELECT transacciones en las que ACCOUNTID = `123456789`"" Y la fecha gt; `" + + StartDate "`Y la fecha lt; `" + + EndDate "`-"-

Si el usuario introduce 01/10/2013 para fecha de inicio y 01/11/2013 para fecha final, a continuación, la consulta resultante que se envía a la base de datos es el siguiente:

* SELECT transacciones en las que ACCOUNTID = `123456789` ANDdate gt; `01/10/2013` y la fecha lt; `2013/11/1`

En otras palabras, mostrar todas las transacciones realizadas en el mes de octubre de 2013. Eso tiene sentido. ¿Cuál es el problema?

Video: SCRIPT PARA SQL INJECTION

El problema surge si el programa solo acepta lo que el usuario entra como las fechas de inicio y fin y los conecta a la consulta. No hace ninguna comprobación para asegurarse de que el usuario está introduciendo sólo una fecha y nada más que una fecha. Este programa es demasiado confiada.

¿Qué pasa si un hacker fuera a entrar 01/10/2013 para el fecha de inicio, pero para el fecha final tuviera que entrar en algo así como 01/11/2013` O ACCOUNTID = `234567890. (Observe las comillas simples no balanceadas.) Ahora la consulta SQL combinado que se envía al servidor de base de datos se vería

* SELECT transacciones en las que ACCOUNTID = `123456789` ANDdate gt; `01/10/2013` y la fecha lt; `01/11/2013` ORaccountID = `234567890`-

Esta dice: “Muéstrame todas las transacciones de la cuenta 123456789 para el mes de octubre de 2013, además de todas las transacciones de alguna otra cuenta 234567890 que yo no tengo para cualquier fecha.”

Este pequeño ejemplo puede plantear algunas preguntas: ¿No sabe - él sólo intenta entrar en SQL falsa en todos los campos que acepte texto carácter y ve lo que sucede “¿Cómo sabe el hacker que pudiera entrar sentencias SQL en lugar de las fechas?” . Si el programa se queja, “Eso no es una fecha legal”, a continuación, el hacker sabe que el programa comprueba para asegurarse de que las fechas de entrada son válidos e inyección SQL no funcionarán aquí.

Si, por el contrario, el programa muestra un mensaje de error como sentencia SQL ilegal, a continuación, el hacker sabe que el programa acepta la entrada falso y lo envió fuera al servidor de base de datos que luego le dio una patada hacia atrás. ¡Éxito! Ahora todo lo que tiene que hacer es formular la consulta a la perfección.

Video: Ataques web | Inyecciones SQL

Entonces, ¿cómo el hacker sabe que la identificación de la cuenta fue llamado ¿ID de la cuenta? No sabía que, o bien, pero ¿cuánto tiempo se necesitaría para adivinar que uno? Los hackers son muy persistentes.

Por último, ¿cómo el hacker sabe que 234567890 era un número de cuenta válido? Una vez más, no lo hizo - pero ¿realmente piensa que el hacker va a parar allí? Diablos no. Se va a probar cada combinación de dígitos que se le ocurre hasta que encuentre algunas cuentas muy grandes con muy grandes saldos que vale la pena robar a.

Video: Hacking con Inyección SQL y Lectura de Código Fuente

Recordar tres cosas:

  • la inyección de SQL fue hace años muy comunes.

  • Era así de sencillo.

  • Con un mejor conocimiento de SQL y una sintaxis muy torturado, un buen hacker puede hacer casi cualquier cosa que quiera con una inyección SQL como esto.

Artículos Relacionados