🔒 Registro cerrado · Apertura oficial próximamente · Acceso exclusivo para alumnos activos
Iniciar SesiónCodificaciones que confunden (URL, HTML, Unicode)
5 tareas · 38 min · Principiante
Un mismo carácter puede viajar escrito de varias formas: tal cual, con codificación por porcentaje en la URL, como referencia en el HTML o con otro carácter Unicode que se le parece. El servidor, el navegador y los filtros que hay entre ellos no siempre decodifican en el mismo momento, y ahí nacen muchos fallos y muchos falsos positivos. En esta sala se lee el registro del buscador de Discos Almagre, tal como lo escribe el servidor, y tres respuestas guardadas. Se decodifica a mano, con una tabla, y no se envía nada.
Objetivo de la sala
Un mismo carácter puede viajar escrito de varias formas: tal cual, con codificación por porcentaje en la URL, como referencia en el HTML o con otro carácter Unicode que se le parece. El servidor, el navegador y los filtros que hay entre ellos no siempre decodifican en el mismo momento, y ahí nacen muchos fallos y muchos falsos positivos. En esta sala se lee el registro del buscador de Discos Almagre, tal como lo escribe el servidor, y tres respuestas guardadas. Se decodifica a mano, con una tabla, y no se envía nada.En una URL solo pueden ir ciertos caracteres; el resto se escribe con un % seguido de dos cifras hexadecimales que representan un byte. Un espacio se escribe %20, una barra %2F, y un carácter que no es ASCII ocupa varios bytes en UTF-8, cada uno con su %. En formularios y cadenas de consulta, el + también significa espacio. El registro de acceso suele guardar la forma codificada, tal como llegó.
La consecuencia para el auditor: un control que busca un carácter en el texto crudo no lo encuentra si ese carácter llegó codificado, y luego la aplicación lo decodifica y lo usa. Antes de decir «aquí no hay nada» o «aquí hay un ataque», se decodifica.
Responde para continuar
Un filtro revisa el texto crudo de la URL buscando el carácter < y no lo encuentra en la petición b103 de busquedas.log. ¿Por qué?
Ver pista de ayuda
Busca %3C en la tabla de códigos.
Abre busquedas.log y tabla-codigos.txt. La primera búsqueda lleva un carácter con tilde, que en UTF-8 son dos bytes y aparece como dos códigos seguidos; los espacios van como %20.
Responde para continuar
Decodifica el parámetro q de la petición b101. ¿Qué texto buscó el equipo?
Ver pista de ayuda
Sustituye cada código por su carácter. Los dos bytes C3 AD juntos son una sola letra.
Si un texto se codifica y el resultado se vuelve a codificar, cada % se convierte en %25. Así, %3C pasa a ser %253C. Una doble codificación en un registro es una señal que el auditor anota: o hay un componente que codifica de más (un error inofensivo), o alguien la usa para que un filtro que decodifica una sola vez deje pasar lo que otra capa decodificará después. En los dos casos interesa saber cuántas veces decodifica cada capa de la aplicación.
Responde para continuar
¿Qué petición de busquedas.log llega codificada dos veces? Escribe su identificador req.
Ver pista de ayuda
Busca un % seguido de 25.
Unicode tiene caracteres distintos que se ven casi iguales: letras cirílicas idénticas a latinas, o signos de ancho completo pensados para textos asiáticos, como < y >, que no son < y >. La normalización Unicode (por ejemplo, la forma NFKC) convierte muchas de estas variantes en su carácter básico. Si una aplicación filtra primero y normaliza después, un < atraviesa el filtro y sale convertido en <. El orden correcto es decodificar, normalizar y solo entonces validar, sobre el mismo texto que la aplicación va a usar.
La tabla de códigos trae los bytes UTF-8 de los dos signos de ancho completo.
Responde para continuar
¿Qué petición de busquedas.log lleva signos de ancho completo que la normalización convertiría en < y >? Escribe su identificador req.
Ver pista de ayuda
Compara los bytes de cada búsqueda con EF BC 9C y EF BC 9E.
Al pintar en una página algo que vino del usuario, la aplicación debe convertir los caracteres con significado en HTML en referencias de carácter: < en <, & en &, y así con los demás. Si en el código fuente de la respuesta se ve <b>, el navegador mostrará el texto <b> como letras; si se ve <b> tal cual, el navegador lo interpreta como una etiqueta. Esta lectura no prueba nada contra nadie: solo dice dónde la salida no se está codificando, y eso se lleva al análisis de XSS de la ruta.
Abre respuestas-guardadas.txt y compara cómo aparece el mismo término en cada fragmento.
Responde para continuar
¿Qué ruta devuelve el término buscado sin codificarlo para HTML? Escríbela tal como aparece.
Ver pista de ayuda
Dos fragmentos usan referencias con & y punto y coma; uno no.
Whoami-Labs Pro
Whoami-Labs Pro utiliza cookies
Utilizamos cookies y almacenamiento local para el funcionamiento del sitio, seguridad de sesión y, si lo autorizas, analítica y marketing. Puedes aceptar, rechazar o personalizar. Política de Privacidad
Preferencias
Configuraciones de cookies
Elige qué categorías permitir. Las esenciales siempre están activas. Consulta la Política de Privacidad.
Esenciales
Siempre activas · sesión, CSRF, tema y esta preferencia
Necesarias para iniciar sesión, proteger formularios (CSRF) y recordar tu elección de cookies y tema. Sin ellas la plataforma no funciona de forma segura.
Analíticos
Hoy no activos en la plataforma; listos para cuando se conecten
Nos ayudan a entender uso de cursos y páginas. Si los activas, se usarán cuando conectemos analítica; hasta entonces no se carga ningún tracker.
Marketing
Hoy no activos; campañas futuras solo con tu permiso
Comunicaciones o campañas. No activos hoy en la plataforma; quedarán listos si los conectamos y solo si los permites.