PHP
Por Flow

PHP3 es un lenguaje interpretado, bastante parecido a perl, interpretado por el server de web. 
Sirve para crear paginas dinámicas muy fácilmente. Un ejemplo de código seria: 

<script language="php">
$frase="Hello World";
print $frase;
</script>

Eso enseñaría un Hello World en el navegador que cargase esa pagina. 
 
 

Vulnerabilidad:

PHP también soporta el pase de variables como si fuera un CGI, e.g. si llamamos a un script php 
así: 

www.example.com/script.php3?user=pepe&pass=juan

Con esto el servidor asignara a las variables (accesibles desde el script) $user el valor "pepe" y a $pass el valor "juan" antes de parsear el script. 

Si dentro del script definimos una variable, lo que hará será machacar la variable que hemos pasado como parámetros de la llamada al script, lo cual es bueno, porque nos evita muchos problemas. 
Lo malo es que no siempre tenemos que declarar una variable para usarla... Mirad este codigo: 

<script language="php">

if($user && $password)
  {
  $ok=comprueba_password($user,$password); // Devuelve 1 si el password corresponde al user
  }

if($ok == 1)
  {
  // mostrar datos confidenciales del usuario
  .....
  }
else
  {
  // Acceso denegado
  .....
  }
</script>
 

Aquí podemos ver tres variables, $user, $password y $ok. Supongamos que el script espera que se 
le pase un usuario y un password en las variables $user y $password que se le pasan al script, digamos: 

http://www.example.com/script.php3?user=pepe&password=juan

A primera vista, parece correcto el script. Fijandonos un poco mas, veremos que la variable $ok
se declara dentro de un if(). 

Que pasa si la condificion del if() no se cumple (no pasamos un usuario o un password como parámetro al script)? Pues que $ok no se declara, se llega al segundo if() y como no se cumple, va a la parte de Acceso Denegado. 

Pero que pasa si no pasamos un password, y pasamos la variable $ok como un parametro cuando 
llamamos al script? 

http://www.example.com/script.php3?user=pepe&ok=1

Esto nos llevaria a ver la información confidencial del usuario, puesto que no se define user, pero se define $ok=1, con lo que la segunda condicion se cumple, y entramos en el proceso de la info confidencial del user :) 

Si, podéis argumentar que se necesita saber el nombre de las variables, pero tened en cuenta que hay bastantes paquetes que usan PHP en open source (programas para consultar email a través de web, interfaces BBDD/web para webs de noticias, etc), con lo que solo es cuestión de repasarse el programa en cuestión, mirar que variables son vulnerables y usarlas. 
 

SOLUCIÓN:

Solución? Declarar todas las variables que vayamos a user dentro del programa al principio del 
script, así nos ahorramos sorpresas. 
 

Ah, ya que estoy, php permite ejecutar comandos desde dentro del script. Así que cuidado si ponéis php en un servidor web al que tiene la gente acceso para poner sus webs. Lo mismo para SSI (server side includes). Pensad también que un libro de visitas muchas veces permite que le pongamos código HTML, conque es casi como que el usuario tenga acceso a crear sus paginas web, asi que atentos :) 

Saludos, 

FLoW 
 

Referencias

http://www.php3.com - Website de PHP
 
 
 
 

 (C) 1997-2001 by !Hispahack 
                Para ver el web en las mejores condiciones, usa una resolución de 800x600 y Netscape Navigator