|
|
Al pulsar el botón, vemos que nos aparece la dirección de la página desde la que venimos. Si en vez de apretar el botón de Procesar datos, abro una conexión telnet al puerto 80 y envío el siguiente comando, se obtiene:
telnet www.iec.csic.es 80
Trying 161.111.31.119...
Connected to viznar.iec.csic.es.
Escape character is '^]'.
GET /cgi-bin/referer.exe HTTP/1.0
Referer: "dir"
HTTP/1.0 200 OK
Server: Microsoft-IIS/3.0
Date: Tue, 24 Mar 1998 17:56:55 GMT
Content-type: text/html
<html> <head>
<title>Cómo explotar el HTTP_REFERER</title>
</head>
<body>
<h1>Cómo explotar el HTTP_REFERER</h1>
Vienes de HTTP_REFERER = "dir"
</body> </html>
Connection closed by foreign host.
Nota: En rojo aparece lo que debes escribir en tu ordenador. En azul, las respuestas del servidor.
Como se puede observar, ahora HTTP_REFERER pasa a tomar el valor que le hayamos especificado, "dir" en el ejemplo. Si disponéis de cliente telnet, no tenéis más que repetir los pasos que aparecen en rojo, modificando a voluntad el comando. Bien, ¿y de qué sirve todo esto? Pues si en el script en CGI ocurriese alguna línea como la siguiente:
if [ $HTTP_REFERER ]
se ejecutaría el comando en un shell. Por razones obvias, no he puesto disponible una versión completa del ejemplo, pero imagino que ya os hacéis a la idea de lo que podría pasar, ¿verdad?
Imaginad una petición Web fabricada con telnet que tuviese esta pinta:
GET /cgi-bin/referer.exe HTTP/1.0
Referer: "`chmod -R a+w"
donde referer.exe incluyese la cláusula if anterior. Lo que ocurriría es que ese directorio y todos los que colgasen por debajo pasarían a tener permiso de escritura por todo el mundo. Catastrófico. Cualquiera podría modificar las páginas del servidor, por ejemplo.
Este ejemplo tan sencillo nos muestra cómo NUNCA debemos dar por supuesto ningún valor que recibimos del cliente, ni siquiera variables de sistema como el HTTP_REFERER.
Podéis encontrar más información sobre la cabecera HTTP_REFERER en el artículo de Lincoln Stein.
Copyright © 1997-1998 Gonzalo Álvarez Marañón, CSIC. Todos los derechos reservados.
Criptonomicón es un servicio ofrecido libremente desde el Instituto de Física Aplicada del CSIC. Para información sobre privacidad, por favor consulte la declaración de política sobre privacidad.