2010-08-10 14 views
8

La página web trabajé se intentó recientemente a ser cortado por la siguiente secuencia de comandos SQL injection¿Puedes explicar esta inyección SQL?

boys' and 3=8 union 
select 1, 
concat(0x232425,ifnull(`table_name`,0x30),char(9),ifnull(`table_rows`,0x30), char(9),0x252423), 
3,4,5,6,7,8,9 

from `information_schema`.`tables` 

where table_schema=0x62646B3032 limit 44,1 -- And '8'='8 

Esta inyección devolvió el nombre de la tabla de MySQL. Esto fue informado por el sistema de informe de errores en ese sitio web y logramos corregir esa parte, sin embargo, no puedo entender qué significa la inyección anterior.

Cualquiera puede explicar esto?

Peniel

+0

Busco específicamente el significado del uso como "0x232425", IFNULL ('table_rows', 0x30), etc en la inyección anterior. – Penuel

+4

http://xkcd.com/327/ –

Respuesta

4

De acuerdo con la this concat MySQL()

devuelve la cadena que resulta de la concatenación de los argumentos. Puede tener uno o más argumentos. Si todos los argumentos son cadenas no binarias, el resultado es una cadena no binaria. Si los argumentos incluyen cadenas binarias, el resultado es una cadena binaria. Un argumento numérico se convierte en su forma de cadena binaria equivalente

Así 0x232425 se convierte en # $% que es simplemente añade al comienzo y al final del campo nombre_tabla. Tal vez solo para facilitarles sacar los nombres de la Tabla más tarde usando Regex.

Más tarde, el char (9) es equivalente a una pestaña como puede ver here y está ahí para formatear la salida más bonita.

El 3,4,5,6,7,8,9 es sólo allí para que las columnas se ajustan a la mesa de los niños que están realizando en la Unión.

+1

Gracias y una gran explicación. – Penuel

6

Están usando un selecto desde el punto de vista de esquema de información en el servidor MySQL:

http://dev.mysql.com/doc/refman/5.0/en/information-schema.html

Se utilizan algunos trucos ingeniosos para derrotar a cabo las técnicas de prevención de inyección SQL simples.

+0

Aunque utiliza MySQL, ambas bases de datos tienen mesas INFORMATION_SCHEMA (desde MySQL 5). – SteveCav

+0

Esto es MySQL. Fíjate en los retrocesos. Pero sí, MySQL también tiene una "base de datos" de information_schema. – cHao

+0

Gracias a todos, pero lo que estoy buscando específicamente valores como 0x232425 en la consulta. ¿Qué está haciendo eso? – Penuel

3
Esta inyección devolvió el nombre de la tabla de MySQL.

¿Quiere decir que su sitio web aparezca el nombre de la tabla cuando se dio esta entrada, o que la consulta devuelve que cuando se ejecuta desde el cliente mysql? Si se mostró en su sitio web, entonces el atacante tiene la capacidad de inyectar consultas mucho más dañinas. Verifica tus datos

+0

Mostró el nombre de la tabla en nuestro sitio web. Nos dimos cuenta de la seriedad y reparamos esa parte con filtros de entrada.También estamos trabajando en algunos filtros de entrada globales para que, incluso si los programadores no verifican la entrada, la aplicación ignore esa entrada automáticamente, forzando a los programadores a verificar la entrada. – Penuel

Cuestiones relacionadas