Para un proyecto de prueba, quiero crear un sitio vulnerable XSS . Mi estructura básica es un foro donde las personas pueden agregar publicaciones en el foro a través de campos de entrada y un botón de envío. Actualmente renderizo la nueva publicación que debe mostrarse a través de HTML interno, pero con este método, el script malicioso (por ejemplo, <script>alert("123")</script> ) que quiero insertar como atacante no se ejecuta. Busqué otras alternativas a innerHTML pero ninguna funcionó. ¿Cómo puedo lograr la representación de JavaScript en mi código?
Cosas que probé
appendChild(); eval(); insertAdjacentElement();Campos de entrada para la creación de una nueva publicación
<form> <label for="topic" >Topic: <br /> <input id="topic" required /></label> <br /> <br /> <label for="text" >Text: <br /> <input id="text" type="text" required /></label> <br /> <button type="submit" id="submit">submit</button> </form>Campo de texto de ejemplo de entrada (localStorage es el almacenamiento de los campos de entrada)
<div id="post"> <script> if (localStorage.length > 0) { post.innerHTML += localStorage.key(0); } </script> </div>Solución
Esta función me da realmente el comportamiento deseado.
<div id="post"> <script> if (localStorage.length > 0) { post.innerHTML += localStorage.key(0); eval(localStorage.getItem(localStorage.key(0))); } </script> </div><html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <form> <label for="topic" >Topic: <br /> <input id="topic" required /></label> <br /> <br /> <label for="text" >Text: <br /> <input id="text" type="text" required /></label> <br /> <button id="submit" onclick="test()">submit</button> </form> <div id="TESTDIV"> </div> <script> function test(){ if(localStorage.length >0){ item+=localStorage.setItem(document.getElementById("topic").value,document.getElementById("text").value); } else{ var item=localStorage.setItem(document.getElementById("topic").value,document.getElementById("text").value); } document.getElementById("TESTDIV").innerHTML= localStorage.getItem(document.getElementById("topic").value); } </script> </body> </html> Hi! Hope You are well i think i will works.