Il seguente filtro SQLi (MySQL) proviene da SQLi-Labs:
...
$reg = "/#/"
$reg1 ="/--/"
$replace =""
$id=preg_replace($reg,$replace,$id);
$id=preg_replace($reg1,$replace,$id);
....
$sql = "SELECT * FROM users where id='$id' LIMIT 0,1";
So che il filtro può essere eluso da qualcosa come 'or '1'='1
.
Tuttavia, mi piacerebbe vedere se è possibile eseguire un dump di file out dell'intero database, quindi ho provato cose del tipo:
' union select null,username,password from users into outfile "/tmp/file"...
tuttavia a causa del ' LIMIT 0,1
alla fine ho problemi a capire come terminare il payload. Ho pensato di fare più query di unione, ad esempio:
' union all select null,username,password from users into outfile "/tmp/file" union all select null,username,password from users group by '
Tuttavia, ottengo un errore, perché credo che la parte into outfile
debba essere l'ultima query. Ho anche pensato di utilizzare FIELDS TERMINATED BY '
, ma ora LIMIT 0,1
è a modo mio.
Esiste comunque un modo per eseguire un dump di outfile del database? È invece possibile scaricare il database attraverso l'errore?