chmod -R 555 * no es nada recomendable, sobre todo cuando tienes claves en texto plano en los archivos (como por desgracia suele pasar con php y la conexión a la BD)
Mejor un 550.
Efectivamente, si el sistema de archivos impide la escritura, no se podrá escribir en los archivos. Es una buena solución. Pero mucho me temo que la vulnerabilidad sigue estando ahí. Quizá se trate de un 0day para oscommerce (que tiene un largo historial de vulnerabilidades).
Para que entiendas cómo funciona la inyección de sql te pongo un ejemplo.
Supongamos que una web te reenvía la contraseña al especificar un usuario válido en un formulario.
Una vez recogido el nombre de usuario que ha introducido éste, el php hace una consulta a la base de datos para decidir si reenviar la contraseña o no.
Podría ser algo como:
Código:
$sqlquery = 'SELECT usuario FROM table WHERE usuario = ' . $usuariointroducido . ';'
if( ! $result = mysql_query ( $sqlquery, $dblink ) ) {
echo mysql_error();
return;
} else {
echo "ok, enviamos la contraseña";
}
Al no validar la entrada, se puede meter un trozo de código SQL directamente, y el PHP se lo traga. Por ejemplo, supongamos que en el formulario introducimos esto:
Código:
'esteusuarionoexiste' OR 'x'='x'
El código php que he escrito más arriba, ejecutaría esto:
Código:
$sqlquery = 'SELECT usuario FROM table WHERE usuario = 'esteusuarionoexiste' OR 'x'='x'';'
if( ! $result = mysql_query ( $sqlquery, $dblink ) ) {
echo mysql_error();
return;
} else {
echo "ok, enviamos la contraseña";
}
Es decir, que la consulta sería válida y se reenviaría la contraseña.
Bueno, hay muchas "imprecisiones" en el código que te he puesto Pero la base es ésa.
Salu2
Marcadores