Vulnerabilidad de inyección de PHP SQL en las declaraciones UPDATE

6

Tome la siguiente consulta SQL como ejemplo:

UPDATE 'sqlinjection2' SET '$vote'='$vote'+1

Nuestro objetivo es aumentar el recuento de votos en más de uno, en una solicitud.

No podemos acceder al código en sí.

Si podemos enviar un valor a $ vote, podríamos enviar:

vote'=1, 'vote'=X+'vote

Para que la consulta se vea así:

SET 'vote'=1, 'vote'=X+'vote'='vote'=1, 'vote'=X+'vote'+1;

Aclaración: X es un número.

Mi pregunta es, ¿cómo funciona esta parte?

'vote'=X+'vote'='vote'=1

Entiendo que establece que la columna vote sea NULA, pero ¿por qué?

    
pregunta Roee H 13.06.2016 - 09:56
fuente

1 respuesta

2

El ejemplo que da da como resultado que se devuelve el valor 0 (no NULL). Esto se debe a que la consulta que usted construyó terminó siendo una comparación booleana. El = dentro de la (s) parte (s) de asignación de una instrucción UPDATE es un operador de comparación, no un operador de asignación como cabría esperar.

La inyección vote'=1, 'vote'=10+'vote da como resultado la consulta UPDATE mytable SET /*part1*/'vote'=1, /*part2*/'vote'=10+'vote' = 'vote'=1, /*part3*/'vote'=10+'vote' + 1 que deconstruye esto (utilizando == como operador de comparación para mayor claridad:

PART1:  
vote = 1

PART2: 
vote = ((10+vote) == vote) == 1
vote = ( 11 == vote ) == 1 
vote = ( 11 == 10 ) == 1 
vote = FALSE == 1
vote = FALSE (0) 

PART 3:
vote = 10 + vote + 1 
vote = 10 + FALSE (0) + 1 
vote = 11 

La inyección más interesante sería simplemente establecer la columna de votación y luego finalizar la consulta mediante un comentario:

$vote = "vote' = 1337 -- and we don't care about the rest";
// results in: 
// UPDATE mytable set 'vote' = 1337 -- and we don't care about the rest' = 'vote' = 1337 -- and we don't care about the rest' + 1

MySQL ignorará todo después de la primera aparición de - como un comentario y establecerá el valor (en realidad, todos los valores de voto en la tabla) a 1337.

    
respondido por el NSSec 27.06.2016 - 09:52
fuente

Lea otras preguntas en las etiquetas