Inyección SQL a través de mysql_query

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 mucha llamada mysql_query cuyas entradas son no escapó en absoluto.

El bien 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 genial a partir de esa vulnerabilidad de inyección (por cool me refiero a algo así como INSERT o UPDATE). Intenté construir una statement como esta:

 SELECT * FROM mytable where name LIKE '%' AND WHERE id IN (INSERT INTO secondtable (id,description) VALUES (15, 'Fifteenth description');--%' 

Sin éxito. Supongo que el INSERT no tiene nada que hacer aquí.

Estoy escapando de las entradas de todos los usuarios 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 shiny?

Gracias

Según la versión de mysql que esté utilizando y la configuración de la conexión, mysql_query puede permitir más de una statement .

Debería ver cómo se está creando la conexión y para cualquier uso de mysql_set_server_option .

Debido a que mysql_query no admite múltiples consultas, por lo tanto, cualquier inyección que funcione como '; DROP TABLE mytable; -- '; DROP TABLE mytable; -- '; DROP TABLE mytable; -- No tendrá éxito.

Sin embargo, el atacante puede combinarse con otra statement de selección para seleccionar la otra información, como la información de contraseña.

Posible escenario 1
Las contraseñas / hash débiles permitirán que un atacante seleccione la contraseña del administrador.
Sería inteligente cambiar todas las contraseñas de los administradores.

Ahora, ha pasado un tiempo desde que se hizo cualquier php, pero en general la mayoría de las bibliotecas de acceso a datos tienen algún tipo de SQL parametrizado para reducir el riesgo. Un google rápido se le ocurrió esto para php: http://php.net/manual/en/pdo.prepared-statements.php

El otro póster ya describió cómo hacer una inyección sql, así que no entraré en eso.

Estoy bastante seguro de que un hacker podría modificar la consulta fácilmente. Incluso si mysql_query () no es compatible con múltiples consultas, existen formas de evitarlo. solo podría usar una instrucción mysql IF agregada hasta el final, y por supuesto que ejecutará una consulta completamente nueva.

 $query = "SELECT * FROM mytable where name LIKE '%".$_GET['name']."%'"; $_GET['name']="'; DROP TABLE mytable; -- "; 

asi que

 $query = "SELECT * FROM mytable where name LIKE '%'; DROP TABLE mytable; -- %'";