SQLi basado en errores se basa en un error que se encuentra en MySQL con respecto a la declaración GROUP BY (consulte aquí y aquí ).
Para desencadenar el error se deben seguir las siguientes reglas:
- Usa una función agregada.
- GRUPO POR una columna que tiene dos valores idénticos en filas diferentes.
- La salida de la función rand () debe aparecer en la columna del punto 2 anterior.
La cadena
or 1 group by concat_ws(0x3a,version(),floor(rand(0)*2)) having min(0) or 1--
se inyecta en una cláusula WHERE, por lo que or 1
(que es equivalente a or true
) se usa para cancelar las condiciones anteriores y mostrar tantas filas como sea posible. De esta manera, debería haber al menos dos filas con el mismo valor para floor(rand(0)*2))
. Esto se ocupa de los puntos 2 y 3. Usamos floor () de modo que los valores devueltos son solo 0 o 1. Si tuviéramos que usar rand directamente, sería casi imposible satisfacer el punto 2.
Necesitamos having min(0)
para ocuparnos del punto 1.
Además, la instancia de or 1
al final de la consulta es inútil y puede eliminarse.