Actualmente estoy probando una aplicación web, que parece tener una vulnerabilidad de redireccionamiento abierta, ya que reciben un parámetro redirect_url
a través de GET. La aplicación redirige al usuario a esta URL más adelante.
Sin embargo, hacen algunas URL fijas que aceptan y responden con 400
para cualquier otra URL.
La URL que la aplicación espera es similar a la siguiente: https://subdomain.example.com/foo/bar
.
He intentado restringir exactamente qué coinciden. Todos los intentos siguientes fallaron, ya que la URL no fue aceptada.
- esquema:
http://subdomain.example.com/foo/bar
- Subdominio:
https://foobar.example.com/foo/bar
- dominio:
https://subdomain.test.com/foo/bar
- Directorio 1:
https://subdomain.example.com/bar/bar
- Directorio 2:
https://subdomain.example.com/foo/foo
Además, he intentado engañar a la aplicación con un nombre de usuario en el URI: https://[email protected]/foo/bar
En general, esto parece estar muy bien implementado.
P: Mi pregunta es, si hay otros enfoques para omitir el mecanismo de coincidencia de URL, no lo he pensado.
EDIT:
Con las sugerencias de @ Trickycm, he probado los siguientes enfoques:
- Recorrido del directorio:
https://subdomain.example.com/foo/bar/../../../../test
- Recorrido del directorio:
https://subdomain.example.com/../../../../test/foo/bar
- Varias codificaciones (por ejemplo, URL), esquema de modificación, subdominio, dominio, directorios con cada
- Relleno de bytes nulos
- Inyecciones de SQL
- URL de longitud extrema
- Varios URL de conjuntos de caracteres (por ejemplo, chino, ruso, indio)
- Varias combinaciones de lo anterior
Ninguno de los cuales tuvo éxito, esto parece implementarse de una manera muy segura.