http://www.pwntester.com/blog/2014/01/15/hackyou2014-web100-write-up/
En este enlace, Se han inyectado por código hexadecimal como

0x39393939393939393939393920756e696f6e20616c6c202873656c656374202748656c6c6f21212729  

significado:

999999999999 union all (select 'Hello!!')  

En mysql,se puede escribir una consulta como
Mysql> 0x0abcd… (supongo que 0x0abc.. significa select * from…).
Así, se Puede explicar por mí ¿por qué pueden inyectar como en mi enlace?
p/s: lo Siento por mi pobre inglés.

Por favor, incluya una explicación de el hack en la entrada en el blog, así que esta pregunta puede estar en su propio. Que vinculan inevitablemente la putrefacción.
Las personas que están votando para cerrar esta pregunta porque no está claro están siendo demasiado exigente. Esta pregunta es perfectamente claro y apropiado.
Como por ser demasiado exigente, la edición de hace una gran diferencia, tener que leer un vínculo remoto no es razonable (el detalle relevante debe ser copiado en el de la pregunta), y este es un problema con el PHP, no de mysql/sql. Combinados, los que aún no dejan claro.
a continuación, lo que sugiere una edición para mejorar la cuestión es apropiado. Haciendo un drive-by cerca de voto no es útil, y es como una puerta cerrada de golpe en la cara a alguien que está pidiendo ayuda.

OriginalEl autor theasker228 | 2014-10-04

2 Comentarios

  1. 3

    La inyección SQL no sucede en el INSERT declaración, pero en la segunda SELECT declaración:

    "SELECT title FROM picture WHERE id = ".$r['id']

    Aquí $r['id'] es el recientemente ID insertado, yo. e., el usuario suministra $_POST['id'] valor.

    Ahora, la razón de por qué esta inyección SQL obras es de MySQL hexadecimal literales y el hecho de que el id columna de la voto tabla es de un tipo de cadena como en ese caso se aplica lo siguiente:

    En la cadena de contextos, actúan como cadenas binarias, donde cada par de dígitos hexadecimales se convierte en un personaje:

    mysql> SELECT X'4D7953514C';
            -> 'MySQL'
    mysql> SELECT 0x0a+0;
            -> 10
    mysql> SELECT 0x5061756c;
            -> 'Paul'

    Para PHP 0x… es numérico (he. e., is_numeric) y para MySQL 0x… se interpreta y se almacena como una cadena de texto, que luego se inserta en el mencionado SELECT declaración.

    Esto no sería posible si

    • id habría sido un tipo de datos numéricos, o
    • la SELECT habría sido una declaración preparada.
    en ese enlace, el uso de código hexadecimal no sólo como d en la columna,pero también como una consulta(0x39… como 99999 UNIÓN…), y no puedo hacer algo como eso en mysql por línea de comandos.
    Que sólo funciona debido a que la cadena de valor en hexadecimal se almacena en la base de datos y posteriormente recuperado y se inserta en otra consulta.

    OriginalEl autor Gumbo

  2. 1

    Esto ya está respondido en los comentarios sobre la entrada en el blog. La cadena hexadecimal debe ejecutar a través de PHP, o algún otro sistema que incorrectamente pasa el valor a MySQL como una cadena (en lugar de un número), para que este «hack» para trabajar.

    estoy seguro de que la cadena hex sólo ir a través de PHP. Se puede señalar que el componente en el código PHP se ha convertido en el hexagonal de cadena en cadena?

    OriginalEl autor Matt Ball

Dejar respuesta

Please enter your comment!
Please enter your name here