Ho piuttosto scioccamente permesso l'iniezione SQL nel mio server in determinate circostanze. Tuttavia, non riesco a capire quale sia l'attacco raggiunto e come riparare qualunque cosa sia stata fatta.
Questo è l'SQL in questione:
'and(select 1 from( select count(*),
concat(( select( select(
select concat(0x217e21,d. schema_name,0x217e21)
from information_schema. schemata as d
join information_schema. tables as t on t. table_schema = d. schema_name
join information_schema. columns as c on c. table_schema = d. schema_name
and c. table_name = t. table_name
where not c. table_schema in(0x696e666f726d6174696f6e5f736368656d61,0x6d7973716c)
and c. column_name like 0x25636325
and not t. table_name in(0x616363657373,0x70687062625f7573657273)
group by t. table_name limit 2,1))
from information_schema. tables limit 0,1),floor(rand(0)*2))x
from information_schema. tables group by x)a)
and '1'='1
(Newlines aggiunti per la leggibilità)
In effetti questo è stato inserito in questo tipo di scenario:
SELECT * FROM students WHERE name = '$name';
$name
contiene quanto sopra (dovrei aver rilevato le virgolette, per lo meno). Avevo già rilevato e rimosso punti e virgola nel nome.
Le mie domande:
- Che cosa fa esattamente?
- Come posso annullare questo, se è necessario farlo?
Ho modificato questo particolare script per utilizzare le query parametrizzate, ma mi chiedo che cos'altro debba essere controllato. (In altre parole, quale danno è stato fatto?)