Estoy trabajando en un sitio que ha sido pirateado a través de SQL Injection (a primera vista, solo las entradas de db están dañadas con scripts entre sitios) la vulnerabilidad potencial que encontré después de mirar el código es que hay una mucha llamada mysql_query cuyas entradas no se escapan en absoluto.SQL Injection a través de mysql_query
El buen viejo:
$query = "SELECT * FROM mytable where name LIKE '%".$_GET['name']."%'"; /*HACK HERE*/
mysql_query($query, $connection);
Sin embargo no puedo encontrar cómo podemos hacer algo frío desde que la vulnerabilidad de inyección (por frío me refiero a algo como un INSERT o un UPDATE). Intenté construir una declaración como esta:
SELECT * FROM mytable where name LIKE '%' AND WHERE id IN (INSERT INTO secondtable (id,description) VALUES (15, 'Fifteenth description');--%'
Ningún éxito. Supongo que el INSERT no tiene nada que hacer aquí.
Estoy escapando de todas las entradas de usuario en el código en este momento, pero realmente no entiendo cómo han penetrado los hackers en este sitio, entonces no estoy 100% seguro de que mi solución hará el trabajo. ¿Alguna sugerencia brillante?
Gracias
Supongo que este sitio no es el lugar correcto para preguntar cómo hacerlo :) – Mike
Asegúrese de que 'nombre' cuando concatena con las cadenas base formas sql válido. – EBarr
Un atacante podría fácilmente 'UNIR'/'UNIÓN' a otra tabla y obtener credenciales de inicio de sesión de administrador. Luego, con privilegios elevados, podría hacer más cosas malvadas, p. cargando un shell PHP para ejecutar comandos arbitrarios en el servidor – knittl