En ciertas circunstancias, permití la inyección de SQL en mi servidor. Sin embargo, no puedo ver qué logra el ataque y cómo reparar lo que sea que se haya hecho.
Este es el SQL en cuestión:
'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
(Nuevas líneas agregadas para facilitar la lectura)
En efecto, esto se insertó en este tipo de escenario:
SELECT * FROM students WHERE name = '$name';
$name
contiene lo anterior (al menos debería haber detectado las comillas). Ya había detectado y eliminado cualquier punto y coma en el nombre.
Mis preguntas:
- ¿Qué hace esto exactamente?
- ¿Cómo puedo deshacer esto, si es necesario hacerlo?
He modificado este script en particular para utilizar consultas parametrizadas, pero me pregunto qué otra cosa debe verificarse. (En otras palabras, ¿qué daño se hizo?)