La URL (Localizador Uniforme de Recursos) de una aplicación Web es el vector que permite indicar el recurso solicitado. Es una cadena de caracteres ASCII imprimibles dividida en cinco partes:
Una URL tiene la siguiente estructura:
| Protocolo | Contraseña (opcional) | Nombre del servidor | Puerto (opcional si es 80) |
Ruta |
| http:// | usuario:contraseña@ | es.kioskea.net | :80 | /glossair/glossair.php3 |
La URL permite enviar parámetros al servidor colocando un signo de interrogación después del nombre del archivo y luego los datos en formato ASCII. Por lo tanto, una URL es una cadena de caracteres con el siguiente formato:
http://es.kioskea.net/forum/?cat=1&page=2
Al manipular ciertas partes de una URL, un hacker puede hacer que un servidor Web le permita acceder a páginas Web a las que supuestamente no tenía acceso.
En sitios Web dinámicos, los parámetros generalmente se transfieren a través de la URL de la siguiente manera:
http://target/forum/?cat=2
La página Web crea automáticamente los datos contenidos en la URL y, al navegar normalmente, el usuario simplemente hace clic en el vínculo propuesto por el sitio. Si un usuario modifica el parámetro manualmente, puede probar diferentes valores, por ejemplo:
http://target/forum/?cat=6
Si el diseñador no ha previsto esta posibilidad, es posible que el hacker pueda tener acceso a un área que, en general, está protegida.
Además, puede hacer que la página Web procese un caso imprevisto, por ejemplo:
http://target/forum/?cat=***********En el ejemplo anterior, si el diseñador de la página Web no ha previsto un caso donde los datos no estén representados por un número, la página Web puede entrar en un estado no previsto y brindar información en un mensaje de error.
Posiblemente, un hacker pueda probar directorios y extensiones de archivos al azar para encontrar información importante. Algunos ejemplos clásicos:
http://target/admin/ http://target/admin.cgi
http://target/phpinfo.php3
http://target/.bak
http://target/.bash_history http://target/.htaccess
El ataque denominado cruce de directorio o cruce de ruta modifica la estructura de árbol de la ruta en la URL para hacer que el servidor tenga acceso a partes no autorizadas del sitio.
Un ejemplo típico es cuado el usuario se ve obligado a retroceder en la estructura de árbol, especialmente cuando no tiene acceso al recurso:
http://target/base/test/ascii.php3 http://target/base/test/ http://target/base/
En servidores vulnerables, el atacante simplemente puede retroceder por la ruta con varias cadenas de este tipo "../":
http://target/../../../../directory/file
Los ataques más avanzados codifican ciertos caracteres:
http://target/..%2F..%2F..%2Fdirectory/file
http://target/..%u2216..%u2216directory/file
Muchos sitios dinámicos transfieren los nombres de las páginas que se visualizarán como parámetros en una forma similar a la siguiente:
http://target/cgi-bin/script.cgi?url=index.htm
Si no se realizan verificaciones, un hacker pude modificar la URL de forma manual para solicitar acceso a un recurso de página Web al que no tiene acceso directo, por ejemplo:
http://target/cgi-bin/script.cgi?url=script.cgi
Para proteger un servidor Web contra manipulaciones de URL, es necesario supervisar las vulnerabilidades y aplicar las actualizaciones que regularmente provee el editor del servidor Web.
Además, una configuración detallada del servidor Web impide que los usuarios naveguen por páginas a las que se supone que no tienen acceso. Por lo tanto, se debe configurar un servidor Web según se describe a continuación: